Bối cảnh và vấn đề nghiên cứu

Trong chương trình đào tạo ngành Công nghệ thông tin và Toán - Tin tại Trường Đại học Bách khoa Hà Nội, học phần Kỹ thuật lập trình đóng vai trò nền tảng nhằm trang bị kỹ năng thiết kế giải thuật, mô hình hóa dữ liệu và xây dựng các hệ thống phần mềm hướng thủ tục hoặc cấu trúc. Đề tài "Quản lý sinh viên, học phần, điểm thi" (Đề tài số 1) được thực hiện bởi sinh viên Vũ Văn Thành (MSSV: 20216885), dưới sự hướng dẫn của TS. Nguyễn Thị Thanh Huyền thuộc Viện Toán ứng dụng và Tin học, trong học kỳ 20222 (Mã lớp: 142298).

Bối cảnh thực tiễn của đề tài xuất phát từ nhu cầu số hóa quy trình quản lý thông tin học vụ tại các cơ sở giáo dục đại học. Một hệ thống quản lý học vụ cơ bản đòi hỏi phải theo dõi đồng thời ba thực thể có mối quan hệ chặt chẽ: thông tin cá nhân của sinh viên, danh mục các học phần đào tạo, và kết quả điểm thi của từng sinh viên đối với từng học phần. Việc quản lý thủ công hoặc dùng các bảng tính rời rạc dễ dẫn đến sai sót, trùng lặp thông tin và thiếu tính toàn vẹn dữ liệu.

Mục tiêu và nhiệm vụ nghiên cứu của đồ án được xác định rõ ràng bao gồm:

  1. Xây dựng cấu trúc dữ liệu động phù hợp để mô hình hóa và lưu trữ danh sách sinh viên, danh sách học phần và danh sách điểm thi trong bộ nhớ.
  2. Thiết kế và cài đặt đầy đủ các chức năng quản trị cơ bản (CRUD - Tạo, Đọc, Cập nhật, Xóa) cho cả ba nhóm thực thể.
  3. Thiết lập cơ chế kiểm tra tính hợp lệ của dữ liệu đầu vào, ngăn chặn trùng lặp khóa chính (mã số sinh viên, mã học phần, cặp mã sinh viên - mã học phần).
  4. Cài đặt các chức năng nghiệp vụ nâng cao: tính điểm trung bình chung tích lũy (GPA) theo thang điểm 4, tra cứu kết quả học tập theo học phần, lọc danh sách sinh viên không đạt học phần (điểm < 4), và thống kê danh sách các học phần chưa đạt của một sinh viên cụ thể.
  5. Cài đặt cơ chế duy trì tính toàn vẹn dữ liệu quan hệ (xóa/sửa liên hoàn) giữa danh mục sinh viên/học phần và danh mục điểm thi.
  6. Xây dựng module đọc, ghi, mã hóa dữ liệu ra tệp nhị phân (.bin) và module ghi nhật ký (log) quá trình thực thi hệ thống ra tệp văn bản.

Phạm vi nghiên cứu của đề tài tập trung vào việc hiện thực hóa phần mềm ứng dụng dạng Console trên nền tảng ngôn ngữ C++, giới hạn trong không gian quản lý nội bộ dữ liệu học vụ của một đơn vị đào tạo, với tập dữ liệu mẫu được khởi tạo và kiểm thử trên môi trường dòng lệnh.


Cơ sở lý thuyết và phương pháp

Đồ án áp dụng phương pháp luận thiết kế hệ thống có cấu trúc, kết hợp với các khái niệm và kỹ thuật lập trình cốt lõi:

  • Phương pháp thiết kế tinh chỉnh từng bước (Stepwise Refinement): Hệ thống được phân rã theo mô hình từ trên xuống (Top-down design), bắt đầu từ việc đặc tả bài toán tổng thể (Bước 0), xác định luồng dữ liệu vào/ra (Bước 1), đặc tả logic các khối hàm chức năng (Bước 2 đến Bước 7), và tiến hành cài đặt mã nguồn chi tiết (Bước 8).
  • Cấu trúc dữ liệu danh sách liên kết đơn (Singly Linked List): Thay vì sử dụng mảng tĩnh có kích thước cố định, tác giả ứng dụng danh sách liên kết đơn tự định nghĩa với cơ chế cấp phát bộ nhớ động thông qua toán tử new và giải phóng vùng nhớ bằng toán tử delete. Mỗi danh sách quản lý một con trỏ đầu head trỏ tới các nút liên kết (sv_node, hp_node, dt_node).
  • Giải thuật sắp xếp chèn (Insertion Sort): Áp dụng để sắp xếp lại danh sách sinh viên theo thứ tự bảng chữ cái (alphabet) của trường tên sinh viên.
  • Mô hình chuyển đổi thang điểm và công thức tính GPA: Điểm học phần được nhập theo thang điểm 10, sau đó được chuyển đổi sang thang điểm 4 qua hàm toán học $Điểm_{4} = \frac{Điểm_{10}}{10} \times 4$. Điểm trung bình tích lũy GPA được tính theo công thức trọng số tín chỉ: $$\text{GPA} = \frac{\sum (Điểm_4 \times Số_tín_chỉ)}{\sum Số_tín_chỉ}$$
  • Nguồn dữ liệu và định dạng lưu trữ: Dữ liệu hệ thống được tổ chức thành các tệp nhị phân độc lập gồm SV.bin (thông tin sinh viên), HP.bin (danh mục học phần), DT.bin (kết quả điểm thi), và GPA.bin (điểm trung bình tích lũy đã tính). Toàn bộ luồng thao tác của người dùng và trạng thái của các hàm được lưu vết vào chuỗi nhật ký toàn cục program_exe để xuất ra file text.

Thiết kế và triển khai hệ thống

1. Kiến trúc cấu trúc dữ liệu

Hệ thống định nghĩa bốn cấu trúc dữ liệu cơ sở (struct) để lưu trữ thông tin thực thể và ba cấu trúc quản lý danh sách liên kết tương ứng:

struct Ngay_Sinh {
    int day;
    int month;
    int year;
    // Thủ tục kiểm tra tính hợp lệ của ngày tháng năm
};

struct Sinh_Vien {
    int MSSV;
    string Ho_dem;
    string Ten_sv;
    string Gioi_tinh;
    Ngay_Sinh *Ngay_sinh;
    void load_sv(string line); // Tách chuỗi theo delimiter ';' và '/'
    void print();              // Xuất dòng dữ liệu có định dạng cột
};

struct Hoc_Phan {
    string Ma_hp;
    string Ten_hp;
    int So_tc;
    void load_hp(string line);
    void print();
};

struct Diem_Thi {
    string Ma_hp;
    int MSSV;
    float Diem_hp;
    void load_dt(string line);
    void print();
};

Mỗi thực thể được bao bọc trong một nút danh sách (node) chứa con trỏ trỏ tới dữ liệu thực thể và con trỏ next trỏ tới phần tử kế tiếp. Danh sách quản lý (SV_List, HP_List, DT_List) đóng gói con trỏ head và các phương thức nghiệp vụ như thêm phần tử (add_sv, add_hp, add_dt), kiểm tra sự tồn tại của phần tử (check_sv, check_hp).

2. Các giải thuật và module xử lý chính

  • Module xử lý chuỗi và nạp dữ liệu (Parsing): Hệ thống cài đặt thuật toán bóc tách dữ liệu từ chuỗi định dạng (CSV) có phân cách bởi dấu chấm phẩy (;) đối với các trường thông thường và dấu gạch chéo (/) đối với trường ngày sinh (day/month/year). Thuật toán sử dụng phương thức find() và substr() của lớp std::string để cắt tuần tự từng trường thông tin và chuyển đổi kiểu dữ liệu tương ứng qua các hàm stoi(), stof().
  • Module kiểm soát ràng buộc và toàn vẹn dữ liệu:
    • Kiểm tra tính hợp lệ dữ liệu: Sử dụng cin.fail(), cin.clear(), cin.ignore() kết hợp vòng lặp while(true) để ngăn chặn các lỗi nhập sai kiểu dữ liệu (nhập ký tự vào biến số nguyên, số thực), kiểm tra miền giá trị điểm số $[0, 10]$, số tín chỉ nguyên dương, và tính hợp lệ lịch của ngày tháng năm sinh.
    • Kiểm tra khóa và trùng lặp: Ngăn chặn thêm trùng mã số sinh viên trong SV_List, trùng mã học phần trong HP_List, hoặc trùng lặp bộ đôi (MSSV, Ma_hp) trong DT_List.
    • Cập nhật và xóa liên hoàn (Cascading Update/Delete): Khi xóa một sinh viên hoặc một học phần, hệ thống tự động duyệt qua danh sách điểm thi DT_List để loại bỏ tất cả các bản ghi điểm có chứa MSSV hoặc Mã học phần bị xóa. Khi sửa MSSV hoặc Mã học phần, hệ thống tự động cập nhật lại các mã định danh tương ứng trong DT_List.
  • Module tìm kiếm chuỗi con check(text, input): Tìm kiếm sinh viên hoặc học phần dựa trên việc nhập chuỗi ký tự bất kỳ nằm trong tên. Thuật toán so khớp ký tự từ cuối chuỗi mẫu ngược lên đầu (j = m - 1 xuống 0), duyệt vị trí xuất phát i từ 0 đến n - m để xác định sự xuất hiện của xâu con trong xâu mẹ.
  • Module sắp xếp danh sách (sort_list): Triển khai thuật toán sắp xếp chèn (Insertion Sort) trực tiếp trên danh sách liên kết đơn. Thuật toán duyệt từng nút từ danh sách ban đầu, sau đó chèn vào vị trí thích hợp trong danh sách mới replace sao cho trường Ten_sv được sắp tăng dần theo thứ tự từ điển, sau đó gán lại danh sách kết quả cho danh sách ban đầu.
  • Module đọc/ghi tệp nhị phân và giao diện Console: Dữ liệu được ghi ra đĩa qua hàm writeBinaryFile() dưới dạng chuỗi mã hóa nhị phân và đọc ngược lại qua readBinaryFile(). Giao diện màn hình dòng lệnh được định dạng bảng chuyên nghiệp bằng cách sử dụng các hàm thao tác luồng của thư viện <iomanip> gồm std::setw() và std::left, kết hợp cơ chế menu điều hướng bằng phím mũi tên và phím Enter thông qua hàm _getch().

Nội dung chính theo từng chương

I. Bài toán thực tế

Chương này mô tả bối cảnh hoạt động và yêu cầu chức năng của hệ thống quản lý học vụ tại trường đại học. Tác giả xác định 9 chức năng trọng tâm cần xây dựng, bao gồm:

  1. Nhập thông tin sinh viên và học phần.
  2. Nhập điểm học phần theo từng sinh viên.
  3. Hiển thị danh sách toàn bộ sinh viên trong hệ thống.
  4. Bổ sung, xóa, sửa thông tin sinh viên và học phần.
  5. Tính điểm trung bình chung tích lũy (GPA) của từng sinh viên.
  6. Hiển thị danh sách sinh viên không đạt học phần (điểm < 4).
  7. Hiển thị danh sách các học phần chưa đạt của một sinh viên (điểm < 4).
  8. Hiển thị điểm học phần của toàn bộ sinh viên theo mã học phần được chọn.
  9. Quy trình vận hành luồng nghiệp vụ khép kín từ nhập liệu, xử lý cập nhật, trích xuất báo cáo đến lưu trữ.

II. Quá trình thiết kế chương trình theo phương pháp tinh chỉnh từng bước

Chương này chiếm dung lượng lớn nhất trong đồ án, trình bày toàn bộ tiến trình từ thiết kế kiến trúc đến cài đặt thuật toán qua 9 bước phân rã:

  • Mục A - Giới thiệu các cấu trúc dữ liệu tự tạo ra: Khai báo và đặc tả chi tiết 4 cấu trúc cơ bản (Ngay_Sinh, Sinh_Vien, Hoc_Phan, Diem_Thi), các cấu trúc nút liên kết và cấu trúc danh sách liên kết đơn cùng các phương thức khởi tạo (constructor), nạp dữ liệu từ chuỗi (load_sv, load_hp, load_dt), in ấn định dạng (print), và thêm/kiểm tra phần tử (add_sv, check_sv, add_hp, check_hp, add_dt).
  • Mục B - Quá trình thiết kế từ Bước 0 đến Bước 8:
    • Bước 0: Phân rã cấu trúc cây chức năng cho các nghiệp vụ Nhập dữ liệu, Cập nhật (Thêm/Xóa/Sửa), Tìm kiếm, Tính GPA và Thống kê học vụ.
    • Bước 1: Xác định chi tiết luồng dữ liệu vào (Input) và dữ liệu ra (Output) cùng ý tưởng giải thuật cho từng chức năng.
    • Bước 2 - Bước 5: Thiết kế chi tiết các hàm nghiệp vụ: thêm dữ liệu (add_sv, add_hp, add_dt), xóa dữ liệu theo khóa hoặc theo số thứ tự (delete_sv, delete_hp, delete_dt), sửa thông tin thực thể và cập nhật liên kết (edit_sv, edit_hp, edit_dt), tìm kiếm thông tin theo nhiều tiêu chí đa dạng (find_sv, find_hp, find_dt).
    • Bước 6 - Bước 7: Thiết kế các hàm chức năng nâng cao (tính GPA toàn bộ hoặc 1 sinh viên, tra cứu điểm học phần, lọc danh sách trượt môn, sắp xếp danh sách sort_list, chuẩn hóa chuỗi chuan_hoa, chuyển đổi số sang chuỗi convert_from_number_to_string/nts, và các hàm sao lưu tệp back_up_to_file_*).
    • Bước 8: Cài đặt toàn bộ mã nguồn hoàn chỉnh bằng ngôn ngữ C++, tích hợp điều khiển tương tác console và ghi log hệ thống.

IV. Hình ảnh thực hiện các chức năng của chương trình

Mục này trình bày kết quả thực nghiệm và kiểm thử hệ thống thông qua hình ảnh giao diện dòng lệnh thực tế của 11 nhóm chức năng:

  1. Hiển thị thông tin sinh viên, học phần, điểm thi dưới dạng bảng phân cột ngay ngắn.
  2. Thực hiện thêm mới sinh viên, học phần, điểm thi kèm kiểm tra lỗi nhập liệu.
  3. Sửa đổi thông tin từng trường dữ liệu của sinh viên, học phần, điểm thi.
  4. Xóa dữ liệu theo mã số hoặc theo số thứ tự hiển thị.
  5. Tìm kiếm đa tiêu chí (theo MSSV, mã học phần, tên, ngày sinh, giới tính).
  6. Tính toán và hiển thị bảng điểm GPA của toàn bộ sinh viên.
  7. Tra cứu điểm của toàn bộ sinh viên theo một mã học phần chỉ định.
  8. Lọc danh sách các sinh viên có điểm thi không đạt (điểm < 4) trong một học phần.
  9. Liệt kê danh sách các môn học chưa đạt của một sinh viên cụ thể.
  10. Xem điểm trung bình tích lũy và bảng điểm chi tiết của một sinh viên.
  11. Thực hiện sao lưu dữ liệu hiện hành trong bộ nhớ vào các tệp nhị phân và xuất tệp text ghi lại toàn bộ tiến trình thực thi của hệ thống.

V. Đánh giá chung và Đánh giá chi tiết

Tổng kết các ưu điểm kỹ thuật đã đạt được (ứng dụng danh sách liên kết, mã hóa file nhị phân, giải thuật sắp xếp chèn, chuẩn hóa chuỗi, duy trì toàn vẹn dữ liệu), chỉ ra các mặt hạn chế còn tồn tại, và lập bảng đối soát chi tiết mức độ đáp ứng 7 yêu cầu kỹ thuật do giảng viên hướng dẫn đặt ra trong đề bài.


Kết quả và đóng góp

Đồ án đã hoàn thành toàn bộ các yêu cầu kỹ thuật đặt ra ban đầu. Kết quả thực hiện được tác giả tự đánh giá và đối soát chi tiết theo bảng sau:

TT Nội dung yêu cầu kỹ thuật (theo đề tài) Đã viết code? Đã thực hiện đúng? Tự đánh giá ưu điểm, nhược điểm và giải pháp kỹ thuật
1 Nhập dữ liệu cho các file nhị phân Y Y Đã sử dụng danh sách liên kết động; chuẩn hóa định dạng ký tự xuất; có hàm sắp xếp tên sinh viên theo alphabet. Điểm trừ: Dữ liệu mẫu ban đầu nhập từ code thay vì load từ file.
2 Xóa, Sửa chữa dữ liệu cho 3 file (SV, HP, DT) Y Y Xử lý đầy đủ các ngoại lệ nhập sai, có menu thoát tránh treo chương trình; viết thêm cơ chế tự động xóa/cập nhật liên hoàn các bản ghi liên quan trong DT.bin khi sửa/xóa SV.bin hoặc HP.bin.
3 Tính GPA của toàn bộ sinh viên và 1 sinh viên Y Y Tính toán chính xác theo thang điểm 4 và trọng số tín chỉ; in danh sách GPA theo thứ tự bảng chữ cái; lưu kết quả vào GPA.bin.
4 Điểm 1 học phần của toàn bộ sinh viên Y Y Xuất danh sách sinh viên kèm điểm thành bảng phân cột rõ ràng; hỗ trợ xử lý thoát an toàn khi nhập sai mã học phần.
5 Lọc danh sách sinh viên không đạt 1 học phần Y Y Lọc chính xác các bản ghi có điểm học phần < 4; xuất bảng thông tin đầy đủ gồm MSSV, họ tên và điểm số.
6 Danh sách học phần mà 1 sinh viên chưa đạt Y Y Lọc chính xác các học phần có điểm < 4 của một sinh viên chỉ định; hiển thị kèm tên học phần và điểm số.
7 Chức năng sao lưu dữ liệu Y Y Cho phép lưu dữ liệu sau khi thêm/sửa/xóa vào các tệp .bin. Điểm trừ: Chưa có cơ chế tự động sao lưu mà phải do người dùng chủ động chọn.

Đóng góp chính của đồ án:

  • Xây dựng hoàn chỉnh một ứng dụng quản lý học vụ độc lập trên nền C++, không phụ thuộc vào các thư viện bên thứ ba.
  • Giải quyết tốt bài toán toàn vẹn dữ liệu quan hệ trên cấu trúc file phẳng/nhị phân bằng cách lập trình thủ công cơ chế xóa và cập nhật liên hoàn giữa 3 thực thể sinh viên, học phần và điểm thi.
  • Cài đặt thành công thuật toán tìm kiếm chuỗi con linh hoạt và thuật toán sắp xếp chèn trên danh sách liên kết đơn.
  • Tích hợp module ghi nhật ký thực thi (trace/logging) toàn diện, hỗ trợ việc giám sát và gỡ lỗi phần mềm.

Hạn chế và hướng nghiên cứu tiếp

Dựa trên nội dung tự đánh giá trong văn bản, đồ án còn một số hạn chế kỹ thuật:

  1. Cơ chế nạp dữ liệu mẫu ban đầu: Tập dữ liệu ban đầu đang được nạp thủ công trực tiếp từ trong mã nguồn chương trình thay vì được đọc tự động từ tệp cấu hình hoặc tệp dữ liệu bên ngoài, gây dài dòng cho mã nguồn.
  2. Hiệu năng giải thuật: Một số thuật toán tìm kiếm và kiểm tra trùng lặp đang sử dụng phương pháp duyệt tuần tự từng phần tử từ đầu đến cuối danh sách ($O(n)$), chưa áp dụng các cấu trúc dữ liệu nâng cao (như bảng băm, cây tìm kiếm nhị phân) để tối ưu hóa thời gian xử lý khi lượng dữ liệu lớn.
  3. Module ghi nhật ký (Logging): Cơ chế ghi log quá trình thực thi đang sử dụng biến chuỗi toàn cục program_exe nối chuỗi liên tục, gây tốn bộ nhớ RAM và làm mã nguồn các hàm nghiệp vụ trở nên cồng kềnh.
  4. Cơ chế sao lưu: Hệ thống chưa hỗ trợ chế độ tự động sao lưu dữ liệu (auto-save) sau mỗi thao tác cập nhật mà hoàn toàn phụ thuộc vào thao tác thủ công của người dùng tại menu sao lưu.

Hướng mở rộng được đề xuất:

  • Tách biệt hoàn toàn phần nạp dữ liệu khởi tạo ra tệp văn bản/tệp cấu hình bên ngoài.
  • Tối ưu hóa cấu trúc lưu trữ và giải thuật tìm kiếm để tăng hiệu năng xử lý.
  • Chuẩn hóa module ghi log thành một luồng tệp riêng (file stream logger) thay vì cộng dồn vào biến chuỗi toàn cục.
  • Bổ sung tính năng tự động ghi đĩa sau mỗi giao dịch cập nhật dữ liệu thành công.

Giá trị tham khảo

Báo cáo bài tập lớn này là tài liệu tham khảo thực tiễn và hữu ích cho:

  • Sinh viên ngành Công nghệ thông tin, Toán - Tin, Kỹ thuật phần mềm: Đặc biệt là sinh viên đang theo học các học phần Kỹ thuật lập trình, Cấu trúc dữ liệu và giải thuật, hoặc Lập trình C/C++ nâng cao.
  • Người phát triển phần mềm ứng dụng Console: Cung cấp giải pháp mẫu hoàn chỉnh về cách tổ chức kiến trúc phần mềm hướng thủ tục, kỹ thuật xử lý danh sách liên kết đơn tự định nghĩa, kỹ thuật định dạng giao diện dòng lệnh chuyên nghiệp với thư viện <iomanip>, và kỹ thuật điều hướng tương tác menu bằng phím chức năng (_getch).
  • Tham khảo về phương pháp luận thiết kế: Cung cấp ví dụ thực tế rõ ràng về cách áp dụng phương pháp tinh chỉnh từng bước từ khâu đặc tả bài toán, thiết kế giải thuật đến cài đặt mã nguồn chi tiết.

Câu hỏi thường gặp

1. Hệ thống đảm bảo tính toàn vẹn dữ liệu giữa các thực thể sinh viên, học phần và điểm thi như thế nào?

Trong hệ thống, dữ liệu điểm thi trong DT_List phụ thuộc đồng thời vào MSSV từ SV_List và Ma_hp từ HP_List. Tác giả đã cài đặt các hàm kiểm tra ràng buộc trước khi thêm điểm mới (bắt buộc MSSV và Mã học phần phải tồn tại trước đó). Đồng thời, khi người dùng thực hiện sửa hoặc xóa một sinh viên/học phần, hệ thống sẽ tự động kích hoạt logic cập nhật hoặc xóa tương ứng toàn bộ các bản ghi liên quan trong danh sách điểm thi để tránh tình trạng dữ liệu mồ côi.

2. Công thức và quy trình tính điểm trung bình tích lũy (GPA) được hiện thực hóa ra sao?

Quy trình tính GPA gồm hai giai đoạn:

  1. Chuyển đổi điểm số từng học phần từ thang điểm 10 sang thang điểm 4 thông qua hàm thang_diem_4(a) với công thức: $Điểm_4 = \frac{a}{10} \times 4$.
  2. Hàm GPA() duyệt qua danh sách điểm thi của sinh viên, lấy $Điểm_4$ nhân với số tín chỉ của học phần tương ứng (tra cứu từ danh sách học phần qua hàm number_tc()) và cộng dồn vào tổng điểm quy đổi, sau đó chia cho tổng số tín chỉ tích lũy total_tc.

3. Thuật toán tìm kiếm theo tên sinh viên hoặc tên học phần hoạt động theo nguyên lý nào?

Hệ thống sử dụng hàm tự định nghĩa check(string text, string input). Hàm này kiểm tra xem chuỗi con input có xuất hiện trong chuỗi gốc text hay không bằng cách chuẩn hóa viết hoa tất cả ký tự qua hàm UPPER(), sau đó so khớp ngược các ký tự từ cuối chuỗi input về đầu và trượt vị trí bắt đầu từ 0 đến n - m trên chuỗi text.

4. Thuật toán sắp xếp danh sách sinh viên được cài đặt bằng giải thuật nào?

Tác giả sử dụng thuật toán sắp xếp chèn (Insertion Sort) trong hàm sort_list(SV_List*& list). Thuật toán duyệt qua từng nút trong danh sách sinh viên hiện tại, tìm vị trí thích hợp theo thứ tự từ điển alphabet của trường Ten_sv trong danh sách tạm replace, thực hiện tái liên kết con trỏ và cuối cùng gán lại con trỏ list = replace.

5. Dữ liệu được lưu trữ và mã hóa vào các tệp như thế nào?

Dữ liệu của ba danh mục được tuần tự hóa thành chuỗi văn bản với các trường phân cách bởi dấu chấm phẩy (;), sau đó được ghi xuống đĩa thông qua hàm writeBinaryFile() dưới dạng tệp nhị phân (SV.bin, HP.bin, DT.bin, GPA.bin). Khi cần đọc lại, hàm readBinaryFile() sẽ đọc khối dữ liệu nhị phân và giải mã ngược lại thành chuỗi ký tự trước khi nạp vào danh sách liên kết.


Kết luận

Báo cáo bài tập lớn "Quản lý sinh viên, học phần, điểm thi" của tác giả Vũ Văn Thành là một công trình thực hành kỹ thuật lập trình C++ chỉn chu, áp dụng nghiêm ngặt phương pháp thiết kế tinh chỉnh từng bước. Hệ thống đã giải quyết trọn vẹn bài toán quản lý học vụ cơ bản thông qua cấu trúc dữ liệu danh sách liên kết đơn tự tạo, thuật toán sắp xếp chèn, tìm kiếm chuỗi con và cơ chế bảo toàn toàn vẹn dữ liệu quan hệ. Dù còn một số điểm có thể tối ưu về hiệu năng và cơ chế lưu trữ khởi tạo, đồ án thể hiện tư duy thiết kế phần mềm mạch lạc và là tài liệu học tập, tham khảo giá trị cho sinh viên chuyên ngành kỹ thuật và công nghệ thông tin.