Trịnh Thị Cẩm Tú Quản lý danh sách lớp học 2221004346LỜI CẢM ƠN Lời đầu tiên em xin gửi lời cảm ơn thầy Nguyễn Huy Khang – giảng viên bộ môn Cấu Trúc Dữ Liệu & Giải Thuật – khoa Công ngh
Trang 1BỘ TÀI CHÍNH TRƯỜNG ĐẠI HỌC TÀI CHÍNH – MARKETING KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO THỰC HÀNH NGHỀ NGHIỆP
Đề Tài:
CHƯƠNG TRÌNH QUẢN LÝ DANH SÁCH CÁC LỚP HỌC TRONG
PHẠM VI NHÀ TRƯỜNG
Tp HCM, ngày 12 tháng 03 năm 2023
Trang 2Trịnh Thị Cẩm Tú Quản lý danh sách lớp học 2221004346
LỜI CẢM ƠN
Lời đầu tiên em xin gửi lời cảm ơn thầy Nguyễn Huy Khang – giảng viên bộ
môn Cấu Trúc Dữ Liệu & Giải Thuật – khoa Công nghệ thông tin - trường Đại Học Tài Chính – Marketing đã tận tình giảng dạy, hướng dẫn, vẽ nên những bài
thuật toán cơ bản từ đó giúp sinh viên chúng em có những tư duy sáng tạo hơn để
có thể áp dụng và tạo ra những chương trình thực thế, mang tính ứng dụng
Tuy nhiên, với vốn hiểu biết còn ít ỏi, kĩ năng tư duy còn hạn chế nên sẽ không thể tránh khỏi những thiếu sót cũng như sai lầm trong bài đồ án này Em rất mong được sự góp ý chỉnh sửa từ phía thầy để bài đồ án này sớm được hoàn thiện nhất Xin chân thành cảm ơn những đóng góp của thầy!
2
Trang 3Trịnh Thị Cẩm Tú Quản lý danh sách lớp học 2221004346
NHẬN XÉT VÀ ĐÁNH GIÁ CỦA GIÁO VIÊN
- Điểm số:
- Điểm chữ:
Thành phố Hồ Chí Minh, ngày…tháng… năm 2023
Giảng viên
3
Trang 4Trịnh Thị Cẩm Tú Quản lý danh sách lớp học 2221004346
MỤC LỤC
CHƯƠNG 1: GIỚI THIỆU 8
1.1 Gi i thi u đềề tàiớ ệ 8
1.2 Lý do hình thành đềề tài 8
1.3 M c tều đềề tàiụ 8
1.4 Cấấu trúc (mô t cấấu trúc đả ược yều cấều, ch n CTDL đ th hi n, khai báo/đ nh nghĩa cấấu ọ ể ể ệ ị trúc) 8 1.5 D li u mấẫu(>=10 thông tn đôấi tữ ệ ượng cấền qu n lý)ả 9
1.6 Các ch c năng( li t kề các ch c năng xấy d ng trong chứ ệ ứ ự ương trình) 9
CHƯƠNG 2: TÌM KIẾM VÀ SẮP XẾP TRÊN MẢNG CẤU TRÚC 11
2.1 Khai báo th vi nư ệ 11
2.2 Khai báo cấấu trúc 11
2.3 Nh p danh sách l p h cậ ớ ọ 11
2.3.1 Chương trình con 11
2.3.2 Ki mể tra 13
2.3.3 Kềất qu ch yả ạ 13
2.4 Xuấất danh sách l pớ 13
2.4.1 Chương trình con 13
2.4.2 Ki m traể 14
2.4.3 Kềất qu ch yả ạ 15
2.5 Tìm kiềấm theo MaLop( s d ng thu t toán Linearysearch)ử ụ ậ 15
2.5.1 Chương trình con 15
2.5.2 Ki m traể 16
2.5.3 Kềất qu ch yả ạ 16
2.6 Tìm kiềấm theo MaLop( s d ng thu t toán Binarysearch)ử ụ ậ 16
2.6.1 Chươ trình con 16ng 2.6.2 Ki mể tra 17
17
2.6.3 Kềất qu ch yả ạ 17
2.7 Săấp xềấp danh sách l p theo MaLopớ 18
2.7.1 Chương trình con( s d ng thu t toán Selectonsort)ử ụ ậ 18
2.7.2 Ki m traể 18
2.7.3 Kềất qu ch yả ạ 19
2.8 Săấp xềấp danh sách l p theo MaLop( shakersort)ớ 19
2.8.1 Chươ trình con 19ng 2.8.2 Ki mể tra 20
2.8.3 Kềất qu ch yả ạ 20
4
Trang 5Trịnh Thị Cẩm Tú Quản lý danh sách lớp học 2221004346
2.9 Săấp xềấp hi u qu Quicksortệ ả 21
2.9.1 Chươ trình con 21ng 2.9.2 Ki mể tra 22
2.9.3 Kềất qu ch yả ạ 22
2.10 T o danh sách ch c năngạ ứ 22
2.10.1 Chương trình con 22
2.10.2 Ki m traể 23
2.10.3 Kềất qu ch yả ạ 23
2.11 Trình thông báo hoàn thành chương trình 24
2.11.1 Chươ trình con 24ng 2.11.2 Kềất qu ch yả ạ 24
CHƯƠNG 3: KẾT HỢP QUẢN LÝ BẰNG DANH SÁCH LIÊN KẾT 25 3.1 Khai báo th vi nư ệ 25
3.2 Khai báo cấấu trúc qu n lýả 25
3.3 Cấấu trúc xấy d ng node và listự 25
3.4 Xấy d ng hàm t o node và listự ạ 26
3.4.1 Hàm t o nodeạ 26
3.4.2 Hàm t o listạ 27
3.5 Hàm nh p thông tnậ 27
3.5.1 Chươ trình con 27ng 3.5.2 Ki m tra hàmể 29
3.5.3 Kềất qu ch yả ạ 29
3.6 Hàm xuấất danh sách 30
3.6.1 Chương trình con 30
3.6.2 Ki m traể 31
3.6.3 Kềất qu ch yả ạ 31
3.7 Hàm xóa toàn b danh sáchộ 31
3.7.1 Chương trình con 31
3.7.2 Ki m traể 32
32
3.7.3 Kềất qu ch yả ạ 32
3.8 Hàm tìm thông tn 32
3.8.1 Chươ trình con 32ng 3.8.2 Ki mể tra 33
33
3.8.3 Kềất qu ch yả ạ 33
3.9 Hàm xóa thông tn theo mã 33
5
Trang 6Trịnh Thị Cẩm Tú Quản lý danh sách lớp học 2221004346
3.9.1 Chươ trình con 33ng
3.9.2 Ki mể tra 34
34
3.9.3 Kềất qu ch yả ạ 34
34
34
3.10 Hàm săấp xềấp (bubblesort) 34
3.10.1 Chươ trình con 34ng 3.10.2 Ki mể tra 35
35
3.10.3 Kềất qu ch yả ạ 35
3.11 Hàm săấp xềấp Selectonsort 36
3.11.1 Chươ trình con 36ng 3.11.2 Ki mể tra 37
3.11.3 Kềất qu ch yả ạ 37
3.12 Hàm săấp xềấp Interchangesort 37
3.12.1 Chươ trình con 38ng 3.12.2 Ki mể tra 38
3.12.3 Kềất qu ch yả ạ 39
3.13 Hàm săấp xềấp Insertonsort 39
3.13.1 Chươ trình con 40ng 3.13.2 Ki mể tra 41
3.13.3 Kềất qu ch yả ạ 41
3.14 Hàm săấp xềấp Quicksort 41
3.14.1 Chươ trình con 42ng 3.14.2 Ki mể tra 42
3.15 Xấy d ng đ n ch n ch c năngự ơ ọ ứ 42
3.15.1 Chươ trình con 43ng 3.15.2 Ki mể tra 44
3.15.3 Kềất qu ch yả ạ 44
6
Trang 7Trịnh Thị Cẩm Tú Quản lý danh sách lớp học 2221004346
MỤC LỤC HÌNH ẢNH
1) Khai báo thư viện 10
2) Hàm nhập thông tin một lớp 11
3) Hàm nhập thông tin một danh sách lớp 11
4) Hàm nhập sẵn 11
5) Kiểm tra hàm nhập 12
6) Kết quả chạy cho hàm nhập 12
7) Hàm xuất một lớp 13
8) Hàm xuất một danh sách lớp 13
9) Kiểm tra hàm xuất ở thân chương trình 13
10) Kết quả chạy cho hàm xuất 14
11) Hàm tìm kiếm Linearysearch(Ln) 14
12) Kiểm tra hàm Ln ở hàm main 15
13) Kết quả chạy cho hàm tìm kiếm 15
14) Hàm tìm kiếm Binarysearch(Bn) 15
15) Hàm Bn ở main 16
16) Hàm Bn khi chưa được sắp xếp 16
17) Kết quả chạy của hàm Bn sau khi áp dụng thuật săp xếp 17
18) Hàmm sắp xếp Selectionsort(Slt) 17
19) Đưa Slt vào main 17
20) Thuật toán sắp xếp hàm shakersort 19
21) Hàm shakersort ở main 19
22) Thuật toán sắp xếp hàm Quicksort 20
23) Kết quả chạy hàm quicksort 21
24) Đưa Quicksort vào main 21
25) Hàm menu 22
26) Đưa hàm menu vào main 22
27) Kết quả chạy hàm menu 22
28)Hàm Finish 23
7
Trang 8Trịnh Thị Cẩm Tú Quản lý danh sách lớp học 2221004346
1.1 Giới thiệu đề tài
DSLOP(MaLop, CVHT, SiSo, LopTruong, NhomHT) Cấu trúc quản
lý danh sách các lớp bao gồm các thông tin: Mã lớp (MaLop); Tên
giảng viên làm cố vấn học tập; Sỉ số lớp; Tên lớp trưởng; Số nhóm học tập (NhomHT) được tổ chức trong lớp đó.
1.2 Lý do hình thành đề tài
Xuất phát từ nhu cầu quản lý lớp học của Nhà trường được chặt chẽ,
dễ kiểm soát hơn Chương trình QUẢN LÝ LỚP HỌC ra đời để đáp ứng được nhu cầu quản lý, nắm bắt kịp thời thông tin của từng lớp học,
hỗ trợ cho công tác quản lý của Nhà trường diễn ra thuận tiện hơn.
Nắm bắt được nhu cầu và vốn kiến thức của mình tôi lựa chọn đề tài QUẢN LÝ DANH SÁCH LỚP HỌC TRONG NHÀ TRƯỜNG trong bài tập đồ án môn Cơ sở dữ liệu và Giải thuật nhằm giúp tôi nâng cao
kĩ năng tạo lập chương trình cũng như đem lại một chương trình hữu dụng cho người dùng.
1.3 Mục tiêu đề tài
Nhằm hỗ trợ Nhà trường quản lý được thông tin của từng lớp học, dễ dàng nắm bắt tình hình từng lớp học bằng ngôn ngữ lập trình C++ chạy trên màn hình consle.
1.4 Cấu trúc (mô tả cấu trúc được yêu cầu, chọn CTDL để thể
hiện, khai báo/định nghĩa cấu trúc)
Thông tin các lớp học bao gồm:
- MaLop: Mã của lớp học, gồm 1 chuỗi kiểu ký tự(char)
- CVHT: Tên cố vấn học tập, gồm 1 chuỗi kiểu ký tự
- SiSo: Sỉ số của lớp, là kiểu số nguyên
8
Trang 9Trịnh Thị Cẩm Tú Quản lý danh sách lớp học 2221004346
- NhomHT: Số nhóm có trong lớp, kiểu số nguyên
- LopTruong: Tên Lớp Trưởng, gồm 1 chuỗi kiểu ký tự
1.5 Dữ liệu mẫu(>=10 thông tin đối tượng cần quản lý)
Table 1: D li u mẫẫu ữ ệ
1.6 Các chức năng( liệt kê các chức năng xây dựng trong chương trình)
Các chức năng trên mảng cấu trúc
- Tạo cấu trúc quản lý danh sách lớp học
- Nhập/xuất danh sách lớp học
9
Trang 10Trịnh Thị Cẩm Tú Quản lý danh sách lớp học 2221004346
- Tìm kiếm lớp học dựa trên mã lớp( sử dụng LinearySearch và
BinarySearch).
- Sắp xếp theo mã lớp(selectionsort, bubblesort, interchangesort, )
- Sắp xếp theo mã lớp hiệu quả(quicksort).
- Chèn, thêm, xóa lớp từ danh sách.
- Tạo dựng chương trình lựa chọn chức năng.
10
Trang 11Trịnh Thị Cẩm Tú Quản lý danh sách lớp học 2221004346
CHƯƠNG 2: TÌM KIẾM VÀ SẮP XẾP TRÊN MẢNG CẤU
TRÚC 2.1 Khai báo thư viện
- Iostream: cung cấp các tiê Šn ích có
sẵn để làm viê Šc với bàn phím và màn hình.
- Iomanip: định nghĩa một số hàm giúp lập trình viên có thể định dạng output.
2.2 Khai báo cấu trúc
- MaLop: Mã của lớp học, gồm 1 chuỗi kiểu ký tự(char)
- CVHT: Tên cố vấn học tập, gồm 1 chuỗi kiểu ký tự
- SiSo: Sỉ số của lớp, là kiểu số nguyên
- NhomHT: Số nhóm có trong lớp, kiểu số nguyên
- LopTruong: Tên Lớp Trưởng, gồm 1 chuỗi kiểu ký tự
2.3 Nhập danh sách lớp học
2.3.1 Chương trình con
Để nhập danh sách sinh viên, cần xây dựng ba chương trình con gồm:
- void Nhap_1_o(DSLOP& ds): hỗ trợ nhập thông tin một lớp học
gồm: MaLop, CVHT, SiSo, NhomHT, LopTruong
11
1) Khai báo thư viện
Trang 14Trịnh Thị Cẩm Tú Quản lý danh sách lớp học 2221004346
2.4 Xuất danh sách lớp
2.4.1 Chương trình con
Để xuất danh sách lớp cần xây dựng ba chương trình con gồm:
- Void xuat_1_lop(DSLOP& ds): Hàm được khởi tạo nhằm mục
đích xuất thông tin cho 1 đối tượng lớp học
- Void xuat_1_ds(DSLOP ds[], int& n): Hàm xuất danh sách n lớp
Trang 15- int Linearysearch(DSLOP ds[], int n, char x[]): Chương trình
tìm kiếm MaLop tuyến tính
15
9) Ki m tra hàm xuẫết thẫn ch ể ở ươ ng trình
10) Kếết qu ch y cho hàm xuẫết ả ạ
11) Hàm tìm kiếếm Linearysearch(Ln)
Trang 16Để tìm kiếm danh sách theo MaLop sử dụng thuật toán
Binarysearch ta cần tạo một chương trình con như sau:
- Void Binarysearch(DSLOP ds[], int n, char x[]): Chương trình
con với thuật toán hỗ trợ tìm kiếm đối tượng.
16
12) Ki m tra hàm Ln hàm main ể ở
13) Kếết qu ch y cho hàm tìm kiếếm ả ạ
14) Hàm tìm kiếếm Binarysearch(Bn)
Trang 17Trịnh Thị Cẩm Tú Quản lý danh sách lớp học 2221004346
2.6.2 Kiểm tra
- Vì hàm sắp xếp Binarysearch chỉ thực hiện được chức năng tìm
kiếm của mình khi thông tin đã được sắp xếp tăng dần nên ta cần dùng hàm if để trả về không tìm thấy thông tin nếu đối tượng cần tìm chưa được sắp xếp.
Trang 18Trịnh Thị Cẩm Tú Quản lý danh sách lớp học 2221004346
- Sau khi được sắp xếp:
2.7 Sắp xếp danh sách lớp theo MaLop
2.7.1 Chương trình con( sử dụng thuật toán Selectionsort)
Để sắp xếp danh sách lớp theo MaLop cần tạo một chương trình con gồm:
- Void SelectionSort(DSLOP ds[], int n): Hỗ trợ chương trình sắp
xếp danh sách lớp theo MaLop theo hệ số từ cao – thấp
18
17) Kếết qu ch y c a hàm Bn sau khi áp d ng thu t sẵp xếếp ả ạ ủ ụ ậ
Trang 20- Void Shakersort(DSLOP ds[], int n, char x[]): Chương trình con
với thuật toán sắp xếp đối tượng theo trình tự thừ thấp – cao.
2.8.2 Kiểm tra
20) Thu t toán sẵếp xếếp hàm shakersort ậ
Trang 22Trịnh Thị Cẩm Tú Quản lý danh sách lớp học 2221004346
- Void Quicksort(DSLOP, int left, int right): Chương trình
với thuật toán sắp xếp hiệu quả.
2.9.2 Kiểm tra
22
22) Thu t toán sẵếp xếếp hàm Quicksort ậ
Trang 23- Void menu(int& num): Chương trình này giúp tạo ra một danh
sách các chức năng có trong chương trình nhằm giúp người dùng dễ dàng lựa chọn thao tác muốn thực hiện
23
24) Kếết qu ch y hàm quicksort ả ạ
23) Đ a Quicksort vào main ư
Trang 24Trịnh Thị Cẩm Tú Quản lý danh sách lớp học 2221004346
2.10.2 Kiểm tra
2.10.3 Kết quả chạy
Trang 25- Void Finish(int& key): Chương trình với mục đích thông báo
đã hoàn thành nhiệm vụ được chọn và đưa người dùng về
trang menu.
2.11.2 Kết quả chạy
25
28)Hàm Finish
Trang 26Trịnh Thị Cẩm Tú Quản lý danh sách lớp học 2221004346
CHƯƠNG 3: KẾT HỢP QUẢN LÝ BẰNG DANH SÁCH LIÊN KẾT 3.1 Khai báo thư viện
- Iostream: cung cấp các tiê Šn ích có sẵn để làm viê Šc với bàn phím và màn hình.
- Iomanip: Thư viện hỗ trợ xuất các lệnh xuất trên console
3.2 Khai báo cấu trúc quản lý
- MaLop: Kiểu kí tự (tối đa 20 kí tự)
- CVHT: Kiểu kí tự (tối đa 50 kí tự)
- SiSo, NhomHT: Kiểu số nguyên (int)
- LopTruong: Kểu kí tự (tối đa 50 kí tự)
- Tydef: định nghĩa cấu trúc
3.3 Cấu trúc xây dựng node và list
Xây dựng node và list trong danh sách liên kết C++ nhằm mục đích tạo ra một cấu trúc dữ liệu linh hoạt và hiệu quả để lưu trữ và quản lý
26
Trang 27Với cấu trúc này, chúng ta có thể thêm, xóa phần tử hoặc duyệt danh sách một cách dễ dàng và hiệu quả Ngoài ra, danh sách liên kết còn cho phép tối ưu hóa việc sử dụng bộ nhớ, đặc biệt là khi chúng ta cần thêm hoặc xóa phần tử ở giữa danh sách.
3.4 Xây dựng hàm tạo node và list
27
Trang 28Hàm tạo list được sử dụng để tạo ra một danh sách liên kết mới Nó
có thể được thực hiện bằng cách sử dụng cấp phát động, hoặc bằng cách khởi tạo một đối tượng trong C++.
hàm tạo của danh sách mới khởi tạo con trỏ “pHead” và “pTail” là NULL, đại diện cho danh sách liên kết rỗng ban đầu.
28
Trang 29- void AddTail(LIST& l, NODE* p) : Dùng để tạo thông tin
mới được nhập vào thành một node và thêm vào cuối danh sách.
- void InputList(LIST& l) : Dùng để nhập thông tin cho nhiều
lớp học và thêm từng lớp học vào danh sách.
Trang 34Trịnh Thị Cẩm Tú Quản lý danh sách lớp học 2221004346
3.7.3 Kết quả chạy
Trước khi xóa:
Sau khi xóa:
Trang 35Trịnh Thị Cẩm Tú Quản lý danh sách lớp học 2221004346
3.8.2 Kiểm tra
35
Trang 39Trịnh Thị Cẩm Tú Quản lý danh sách lớp học 2221004346
3.11 Hàm sắp xếp Selectionsort
Hàm selectionsort trong danh sách liên kết sắp xếp các phần tử theo thứ tự tăng dần hoặc giảm dần bằng cách thực hiện các bước sau đây:
1 Khởi tạo một node temp để lưu trữ giá trị của phần tử được chọn
để so sánh với các phần tử khác trong danh sách.
2 Duyệt danh sách và tìm phần tử có giá trị nhỏ nhất hoặc lớn nhất (tuỳ thuộc vào yêu cầu sắp xếp) bằng cách so sánh giá trị của node temp với các node khác.
3 Hoán đổi giá trị của node temp và phần tử nhỏ nhất hoặc lớn nhất được tìm thấy.
4 Tiếp tục tìm kiếm phần tử nhỏ nhất hoặc lớn nhất trong danh sách còn lại bằng cách bỏ qua node temp đã được sắp xếp.
5 Lặp lại quá trình trên cho đến khi tất cả các phần tử được sắp xếp theo yêu cầu.
Các phép toán chèn, xóa node và duyệt danh sách sẽ được sử dụng trong quá trình thực hiện hàm selectionsort.
3.11.1 Chương trình con
Để thực hiện nhiệm vụ sắp xếp này cần khai báo tạo một chương trình con với tên Selectionsort như sau:
39
Trang 41Trịnh Thị Cẩm Tú Quản lý danh sách lớp học 2221004346
3.12 Hàm sắp xếp Interchangesort
Hàm interchange sort được sử dụng để sắp xếp các phần tử trong danh sách liên kết theo thứ tự tăng dần Cách thức hoạt động của hàm này như sau:
1 Ta bắt đầu từ phần tử đầu tiên của danh sách và duyệt từ trái sang phải.
2 Với mỗi phần tử, ta so sánh nó với các phần tử còn lại trong danh sách Nếu phần tử đó nhỏ hơn các phần tử còn lại, ta hoán đổi chúng với nhau.
3 Sau khi duyệt hết danh sách từ phần tử đầu tiên đến phần tử cuối cùng, ta quay lại bước 1 và tiếp tục thực hiện phân tích.
4 Tiến hành sắp xếp danh sách liên kết cho đến khi tất cả các phần
tử được sắp xếp theo thứ tự tăng dần.
Hàm interchange sort có độ phức tạp O(n^2), với n là số lượng phần
tử trong danh sách liên kết Nó chỉ nên được sử dụng cho danh sách liên kết nhỏ vì nếu danh sách quá lớn thì thời gian để sắp xếp danh sách liên kết sẽ rất lâu.
41
Trang 43Trịnh Thị Cẩm Tú Quản lý danh sách lớp học 2221004346
3.13 Hàm sắp xếp Insertionsort
Thuật toán insertionsort trong danh sách liên kết là một thuật toán sắp xếp đơn giản Các bước thực hiện của thuật toán như sau:
1 Bắt đầu từ phần tử đầu tiên của danh sách liên kết.
2 Đặt phần tử đầu tiên này làm một danh sách đã được sắp xếp.
3 Duyệt qua danh sách liên kết từ phần tử thứ hai cho đến hết danh sách:
a So sánh phần tử hiện tại với từng phần tử trong danh sách đã được sắp xếp.
b Nếu phần tử hiện tại nhỏ hơn phần tử đã được sắp xếp, chèn phần
tử hiện tại trước phần tử đó.
c Nếu phần tử hiện tại lớn hơn hoặc bằng phần tử đã được sắp xếp, tiếp tục duyệt qua danh sách đã được sắp xếp.
4 Sau khi duyệt qua toàn bộ danh sách, ta thu được danh sách đã được sắp xếp.
Khi chèn một phần tử vào danh sách đã được sắp xếp, ta cần sử dụng một con trỏ để chỉ đến phần tử trước phần tử đang xét trong danh sách
đã được sắp xếp Sau đó, ta chỉ cần đổi các con trỏ để chèn phần tử đang xét vào danh sách đã được sắp xếp.
43