BỘ GIÁO DỤC VÀ ĐÀO TẠO BÀI TẬP LỚN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Nhóm: 7 Sử dụng danh sách liên kết đơn iết chương trình tạo m v t Menu để quản lý danh sách sinh viên STT Sinh viên
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG Á
BÀI TẬP LỚN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Sử dụng danh sách liên kết đơn iết chương trình tạo m v t Menu
để quản lý danh sách sinh viên
Nguyễn Lâm Viết Huy K13 DCCNTT13.10.3 20220474
Bắc Ninh, tháng… năm 20…
Trang 2BỘ GIÁO DỤC VÀ ĐÀO TẠO
BÀI TẬP LỚN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Nhóm: 7
Sử dụng danh sách liên kết đơn iết chương trình tạo m v t Menu
để quản lý danh sách sinh viên
STT Sinh viên thực
Mã sinh viên
Điểm bằng
số
Điểm bằng chữ
Ký tên
Trang 3MỤC LỤC
DANH MỤC BẢNG BIỂU VÀ SƠ ĐỒ 4
Chương 1 Tổng quan về đề tài 5
1.1 Giới thiệu 5
Chương 1 Thuật toán (vẽ sơ đồ, các bước của thuật toán và ví dụ.) 7
2.1 Lưu đồ thuật toán 7
2.2 Bộ dữ liệu mẫu.(khoảng 10 bộ mẫu) 14
2.3 Thiết kế giao diện 15
Chương 3 Cài đặt 18
Module 1: Tạo danh sách sinh viên 18
Module 2 Hiển thị danh sách sinh viên 19
Module 3 Thêm 1 sinh viên vào danh sách, vị trí sinh viên thêm vào do ta chọn 19
Module 4 Liệt kê danh sách sinh viên trên màn hình theo thứ t giảm dn của tổng điểm 20
Module 5 Liệt kê tất cả sinh viên đoạt loại giỏi (có ĐTB >= 8.0) 20
Module 6 Nhập vào tên lớp, in ra màn hình danh sách sinh viên của lớp này 21
Module 7 In danh sách sinh viên có điểm trung bình từ [a,b] 21
Kết luận 22
Kết quả đạt được 22
Hướng phát triển 23
Danh mục sách tham khảo 24
Trang 4DANH M C B NG BI Ụ Ả ỂU VÀ SƠ ĐỒ
Hình 2.3 Lưu đồ thuật toàn thêm 1 sinh viên vào vị trí trong danh sách
Hình 2.5 Lưu đồ thuật toán hiển thị danh sách sinh viên giỏi ( ĐTB >= 8.0) 11
Hình 2.6 Lưu đồ thuật toán hiển thị danh sách sinh viên của một lớp 12 Hình 2.7 Lưu đồ thuật toán hiển thị danh sách sinh viên có ĐTB từ
[a, b]
13
Lưu ý
- Các sơ đồ, hình vẽ, bảng biểu phải có tên và số thứ t được sắp xếp theo chương
- Đối với sơ đồ, hình vẽ, đồ thị thì tên được đặt ở dưới
- Đối với bảng số liệu thì tên đặt ở trên
Trang 5Chương 1 Tổng quan về đề tài
1.1 Gi i thiớ ệu
Môn học cấu trúc dữ liệu và giải thuật là một môn học quan trọng và cơ bản trong chương trình đào tạo ngành công nghệ thông tin Môn học này giúp sinh viên nắm được các khái niệm, nguyên lý và phương pháp xây dng, sử dụng và tối ưu hóa các cấu trúc
dữ liệu và giải thuật phù hợp cho các bài toán thc tế Môn học này cũng đòi hỏi sinh viên phải có khả năng tư duy logic, phân tích và giải quyết vấn đề, cũng như kỹ năng lập trình bằng ngôn ngữ C/C++
Về đề tài của báo cáo của em là: Viết chương trình tạo mộ Menu để quản lý danh sách t sinh viên, mỗi sinh viên là một cấu trúc gồm:
- Mã số sinh viên
- Họ đệm, tên sinh viên
- Điểm trung bình
- Tên lớp
Chương trình gồm các công việc sau:
- Tạo danh sách sinh viên: Quá trình nhập danh sách sẽ dừng lại khi nhập mã số <= 0
- Thêm 1 sinh viên vào danh sách, vị trí sinh viên thêm vào do ta chọn
- Liệt kê danh sách sinh viên trên màn hình theo thứ t iảm d của tổng điểm g n
- Căn cứ và ĐTB của sinh viên, liệt kê tất cả sinh viên đoạt loại giỏi (có ĐTB >= 8.0)o
- Nhập vào tên lớp, in ra màn hình danh sách sinh viên của lớp này
- In ds sinh viên có điểm trung bình từ [a,b]
Ứng dụng danh sách liên kết đơn vào bài toán quản lý sinh viên
Đề tài này có ý nghĩa thc tiễn cao, vì việc quản lý danh sách sinh viên là một nhu cu thường xuyên của các cơ sở giáo dục Đề tài này cũng có tính thách thức, vì yêu cu sinh viên phải áp dụng các kiến thức về cấu trúc dữ liệu (danh sách liên kết), giải thuật (tìm kiếm, sắp xếp) và lập trình C++ để xây dng chương trình hoàn chỉnh
Trang 6Mục tiêu của báo cáo này là:
- Trình bày lý thuyết về cấu trúc dữ liệu danh sách liên kết, các thuật toán tìm kiếm và sắp xếp phổ biến
- Giới thiệu thiết kế và cài đặt chương trình quản lý danh sách sinh viên bằng C++
- Rút ra kết luận và kiến nghị cải tiến
Trang 7Chương 1 Thuật toán (vẽ sơ đồ, các bướ c của thuật toán và ví dụ.)
2.1 Lưu đồ thuật toán
Lưu đồ ật ậ ữ liệu
Trang 8Lưu đồ ậ ấ ữ liệ
Trang 93 Lưu đồ ật toàn thêm 1 sinh viên vào v trí trong danh sách do ta ch n ị ọ
Trang 10Hình 2.4 Lưu đồ thuật toán hi n th ể ị danh sách sinh viên theo ĐTB giảm dần
Trang 115 Lưu đồ ật toán hi n th danh sách sinh viên gi ể ị ỏi( ĐTB >= 8.0)
Trang 12Hình 2.6 Lưu đồ thuật toán hi n th danh sách sinh viên c a m ể ị ủ ột l p ớ
Trang 13Hình 2.7 Lưu đồ thuật toán hi n th ể ị danh sách sinh viên có ĐTB từ [a, b]
Trang 142.2 B d u m ữ liệ ẫu.(kho ng 10 b m u) ả ẫ
B ng 1 B ng d ả ả ữ liệu m u ẫ
1 Nguyen Tien Dat 7 IT2
2 Ha Dinh Cuong 8 IT2
3 Nguyen Lam Viet Huy 7 IT3
4 Nguyen Tien Hoa 9 IT3
6 Hoang Tuan Anh 5 IT4
7 Hoang Duc Huy 6 IT4
8 Nguyen Tien An 7 IT4
9 Hoang Thu Trang 8 IT5
10 Nguyen Thuy Linh 9 IT5
11 Hoang Thao Ly 10 IT5
12 Phi Nhu Quynh 10 IT5
Trang 152.3 Thi t kế ế giao diện
Giao diện nhập sinh viên:
Giao diện hiển thị danh sách sinh viên:
Trang 16Giao di n thêm sinh viên vào v trí trong danh sách: ệ ị
Giao di n hi n th ệ ể ị danh sách theo ĐTB giảm d n:
Trang 17Giao di n hi n th sinh viên giệ ể ị ỏi( ĐTB >= 8):
Giao di n hi n th danh sách sinh viên c a 1 lệ ể ị ủ ớp:
Trang 18Giao di n hi n th ệ ể ị danh sách sinh viên có ĐTB từ [a, b]:
Chương 3 Cài đặt
Module 1: T o danh sách sinh viên ạ
oid nhapSinhVien ( SinhVien sv ) {
Trang 19( if sv maSV == ) return ;
cin ignore ();
cout << "Nhap ho ten sinh vien: " ;
getline ( cin , sv hoTen );
cout << "Nhap diem trung binh: " ;
cin >> sv diemTB ;
cin ignore ();
cout << "Nhap ten lop: " ;
getline ( cin , sv tenLop );
}
void xuatSinhVien ( SinhVien sv ) {
cout << " " << sv maSV << " \t\t " << sv hoTen << " \t\t\t "
<< sv diemTB << " \t\t " << sv tenLop << endl ;
Module 2 Hiển th danh sách sinh viên ị
Module 3 Thêm 1 sinh viên vào danh sách, v trí sinh viên thêm vào do ta ị chọn
void themSinhVien ( vector SinhVien < > & dssv ) {
SinhVien sv ;
cout << "Nhap thong tin sinh vien can them: \n " ;
nhapSinhVien ( sv );
( if sv maSV == ) return ;
Trang 20cout << "Nhap vi tri can chen (tu 1 den " << dssv size () + 1 << "): " ; cin >> vt ;
bool soSanhDiemTB ( SinhVien , SinhVien ) { b
return a diemTB > b diemTB ;
Module Li5 ệt kê tất cả sinh viên đoạt lo i giạ ỏi (có ĐTB >= 8.0)
bool hocLucGioi ( SinhVien sv ) {
return sv diemTB >= 8 ;
}
void lietKeHocLucGioi ( vector < SinhVien > dssv ) {
cout << endl ;
bool coSinhVien = false ;
cout << "Danh sach sinh vien hoc luc gioi: \n " ;
for ( int = 0 ; i < dssv size (); i ++ ) {
Trang 21Module 6 Nhập vào tên l p, in ra màn hình danh sách sinh viên c a l p này ớ ủ ớ
bool thuocLop ( SinhVien sv , string tenLop ) {
return sv tenLop == tenLop ;
}
void lietKeTheoLop ( vector SinhVien < > dssv ) {
cout << endl ;
string tenLop ;
cout << "Nhap ten lop can liet ke: " ;
getline ( cin , tenLop );
bool coSinhVien = false ;
cout << "Danh sach sinh vien thuoc lop " << tenLop << ": \n " ;
for ( int = 0 ; i < dssv size (); i ++ ) {
Module 7 In danh sách sinh viên có điểm trung bình từ [a,b]
bool diemTrongKhoang ( SinhVien sv , double , double b ) {
return sv diemTB >= a && sv diemTB <= ;
bool coSinhVien = false ;
cout << "Danh sach sinh vien co diem trung binh trong khoang [" << a << ", "
Trang 22cout << "Khong co sinh vien nao co diem trung binh trong khoang [" << a
độ phức tạp của chương trình, và rút ra những kết luận và kiến nghị sau:
Chương trình quản lý danh sách sinh viên có thể hoạt động ổn định và đáp ứng được các yêu cu của đề tài Chương trình có giao diện menu thân thiện với người dùng, cho phép nhập, xuất, tìm kiếm, sắp xếp và xóa danh sách sinh viên theo các tiêu chí khác nhau
Chương trình sử dụng cấu trúc dữ liệu danh sách liên kết để lưu trữ danh sách sinh viên Cấu trúc dữ liệu này có ưu điểm là tiết kiệm bộ nhớ, linh hoạt trong việc thêm, xóa phn tử, không bị giới hạn kích thước Tuy nhiên, cấu trúc dữ liệu này cũng có nhược điểm là khó khăn trong việc truy xuất ngẫu nhiên các phn tử, và cn phải quản lý con trỏ một cách cẩn thận để tránh rò rỉ bộ nhớ
Chương trình sử dụng các thuật toán tìm kiếm tun t và sắp xếp chèn trc tiếp để thc hiện các chức năng tìm kiếm và sắp xếp danh sách sinh viên Các thuật toán này có độ phức tạp thời gian là O(n) và O(n^2) trong trường hợp xấu nhất Các thuật toán này đơn giản và dễ hiểu, nhưng không hiệu quả khi số lượng sinh viên lớn
Trang 23Hướng phát triển
Da trên những kết luận trên, em có một số kiến nghị để cải tiến chương trình quản lý danh sách sinh viên như sau:
Nghiên cứu và áp dụng các cấu trúc dữ liệu khác để lưu trữ danh sách sinh viên, ví
dụ như danh sách liên kết kép, danh sách liên kết vòng, cây nhị phân tìm kiếm, bảng băm… Các cấu trúc dữ liệu này có thể giải quyết một số nhược điểm của danh sách liên kết đơn, như tăng tốc độ truy xuất ngẫu nhiên, giảm thiểu số ln duyệt danh sách…
Nghiên cứu và áp dụng các thuật toán tìm kiếm và sắp xếp nâng cao để thc hiện các chức năng tìm kiếm và sắp xếp danh sách sinh viên, ví dụ như tìm kiếm nhị phân, sắp xếp nhanh, sắp xếp chèn nhị phân… Các thuật toán này có thể giảm độ phức tạp thời gian của các chức năng này, đặc biệt khi số lượng sinh viên lớn
Thêm một số tính năng mới cho chương trình quản lý danh sách sinh viên, ví dụ như thống kê điểm theo các nhóm, xuất danh sách sinh viên ra file, nhập danh sách sinh viên từ file, tìm kiếm sinh viên theo nhiều tiêu chí cùng lúc… Các tính năng này có thể làm cho chương trình quản lý danh sách sinh viên trở nên đa dạng và phong phú hơn
Em xin chân thành cảm ơn thy giáo hướng dẫn đã tận tình chỉ bảo và giúp đỡ Em trong quá trình làm báo cáo Em cũng xin cảm ơn các bạn cùng lớp đã góp ý và đóng góp cho báo cáo của Em Em rất mong nhận được những nhận xét và đánh giá khách quan từ thy giáo và các bạn để Em có thể hoàn thiện báo cáo của mình hơn Xin cảm ơn!
Trang 24Danh m ục sách tham kh ảo
1 Quả n lý sinh viên sử d ng danh sách liên kết đơn (freetuts.net) ụ
2 Bài 69 Chương trình quả n lý sinh viên sử d ng struct Luyện Code ụ –
(luyencode.net)
3 Donahoe, T., 1993 Finding the Way: Structure, Time, and Culture in School Improvement[pdf]Availableat:
<http://www.schoolsmovingup.net/cs/smu/view/rs/485 >