ĐỀ BÀIViết chương trình quản lý sinh viên sử dụng danh sách liên kết đơn, thông tin mỗi sv gồm: Mã SV – kiểu số nguyên, Họ tên – kiểu chuỗi tối đa 40 kí tự, Điểm trung bình – kiểu số thự
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO NGÂN HÀNG NHÀ NƯỚC VIỆT NAM
TRƯỜNG ĐẠI HỌC NGÂN HÀNG THÀNH PHỐ HỒ CHI MINH
BÀI TẬP NHÓM GIẢI THUẬT ỨNG DỤNG TRONG KINH DOANH
GIẢNG VIÊN: NGUYỄN PHƯƠNG NAM
Mã lớp học phần: ITS724_2221_1_D07
1 | P a g e
Trang 2Mục Lục
ĐỀ BÀI 4
Màn hình chạy chương trình danh sách sinh viên: 5
Diễn giải và trình bày 9
Chức năng 3: Xuất thông tin các sv có điểm TB>=5 9
Chức năng 4: Đếm có số sinh viên có điểm trung bình <5 và in danh sách này 9
Chức năng 5: Sắp xếp danh sách tăng dần theo điểm trung bình 10
Chức năng 6: Xóa toàn bộ danh sách (có hỏi trước khi xóa) 11
2 | P a g e
Trang 33 | P a g e
BẢNG PHÂN CÔNG
HOÀN THÀNH
1 Cao Thanh
Long 030238220116
Tổng hợp code và phần giải thích của nhóm
Phụ trách tác vụ sắp xếp theo điểm trung bình, tác vụ xóa toàn bộ danh sách
100%
2 Nguyễn NhưTrương
Quỳnh
03023822021 7
Phụ trách tác vụ tạo danh sách, xuất danh sách sinh viên, xuất thông tin sv có điểm tb >=5
100%
3 Phạm HồngDương 030238220032
Giải thích các tác vụ 100%
Trang 4ĐỀ BÀI
Viết chương trình quản lý sinh viên (sử dụng danh sách liên kết đơn), thông tin mỗi sv gồm:
Mã SV – kiểu số nguyên, Họ tên – kiểu chuỗi tối đa 40 kí tự, Điểm trung bình – kiểu số
thực Chương trình có thiết kế menu chọn lựa gồm các chức năng sau:
1 Tạo 1 danh sách gồm n sinh viên (n nhập từ bàn phím, thông tin của mỗi sv nhập từ bàn phím)
2 Xuất danh sách sinh viên
3 Xuất thông tin các sv có điểm TB>=5
4 Đếm có số sinh viên có điểm trung bình <5 và in danh sách này
5 Sắp xếp danh sách tăng dần theo điểm trung bình
6 Xóa toàn bộ danh sách (có hỏi trước khi xóa) Yêu cầu:
- Đại diện nhóm nộp trên Classroom các file sau: File chương trình cpp, file báo cáo docx Tên file chương trình đặt theo quy tắc: Lớp_BTN_Họ tên sinh viên đại diện.cpp
- Lưu ý: Không gõ dấu tiếng Việt
Ví dụ: GE16_BTN_Nguyen_Van_Anh.cpp
• Tên báo cáo đặt là: Baocao.docx, SV ghi thông tin các thành viên trong nhóm:
Họ tên, MSSV và bảng phân công công việc, tỷ lệ đóng góp của từng thành viên
• Nội dung báo cáo: Diễn giải và trình bày mục đích, ý nghĩa của các chức năng
3, 4, 5, 6
- Có chú thích, diễn giải cho các câu lệnh (nếu có)
- Cú pháp rõ ràng, dễ đọc, không có lỗi cú pháp
- Kết quả chính xác
- Không sao chép bài của các nhóm
-Hết -4 | P a g e
Trang 5Màn hình chạy chương trình danh sách sinh viên:
5 | P a g e
Trang 66 | P a g e
Trang 77 | P a g e
Trang 88 | P a g e
Trang 9Diễn giải và trình bày
Chức năng 3: Xuất thông tin các sv có điểm TB>=5
void GreaterThan5(NodeSV phead)
{
NodeSV p=phead;
if(p==NULL)
printf("\n Danh sach bi rong\n");
for(p=phead;p!=NULL;p=p->next) {
if (p->info.dtb>=5){
printf("\n Sinh vien %s co diem trung binh >=5\n",p->info.hoten);
Xuat1SV(p->info);
} }
}
-Mục đích , ý nghĩa: Tìm kiếm những sinh viên có điểm trung bình >=5 và in ra thông tin
của sinh viên đó
-Giải thích:
+Khởi tạo 1 danh sách liên kết p nhận giá trị phead Kiểm tra xem p có rỗng hay không Nếu rỗng thì in ra màn hình “Danh sách bị rỗng”.
+Ngược lại chạy vòng lặp for với điểm đầu phead và chạy đến cuối danh sách Điều kiện info.dtb của sinh viên >=5 Thỏa điều kiện sẽ xuất ra thông tin sinh viên đó
Chức năng 4: Đếm có số sinh viên có điểm trung bình <5 và in danh sách này
void LessThan5(NodeSV phead)
{
int i=0;
NodeSV p=phead;
if(p==NULL)
printf("\n Danh sach bi rong\n");
9 | P a g e
Trang 10for(p=phead;p!=NULL;p=p->next) {
if (p->info.dtb <5) {
Xuat1SV(p->info);
i++;
} }
printf("\nSo sv co diem TB <5 la : %d",i);
}
-Mục đích, ý nghĩa: Đếm số lượng sinh viên có điểm trung bình <5.
-Giải thích:
+ Khởi tạo danh sách liên kết p nhận giá trị của phead ,khai báo biến i kiển integer và gán cho i giá trị đầu = 0
+ Kiểm tra xem p có rỗng hay không Nếu rỗng thì in ra màn hình “Danh sách bị rỗng” + Ngược lại chạy vòng lặp for với điểm đầu phead và chạy đến cuối danh sách Điều kiện info.dtb của sinh viên <5 Thỏa điều kiện sẽ tăng biến đếm i lên 1 đơn vị và in ra thông tin sinh viên đó.Cuối cùng, số lượng sinh viên có điểm trung bình dưới 5 sẽ được in ra màn hình
Chức năng 5: Sắp xếp danh sách tăng dần theo điểm trung bình
void SortingAsc(NodeSV &phead)
{
NodeSV p, q;
for (p = phead ; p->next!=NULL;p=p->next){
for(q=p-> next ; q!=NULL;q=q->next){
if(p->info.dtb>q->info.dtb) {
SV x=p->info;
p->info=q->info;
q->info=x;
} }
}
}
10 | P a g e
Trang 11-Mục đích, ý nghĩa:Sắp xếp danh sách theo thứ tự tăng dần của điểm trung bình (dtb) của các sinh viên
-Giải thích:
Khởi tạo 1 danh sách liên kết với p nhận giá trị phead và q là p->next của p Chạy vòng lặp for bên ngoài là p=phead và for bên trong là q=p->next để lặp vòng lặp đến cuối danh sách Điều kiện vòng lặp là điểm TB của p > điểm TB của q (tức điểm TB của sinh viên đứng trước lớn hơn điểm TB sinh viên đứng sau), ta sẽ thực hiện phép hoán vị trí của hai sinh viên này Và cứ lặp đi lặp lại như vậy ta sẽ thu được kết quả là một danh sách tăng dần điểm trung bình của sinh viên
Chức năng 6: Xóa toàn bộ danh sách (có hỏi trước khi xóa)
void ClearList(NodeSV &pHead){
NodeSV p;
while (pHead!= NULL){
p = pHead;
pHead = p->next;
delete p;
}
}
int main ()
char kt;
printf("\n Ban co muon xoa toan bo danh sach khong (Y/N):");
scanf(" %c",&kt);
while(kt != 'Y' && kt != 'N' ) {
printf("\n Ban da nhap sai cau lenh, vui long chon (Y/N):"); scanf(" %c",&kt);
}
if (kt == 'Y')
{
11 | P a g e
Trang 12printf("\n Danh sach da duoc xoa");
XuatDS(phead);
}
else printf( "Tam biet");
break;
-Mục đích, ý nghĩa: Sử dụng để xóa toàn bộ các phần tử trong danh sách liên kết.
-Giải thích:
+Sử dụng một vòng lặp while để duyệt qua từng phần tử của danh sách Tại mỗi vòng lặp, phần tử hiện tại của danh sách (được trỏ đến bởi p) sẽ được lưu trữ vào một biến tạm Sau
đó, con trỏ đến phần tử đầu tiên của danh sách liên kết (pHead) sẽ được cập nhật để trỏ đến phần tử tiếp theo của danh sách (pHead = p->next) Cuối cùng, hàm xóa phần tử đã được lưu trữ trong biến tạm và vòng lặp được tiếp tục cho đến khi danh sách được xóa hoàn toàn +Tạo một biến kí tự ‘kt’ chỉ nhận giá trị “Y” hoặc “N”, tương đương với đồng ý xóa hay không (yes/no)
+Nếu biến ‘kt’ nhận giá trị Y -> đồng ý xóa danh sách -> Gọi đến hàm xóa “ClearList” -> sau đó xuất kết quả là danh sách đã xóa
Nếu biến ‘kt’ nhận giá trị N chỉ in ra “Tam biet”
12 | P a g e