Quản lý sinh viên Danh sách liên kết đơn C++

Dùng mảng một chiều để lưu trữ một lớp học có N sinh viên. Biết rằng mỗi sinh viên bao gồm các thông tin sau: Tên [chuỗi ký tự], Mã số sinh viên [chuỗi ký tự], Điểm trung bình. Hãy viết hàm thực hiện các yêu cầu sau:
a. In danh sách sinh viên ra màn hình
b. Liệt kê những sinh viên có điểm trung bình cao nhất trong lớp học.
c. Cho biết số sinh viên có điểm trung bình >=5. Nếu không có thì thông báo không có.
d. Tìm một sinh viên có tên X trong lớp học [X nhập từ bàn phím]
e. Xoá một sinh viên có mã số cho trước trong lớp học. Nếu không có thì thông báo không có.
f. Sắp xếp danh sách sinh viên tăng theo điểm trung bình bằng thuật toán sắp xếp mà các bạn đã học [Selection Sort, Interchange Sort, Binary Sort]
g. Chèn một sinh viên vào lớp học, biết ràng sau khi chèn danh sách sinh viên vẫn tăng dần theo điểm trung bình.

#include #include #include #include struct sv { char ten[20]; char MSSV[10]; int dtb; }; struct NODE { sv info; struct NODE* next; }; struct LIST { NODE *head; NODE *tail; }; NODE* CreateNode [sv x] { NODE *p; p=new NODE; if[p==NULL] exit[1]; p->info=x; p->next=NULL; return p; } void CreateList [LIST &L] { L.head=L.tail=NULL; } void input [sv &x] { printf["\nNhap MSSV: "]; fflush[stdin]; gets[x.MSSV]; printf["\nNhap ten: "]; fflush[stdin]; gets[x.ten]; printf["\nNhap dtb: "]; scanf["%d", &x.dtb]; } void AddLast [LIST &L, NODE *p] { if[L.head==NULL] L.head=L.tail=p; else { L.tail->next=p; L.tail=p; } } void nhap [LIST &L] { sv x; char kt; printf["\nNhan phim bat ki de tiep tuc nhap."]; printf["\nNhan 0 de dung nhap."]; do { kt=getch[]; if[kt=='0'] break; input[x]; NODE *p=CreateNode[x]; AddLast[L,p]; } while [1]; } void output [sv x] { printf["\n%s %s %d",x.MSSV,x.ten,x.dtb]; } void xuat [LIST L] { NODE *p; p=L.head; while[p!=NULL] { output[p->info]; p=p->next; } } void maxdtb [LIST L] { NODE *p,*max; int dem; p=L.head; max=p; while [p!=NULL] { if[p->info.dtb>max->info.dtb] { max=p; dem=0; } if[p->info.dtb==max->info.dtb] { max=p; dem++; } p=p->next; } printf["\nSV co dtb cao nhat la: \n"]; if[dem==0] output[max->info]; else { NODE *q=L.head; while [q!=NULL] { if[q->info.dtb==max->info.dtb] output[q->info]; q=q->next; } } } void thongkedtb [LIST L] { NODE *p; int dem=0; p=L.head; while [p!=NULL] { if[p->info.dtb>=5] dem++; p=p->next; } if[dem==0] printf["\nKo co sv co dtb>=5."]; else printf["\nCo %d sv co dtb >=5.",dem]; } void tim [LIST L] { NODE *p; int dem=0; char k[20]; printf["\nNhap ten sv can tim: "]; fflush[stdin]; gets[k]; p=L.head; while [p!=NULL] { if[strcmp[k,p->info.ten]==0] dem++; p=p->next; } if[dem!=0] { printf["\nTim thay sv: "]; output[p->info]; } else printf["\nKo tim thay."]; } void xoa [LIST &L] { NODE *p, *q; char a[10]; p=L.head; q=NULL; printf["\nNhap MSSV can xoa: "]; fflush[stdin]; gets[a]; while [p!=NULL] { if[strcmp[a, p->info.MSSV]==0] break; else printf["\nKo co sv can xoa."]; q=p; p=p->next; } if[q!=NULL] { if[p!=NULL] { q->next=p->next; delete [p]; if[p==L.tail] L.tail=q; delete[p]; } } else { L.head=p->next; delete[p]; if[L.head==NULL] L.tail=NULL; } } void selectionsort [LIST &L] { NODE *p,*q,*min; p=L.head; sv temp; while [p!=L.tail] { min=p; q=p->next; while [q!=NULL] { if[q->info.dtbinfo.dtb] min=q; q=q->next; } temp=p->info; p->info=min->info; min->info=temp; p=p->next; } } void menu[] { LIST L; NODE *p,*q,*moi; sv x; char chon; CreateList[L]; do { printf["\n\t\t\tMENU"]; printf["\n\t1. Nhap ds"]; printf["\n\t2. In ds"]; printf["\n\t3. Ds sv co dtb cao nhat"]; printf["\n\t4. Ds sv co dtb >=5"]; printf["\n\t5. Tim sv"]; printf["\n\t6. Xoa sv"]; printf["\n\t7. Sap xep ds"]; printf["\n\t8. Chen sv"]; printf["\n\tNhap 0 de thoat"]; chon=getch[]; switch[chon] { case '1': { nhap[L]; break;} case '2': { xuat[L]; break;} case '3': { maxdtb[L]; break;} case '4': { thongkedtb[L]; break;} case '5': { tim[L]; break;} case '6': { xoa[L]; printf["\nDs sau khi xoa: "]; xuat[L]; break;} case '7': { selectionsort[L];printf["\nDs sau khi sap xep: "]; xuat[L]; break;} case '8': { sv them; printf["\nNhap thong tin sv can them: "]; input[them]; NODE *t= CreateNode[them]; AddLast[L,t]; selectionsort[L]; printf["\nDs sau khi them :"]; xuat[L]; break; } case '0': exit[1]; default: printf["\nNhap lai."]; } } while [chon!='0']; } int main[] { while[1] { menu[]; getch[]; } }

Page 2

Trong bài này, nội dung chủ yếu là ôn tập và áp dụng lại kiến thức của 7 bài trước trong loạt bài về “Danh sách liên kết đơn”. Vì vậy nếu bạn chưa đọc hết những bài trước, vui lòng quay lại đọc lại trước khi đến phần này!

Trên ngôn ngữ C/C++, viết chương trình thực hiện yêu cầu sau:

  • 1. Định nghĩa một cấu trúc Sinh viên bao gồm các trường thông tin như sau: Mã Sinh viên [kiểu số nguyên], tên Sinh viên [kiểu chuỗi ký tự], lớp [kiểu chuỗi ký tự], điểm tổng kết [kiểu số thực], hạnh kiểm [Tốt, khá, trung bình, yếu].
  • 2. Cài đặt một cấu trúc danh sách liên kết đơn cho kiểu dữ liệu Sinh viên, với các thao tác: 1] Khởi tạo danh sách; 2] kiểm tra rỗng 3] thêm phần tử vào cuối [hoặc đầu] danh sách 4] Tìm kiếm phần tử trong danh sách; 5] Xóa ]phần tử cuối cùng khỏi danh sách; 6] Duyệt danh sách; 7] Sắp xếp danh sách
  • 3. Chương trình chính: Sử dụng cấu trúc danh sách liên kết đơn và các thao tác ở trên để:

– Nhập vào một danh sách liên kết đơn gồm n Sinh viên [n bất kỳ].

– Hiển thị danh sách đã nhập ra màn hình.

-Liệt kê ra màn hình danh sách tất cả những Sinh viên thuộc lớp “D13CNPM”.

– Sắp sếp danh sách sinh viên theo mã sinh viên tăng dần

– Xóa phần tử cuối cùng khỏi danh sách.

Hiển thị lại danh sách sau khi xóa ra màn hình.

#include #include #include struct sinhvien { int masv; char tensv[20]; char lop[20]; float dtk; char hk[15]; }; typedef struct sinhvien SV; struct node{ SV data; node * next; }; typedef struct node NODE; struct list{ NODE *pHead; NODE *pTail; }; typedef struct list LIST; void KhoiTao[LIST &ds]{ ds.pHead = NULL; ds.pTail = NULL; } int KiemTraRong[LIST ds]{ if [ds.pHead == NULL]{ return 1; } return 0; } NODE* TaoNode[SV x] { NODE *p; p = new NODE; if [p==NULL] { printf ["KHONG DU BO NHO"]; return NULL; } p->data=x; p->next=NULL; return p; } void ChenCuoi [LIST &ds, NODE *p]{ if [ds.pHead==NULL] { ds.pHead=p; ds.pTail=p; } else { ds.pTail->next=p; ds.pTail=p; } } void Nhap[LIST &ds, int n]{ printf["NHAP THONG TIN SINH VIEN\n"]; for[int i = 0; i < n; i++]{ SV x; printf ["Nhap ma sinh vien : "];fflush[stdin]; scanf["%d",&x.masv]; printf ["Nhap ten sinh vien : "];fflush[stdin]; gets[x.tensv]; printf ["Nhap lop : "];fflush[stdin]; gets[x.lop]; printf ["Nhap diem tong ket : "];fflush[stdin]; scanf["%f",&x.dtk]; printf ["Nhap hanh kiem : "];fflush[stdin]; gets[x.hk]; printf ["\n \n"]; NODE *p = new NODE; p = TaoNode[x]; ChenCuoi[ds,p]; } } void Xuat[LIST ds]{ for[NODE *p = ds.pHead; p!= NULL; p=p->next]{ printf["%d\t %s\t %s\t %f\t %s\n", p->data.masv, p->data.tensv, p->data.lop, p->data.dtk, p->data.hk]; } } void SVD13CNPM[LIST ds]{ for[NODE *p = ds.pHead; p!= NULL; p=p->next]{ if[strcmp[p->data.lop, "D13CNPM"]==0]{ printf["%d\t %s\t %s\t %f\t %s\n", p->data.masv, p->data.tensv, p->data.lop, p->data.dtk, p->data.hk]; } } } void SapXep[LIST &ds]{ NODE *p, *q; for[p = ds.pHead; p != ds.pTail; p=p->next]{ for[q = p->next; q != NULL; q = q->next]{ if[p->data.masv > q->data.masv]{ SV x = p->data; p->data = q->data; q->data = x; } } } Xuat[ds]; } void XoaCuoi[LIST &ds] { for[NODE *k = ds.pHead; k != NULL; k = k ->next] { if[k->next == ds.pTail] { delete ds.pTail; k->next = NULL; ds.pTail = k; } } Xuat[ds]; } int main[]{ LIST ds; int n; printf["NHAP N: "]; scanf["%d",&n]; KhoiTao[ds]; Nhap[ds,n]; printf["\nDANH SACH SINH VIEN\n"]; Xuat[ds]; printf["\nDANH SACH SINH VIEN D13CNPM\n"]; SVD13CNPM[ds]; printf["\nDANH SACH SINH VIEN SAP XEP THEO MA\n"]; SapXep[ds]; printf["\nDANH SACH SINH VIEN DA XOA PHAN TU CUOI\n"]; XoaCuoi[ds]; }

Video liên quan

Chủ Đề