intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Đề tài: Chương trình quản lý sinh viên

Chia sẻ: Lam Minh | Ngày: | Loại File: DOC | Số trang:22

162
lượt xem
23
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Danh sách là tập hợp các nút (ô nhớ) không liền kề, có kiểu dữ liệu xác định và giữa chúng có liên lạc với nhau bởi con trỏ địa chỉ. Số nút của danh sách gọi là chiều dài của danh sách. Một danh sách có chiều dài bằng 0 là một danh sách rỗng.Danh sách móc n i kép là t p h p các nút mà m i nút có 2 m i ố ậ ợ ỗ ố liên kết với 2 phần tử khác trong danh sách.

Chủ đề:
Lưu

Nội dung Text: Đề tài: Chương trình quản lý sinh viên

  1. MỤC LỤC MỤC LỤC...................................................................................................01 PHẦN I: GIỚI THIỆU CHUNG................................................................02 1. Khái niệm về danh sách móc nối...........................................................02 2. Các phép toán trên danh sách..................................................................02 3. Giới thiệu về chương trình quản lý sinh viên.......................................02 PHẦN II: GIỚI THIỆU CÁC THÀNH PHẦN CHÍNH CỦA CHƯƠNG TRÌNH.........................................................................................................03 1. Sơ đồ các lớp đối tượng........................................................................03 2. Mô tả các lớp đối tượng........................................................................04 PHẦN III: GIỚI THIỆU CÁC CHỨC NĂNG TRONG CHƯƠNG TRÌNH.........................................................................................................08 PHẦN IV: MÃ NGUỒN CHƯƠNG TRÌNH............................................09 PHẦN V: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN CHƯƠNG TRÌNH.........................................................................................................22 PHẦN 1: GIỚI THIỆU CHUNG 1.Khái niệm về danh sách móc nối Danh sách là tập hợp các nút (ô nhớ) không liền kề, có kiểu dữ liệu xác định và giữa chúng có liên lạc với nhau bởi con trỏ địa chỉ. Số nút của danh sách gọi là chiều dài của danh sách. Một danh sách có chiều dài bằng 0 là một danh sách rỗng. 1
  2. Danh sách móc nối kép là tập hợp các nút mà mỗi nút có 2 mối liên kết với 2 phần tử khác trong danh sách. Một nút trong danh sách móc nối kép có dạng: LEFT INFO RIGHT Trong đó: LEFT: con trỏ trái: lưu trữ địa chỉ nút trước RIGHT: con trỏ phải: Lưu trữ địa chỉ nút sau Danh sách móc nối kép có dạng: 2.Các phép toán trên danh sách • Tạo mới một danh sách • Thêm 1 nút vào danh sách • Tìm kiếm 1 nút trong danh sách • Xóa 1 nút khỏi danh sách • Sắp xếp thứ tự các danh sách • Hủy danh sách 3.Giới thiệu về chương trình quản lý sinh viên Chương trình giúp quản lý dữ liệu cũng như thông tin của sinh viên như: mã số sinh viên, họ tên, năm sinh, lớp, điểm trung bình…. Chương trình có các chức năng chình như: • Tạo 1 danh sách sinh viên • Thêm 1 sinh viên vào danh sách • Xóa 1 sinh viên • Tìm kiếm 1 sinh viên • Sắp xếp danh sách sinh viên PHẦN II: GIỚI THIỆU CÁC THÀNH PHẦN CHÍNH CỦA CHƯƠNG TRÌNH 2
  3. SƠ ĐỒ CÁC LỚP ĐỐI TƯỢNG NODE LIST SINHVIEN info (đối tượng thành phần); * left, * right *first, *last getnode freenode Createlist Nhaplist Showlist Listsize Push_first Push_last Push_after Search_name Search_maso Del_first Del_last SINHVIEN Del_node_name Del_node_maso Clear_list Maso,hoten,namsinh,gio Sort_list_dtb itinh,quequan,lop,dtb Ghi_file Doc_file Nhập MENU Hiện LIST a (đttp) Hien Xuly MÔ TẢ CÁC LỚP ĐỐI TƯỢNG Lớp SV: 1. Thuộc tính: • Kiểu dữ liệu char: maso: Mã số sinh viên hoten: Họ và tên sinh viên lop: Lớp sinh viên đang học gioitinh: Giới tính sinh viên quequan: Quê quán sinh viên • Kiểu dữ liệu int: ns: Năm sinh • Kiểu dữ liệu float: 3
  4. dtb: điểm trung bình 2. Phương thức: • Nhap: Hàm nhập 1 sinh viên • Hien: Hàm hiện sinh viên I. Lớp NODE: 1. Thuộc tính: • Đối tượng thành phần: Info: chứa thông tin sinh viên • *l: Con trỏ trái, trỏ tới nút đứng trước • *r: Con trỏ phải, trỏ tới nút đứng sau 2. Phương thức: • Getnode: Hàm cấp phát 1 nút mới cho danh sách móc nối Thuật toán: B1: Khởi tạo 1 nút mới , cấp phát bộ nhớ cho nút đó B2: Nếu nút đó khác NULL p->right=NULL; p->left=NULL; B3: Nhập dữ liệu info cho nút đó Hàm trả về con trỏ trỏ tới địa chỉ nút mới tạo. Nếu không đủ bộ nhớ để tạo, hàm trả về giá trị NULL. • Freenode: Hàm giải phóng bộ nhớ nút vừa cấp phát II. Lớp LINKLIST thừa kế từ lớp NODE 1. Thuộc tính kiểu NODE • *first: trỏ tới phần tử đầu danh sách • *last: trỏ tới phần tử cuối danh sách 2. Phương thức: • Createlist: Hàm khởi tạo 1 danh sách mới Cho giá trị các con trỏ quản lý địa chỉ hai nút đầu và cuối danh sách móc nối kép về con trỏ NULL. • Nhaplist: Hàm nhập n sinh viên vào danh sách Thuật toán: B1: Nhập số lượng sinh viên cần nhập vào danh sách (n) B2: Khởi tạo biến đếm i, i=0 B3: So sánh i với n. Nếu i B4, nếu i>=n -> B6 B4: Thêm 1 nút vào danh sách (push_last()) B5: Tăng i lên 1 -> Quay lại bước 2 B6: Kết thúc. • Showlist: Hàm hiện danh sách sinh viên Thuật toán: 4
  5. B1: Khởi tạo 1 con trỏ trỏ vào nút đầu tiên B2: Nếu nút đó khác NULL->B3, ngược lại ->kết thúc B3: Hiện nút đó B4: Dịch con trỏ sang phải 1 nút->B2 • Listsize: Hàm đếm số lượng nút trong danh sách Thuật toán: B1: Khởi tạo 1 con trỏ, biến đếm I (i=0) B2: Cho con trỏ trỏ vào nút đầu tiên B3: Nếu nút đó khác NULL ->B4, ngược lại->B6 B4: dịch con trỏ sang phải 1 nút B5: Tăng i lên 1->B3 B6: Trả về i; • Push_first: Hàm thêm 1 nút vào đầu danh sách. Thuật toán: B1: Khởi tạo con trỏ, tạo 1 nút. B2: Neu nút đó =NULL ->B3. B3: Nếu danh sách rỗng->B4. Nếu danh sách không rỗng-> B5. B4: đặt nút mới làm nút đầu và nút cuối. B5: Liên kết phải nút mới trỏ đến nút đầu tiên hiện thởi trong danh sách. B6: Liên kết trái nút đầu tiên hiện thời trỏ đến nút mới. B7: Đặt nút mới làm nút đầu tiên. • Push_last: Hàm thêm 1 nút vào cuối danh sách. Thuật toán: B1: Khởi tạo con trỏ, tạo 1 nút B2: Nếu nút đó =NULL ->B3 B3: Nếu danh sách rỗng->B4 Nếu danh sách không rỗng-> B5 B4: đặt nút mới làm nút đầu và nút cuối. B5: Liên kết phải nút cuối cùng hiện thời trỏ đến nút mới. B6: Liên kết trái mới trỏ đến nút cuối cùng hiện thời trong danh sách. B7: Đặt nút mới làm nút cuối cùng. • Push_after: Hàm thêm 1 nút vào sau 1 vị trí trong danh sách Thuật toán: B1: Khởi tạo con trỏ p trỏ đến mới, con trỏ q để duyệt, khởi tạo biến vt để xác định vị trí cần chèn sau, i là biến đếm(i=0). B2: Nhập vị trí cần chèn (vt). B3: So sánh vt với số nút trong danh sách 5
  6. Nếu vt>số nút ->B4 Nếu vtB6 B4: Gán vt = số nút B5: Thêm 1 nút vào cuối danh sách (push_last). B6: so sánh i với số nút Nếu i>số nút->Kết thúc Nếu iB7 B7: so sánh i với vt Nếu i=vt->B8 Nếu i khác vt->B11 B8: Tạo 1 nút mới, cho p trỏ đến nút đó. B9: Nối nút sau q với p. B10: Nối q với p. B11: Dịch q sang phải 1 nút, tăng i lên 1. • Search_name: Hàm tìm kiếm 1 nút theo tên trong danh sách Thuật toán: B1: Tạo con trỏ q để duyệt, cho q trỏ đến nút đầu tiên B2: Nếu nút đó bằng NULL-> Kết thúc Nếu nút đó khác NULL->B3 B3: So sánh dữ liệu tên của nút đó với dữ liệu tên cần tìm Nếu đúng->B5 Nếu sai->B4 B4: dịch q sang phải 1 nút ->B2 B5: Trả về giá trị là 1 nút. • Search_maso: Hàm tìm kiếm 1 nút theo mã số trong danh sách Thuật toán: B1: Tạo con trỏ q để duyệt, cho q trỏ đến nút đầu tiên B2: Nếu nút đó bằng NULL-> Kết thúc Nếu nút đó khác NULL->B3 B3: So sánh dữ liệu mã số của nút đó với dữ liệu mã số cần tìm Nếu đúng->B5 Nếu sai->B4 B4: dịch q sang phải 1 nút ->B2 B5: Trả về giá trị là 1 nút. • Del_first: Hàm xóa nút đầu tiên trong danh sách Thuật toán: B1: Xét nếu danh sách rỗng thì không làm gì cả Nếu danh sách không rỗng->B2 B2: Chuyển nút đầu tiên là nút tiếp theo 6
  7. • Del_last: Hàm xóa nút cuối cùng trong danh sách Thuật toán: B1: Xét nếu danh sách rỗng thì không làm gì cả B2: tạo 1 con trỏ p trỏ đến nút gần cuối B3: đặt liên kết phải của p là NULL. B4: đặt liên kết trái của nút cuối là NULL. B5: đặt p làm nút cuối • Del_node_name: Hàm xóa nút theo tên trong danh sách Thuật toán: B1: tạo 1 con trỏ trỏ đến nút cần xóa B2: Nếu danh sách rỗng không làm gì cả B3: Nếu nút cần xóa = NULL thì không làm gì cả B4: Nếu nút cần xóa là nút đầu tiên->del_first(). B5: Nếu nút cần xóa là nút cuối->del_last(). B5: Trường hợp còn lại->B6 B6: Cho liên kết phải nút bên trái nút cần xóa trỏ đến nút bên phải nút cần xóa. B7: Cho liên kết trái nút bên phải nút cần xóa trỏ đến nút bên trái nút cần xóa. B8: Cho liên kết phải trái nút cần xóa về NULL. B9: delete nút cần xóa. • Del_node_maso: Hàm xóa nút theo mã số trong danh sách Thuật toán: B1: tạo 1 con trỏ trỏ đến nút cần xóa B2: Nếu danh sách rỗng không làm gì cả B3: Nếu nút cần xóa = NULL thì không làm gì cả B4: Nếu nút cần xóa là nút đầu tiên->del_first(). B5: Nếu nút cần xóa là nút cuối->del_last(). B5: Trường hợp còn lại->B6 B6: Cho liên kết phải nút bên trái nút cần xóa trỏ đến nút bên phải nút cần xóa. B7: Cho liên kết trái nút bên phải nút cần xóa trỏ đến nút bên trái nút cần xóa. B8: Cho liên kết phải trái nút cần xóa về NULL. B9: delete nút cần xóa. • Clear_list: Hàm hủy toàn bộ danh sách Thuật toán: B1: Tạo 1 con trỏ q để duyệt, cho q trỏ đến nút đầu tiên. B2: Nếu danh sách rỗng-> Kết thúc Ngược lại->B3 7
  8. B3: Dịch nút đầu tiên sang bên phải 1 nút B4: Cho liên kết phải q = NULL B5: Nếu nút đầu tiên khác rỗng, cho liên kết trái nút đó là NULL B6: delete q; B7: Cho q trỏ đến nút đàu tiên->B2; • Sort_list_dtb: Hàm sắp xếp danh sách theo điểm trung bình tăng dần Thuật toán: (Sử dụng thuật toán sắp xếp nổi bọt – Bubble sort) B1: Tạo 2 con trỏ i, j để duyệt. Cho i trỏ đến nút đầu tiên, j trỏ đến nút cuối cùng. B2: So sánh i với nút cuối cùng. Nếu i= nút cuối cùng->kết thúc Nếu i khác nút cuối -> B3 B3: So sánh j với i Nếu j =i->B Nếu j khác i->B4 B4: So sánh dữ liệu dtb của j với nút trước j Nếu dtb của j> dtb của nút trước j->B7 Nếu dtb của j< dtb của nút trước j->B5 B5: Đổi chỗ j vs nút trước j B6: Chuyển j trỏ sang bên trái 1 nút.->B3 B7: Chuyển i trỏ sang bên phải 1 nút.->B2. • Ghi_file: Hàm nhập danh sách ra file • Doc_file: Hàm đọc danh sách từ file III. Lớp MENU 1. Thuộc tính Đối tượng thành phần: LIST a; 2. Phương Thức • Hien: Hàm hiện MENU • Xuly: Hàm xử lý các chức năng PHẦN III: GIỚI THIỆU CÁC CHỨC NĂNG TRONG CHƯƠNG TRÌNH Chương tringh quản lý sinh viên có tất cả 7 chức năng chính bao gồm: 1. Nhập danh sách sinh viên 1) Nhập danh sách từ bàn phím 2) Ghi danh sách ra file 3) Đọc danh sách từ file 8
  9. 2. Hiện danh sách sinh viên 3. Đếm số lượng sinh viên trong danh sách 4. Thêm 1 sinh viên vào danh sách 1) Thêm 1 sinh viên vào đầu danh sách 2) Thêm 1 sinh viên vào cuối danh sách 3) Thêm 1 sinh viên vào sau 1 nút xác định trong danh sách 5. Tìm kiếm 1 sinh viên trong danh sách 1) Tìm kiếm 1 sinh viên theo tên trong danh sách 2) Tìm kiếm 1 sinh viên theo mã số trong danh sách 6. Xóa 1 sinh viên trong danh sách. 1) Xóa sinh viên theo mã số xác định 2) Xóa sinh viên theo tên xác định 3) Xóa toàn bộ danh sách 7. Sắp xếp danh sách sinh viên theo điểm trung binh PHẦN IV: MÃ NGUỒN CHƯƠNG TRÌNH “baitaplon.h” #include #include #include #include #include #include #include class SINHVIEN { public: char maso[6],hoten[30],gioitinh[5],quequan[10],lop[6]; int namsinh; float dtb; void nhap(); void hien(); }; class NODE { public: SINHVIEN info; NODE *left,*right; NODE* getnode(); 9
  10. void freenode(NODE *p); }; class LIST : public NODE { public: NODE *first,*last; void createlist(); void nhaplist(); void showlist(); int listsize(); void push_first(NODE *l); void push_last(NODE *l); void push_after(NODE *l); NODE* search_name(NODE *l,char timten[]); NODE* search_maso(NODE *l,char timmaso[]); int del_first(); int del_last(); int del_node_name(NODE *l,char xoaten[]); int del_node_maso(NODE *l,char xoamaso[]); void clear_list(NODE *l); void sort_list_dtb(NODE *l); void ghi_file(); void doc_file(); }; class MENU { LIST a; public: void hien(); void xuly(); }; “SINHVIEN.cpp” #include"baitaplon.h" void SINHVIEN::nhap() { cout
  11. cout
  12. last=NULL; } void LIST::nhaplist() { int n,i;// n la so luong sinh vien can nhap coutn; NODE *p; p=new NODE; for(i=0;i
  13. while(p!=NULL) { p=p->right i++; } return i; } void LIST::push_first(NODE *l) { NODE *p; p=getnode(); //cap phat 1 nut if(p==NULL) coutleft=p; //lien ket trai nut dau ten tro den nut moi first=p; //dat nut moi lam nut dau tien } } void LIST::push_last(NODE *l) { NODE *p; //p la nut moi p=getnode(); if(p==NULL) coutleft=last; last=p; } } void LIST::push_after(NODE *l) { NODE *p,*q; 13
  14. int vt,i; q=first; coutvt; if(vt>listsize()) { vt=listsize(); push_last(l); } if(vtright; q->right->left=p; // noi nut q voi p q->right=p; p->left=q; } q=q->right; } NODE* LIST::search_name(NODE *l,char timten[]) { NODE *q; //q la nut duyet //q=getnode(); q=first; while(q!=NULL) { if(strcmpi(q->info.hoten,timten)==0) break; q=q->right; } return q; } NODE* LIST::search_maso(NODE *l,char timmaso[]) { NODE *q; //q la nut duyet q=first; while(q!=NULL) 14
  15. { if(strcmpi(q->info.maso,timmaso)==0) break; q=q->right; } return q; } int LIST::del_first() { if(first==NULL) return 2; else { first=first->right; return 1; } } int LIST::del_last() { if(first==NULL) return 2; else { NODE *p=last->left; p->right = NULL; last->left= NULL; last=p; return 1; } } int LIST::del_node_maso(NODE *l,char xoamaso[]) { NODE *delnode=search_maso(l,xoamaso); if(first==NULL) return 0; if(delnode==NULL) return 3; if(delnode==first) { del_first(); return 1; 15
  16. } if(delnode==last) { del_last(); return 1; } else { (delnode->left)->right = (delnode->right); (delnode->right)->left=(delnode->left); delnode->right=NULL; delnode->left=NULL; delete delnode; return 1; } } int LIST::del_node_name(NODE *l,char xoaten[]) { NODE *delnode=search_name(l,xoaten); if(first==NULL) return 0; if(delnode==NULL) return 3; if(delnode==first) {del_first(); return 1; } if(delnode==last) {del_last(); return 1; } else { (delnode->left)->right = (delnode->right); (delnode->right)->left=(delnode->left); delnode->right=NULL; delnode->left=NULL; delete delnode; return 1; } 16
  17. } void LIST::clear_list(NODE *l) { NODE *q=first; while(q!=NULL) { first=first->right; q->right=NULL; if(first!=NULL) first->left=NULL; delete q; q=first; } } void LIST::sort_list_dtb(NODE *l) { NODE *nodei, *nodej; for(nodei=first;nodei!=last;nodei=nodei->right) { for(nodej=last;nodej!=nodei;nodej=nodej->left) { if(nodej->info.dtb < (nodej->left)->info.dtb) { float temp; temp=nodej->info.dtb; nodej->info.dtb=(nodej->left)->info.dtb; (nodej->left)->info.dtb=temp; } } } } void LIST::ghi_file() { SINHVIEN b; fstream a; //Khao bao doi tuong ghi/doc int n,i; coutn; 17
  18. a.open("SinhVien.dat",ios::out+ios::binary); // Mo tep va ghi kieu nhi phan for(i=0;i
  19. cout
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
3=>0