Bối cảnh và vấn đề nghiên cứu
Trong công tác quản lý giáo dục tại các cơ sở đào tạo quy mô nhỏ hoặc các bộ phận chuyên môn, việc quản lý thủ công danh sách sinh viên, môn học và đăng ký học phần thường gặp nhiều khó khăn. Tại Greenwich Việt Nam, các giảng viên và cán bộ quản trị đối mặt với thách thức trong việc theo dõi thông tin cập nhật về môn học, sắp xếp lớp học dựa trên nhu cầu đăng ký cụ thể của sinh viên và thông báo lịch trình học tập chính xác.
Để giải quyết vấn đề thực tiễn trên, tác giả Trần Đức Long (mã sinh viên GCH210562, lớp GCH1106) đã thực hiện đồ án môn học với tiêu đề "Course Enrollment Management System" (Hệ thống quản lý đăng ký môn học) trong khuôn khổ chương trình đào tạo BTEC Level 5 HND Diploma in Computing, dưới sự hướng dẫn của giảng viên Đinh Đức Mạnh (ngày nộp: 23/06/2023).
Mục tiêu và nhiệm vụ nghiên cứu - phát triển của đề tài bao gồm các nội dung cụ thể:
- Xây dựng ứng dụng quản lý đăng ký môn học có giao diện đồ họa (GUI) trực quan, hỗ trợ người dùng nhập liệu thuận tiện qua các biểu mẫu (forms).
- Hiện thực hóa các chức năng quản trị cơ bản CRUD (Create - Read - Update - Delete) đối với các thực thể môn học, sinh viên và đăng ký học phần.
- Phát triển các tính năng nâng cao bao gồm tìm kiếm (Search) theo nhiều tiêu chí (tên gần đúng, mã định danh, số tiết học, thời gian đăng ký) và sắp xếp (Sort) đa chiều (tăng dần, giảm dần, theo thứ tự bảng chữ cái, theo thời gian).
- Thiết kế cơ chế kiểm tra tính hợp lệ của dữ liệu đầu vào (Validation) và xây dựng hệ thống ngoại lệ tùy biến (Custom Exceptions) theo chuẩn dữ liệu của tổ chức FPT.
- Triển khai phương thức lưu trữ và truy xuất dữ liệu kép: thông qua tập tin cục bộ (File I/O) và cơ sở dữ liệu quan hệ MySQL trên nền tảng máy chủ XAMPP.
- Thực hiện phân lớp học tự động (Class division) dựa trên dữ liệu đăng ký tổng hợp; tiến hành kiểm thử đơn vị tự động bằng công cụ JUnit Test trên toàn bộ các phương thức xử lý chính.
Đối tượng nghiên cứu của đồ án là quy trình quản lý thông tin môn học, sinh viên, đăng ký học phần và thuật toán phân lớp. Phạm vi triển khai được thực hiện trên môi trường máy tính cục bộ (Desktop Application) sử dụng ngôn ngữ Java và công cụ NetBeans IDE.
Cơ sở lý thuyết và phương pháp
Đồ án áp dụng các nguyên lý công nghệ phần mềm và phương pháp phát triển hệ thống hướng đối tượng:
- Kiến trúc phần mềm Model - View - Controller (MVC): Mã nguồn được phân chia thành các tầng độc lập để phân tách rõ ràng giữa biểu diễn dữ liệu (Model), giao diện hiển thị (View) và logic điều khiển xử lý luồng dữ liệu (Controller). Kiến trúc này đảm bảo tính module hóa, giúp việc bảo trì, mở rộng hoặc thay đổi giao diện không ảnh hưởng đến kiến trúc tổng thể.
- Lập trình hướng đối tượng (OOP): Vận dụng đầy đủ các đặc tính đóng gói (Encapsulation), kế thừa (Inheritance - lớp
Student kế thừa lớp Person), trừu tượng hóa (Abstraction) và đa hình (Polymorphism) qua việc cài đặt các giao diện chuẩn (Serializable, Comparator, InforFilter, DataController).
- Xử lý ngoại lệ có cấu trúc: Kế thừa từ lớp gốc
java.lang.Exception để xây dựng tập hợp các lớp ngoại lệ chuyên biệt phục vụ việc bắt lỗi nhập liệu chính xác tại tầng điều khiển và hiển thị cảnh báo lên giao diện.
- Phương pháp kiểm thử phần mềm: Áp dụng phương pháp kiểm thử hộp trắng/kiểm thử đơn vị (Unit Testing) với framework JUnit (phiên bản tích hợp trên NetBeans) để kiểm tra tính đúng đắn của các phương thức nghiệp vụ, thuật toán sắp xếp, lọc dữ liệu và xác thực định dạng.
- Nguồn dữ liệu: Dữ liệu nhập trực tiếp từ người dùng thông qua biểu mẫu Swing, dữ liệu tuần tự hóa lưu trữ dạng File Stream (
.dat/file nhị phân) và hệ quản trị cơ sở dữ liệu MySQL quản lý qua XAMPP.
Thiết kế và triển khai
Hệ thống được tổ chức thành 5 gói (packages) chính trong cấu trúc dự án: model, view, controller, controller.sort (hoặc sort) và exception.
src/
1. Phân hệ các lớp mô hình dữ liệu (Package Model)
Các lớp trong gói model đảm nhiệm lưu trữ trạng thái dữ liệu và đa số cài đặt giao diện Serializable để phục vụ việc ghi đọc tập tin:
| Tên lớp |
Thuộc tính chính |
Phương thức đặc trưng |
Vai trò trong hệ thống |
Account |
email, password, phoneNumber |
Constructors (0, 2, 3 tham số), Getters/Setters, equals(), hashCode() |
Quản lý thông tin tài khoản đăng nhập/đăng ký hệ thống, kiểm tra trùng lặp email. |
Subject |
id, name, kind, numOfLesson |
Getters/Setters, equals(), hashCode(), toString() |
Lưu trữ thông tin môn học, kiểm tra tính duy nhất của mã môn học (id). |
Person |
id, fullName (kiểu FullName gồm first, mid, last), dob (kiểu Date), address, email, phoneNumber |
Constructors ném ngoại lệ tùy biến, Getters/Setters, equals(), hashCode() |
Lớp cơ sở chứa thông tin định danh cá nhân, ném các ngoại lệ kiểm tra hợp lệ. |
Student |
Kế thừa Person, bổ sung: studentId, class, major, schoolYear |
Constructors ném ngoại lệ, Getters/Setters, equals(), hashCode() |
Lưu trữ hồ sơ sinh viên, chuyên ngành, khóa học và mã sinh viên duy nhất. |
Registering |
student (kiểu Student), subject (kiểu Subject), registerDate (kiểu Date) |
Getters/Setters, equals(), hashCode() |
Quản lý thông tin đăng ký học phần, kiểm tra trùng lặp đăng ký của sinh viên. |
Course |
name, registerings (danh sách List<Registering>) |
Getters/Setters, addToCourse() |
Quản lý thông tin lớp học được tạo ra từ danh sách đăng ký học phần. |
2. Hệ thống ngoại lệ tùy biến (Package Exception)
Để kiểm soát chặt chẽ tính toàn vẹn của dữ liệu đầu vào theo yêu cầu chuẩn hóa, tác giả đã xây dựng 7 lớp ngoại lệ riêng biệt:
InvalidPersonIdException: Kiểm tra tính hợp lệ của mã định danh cá nhân (CMND/CCCD).
InvalidStudentIdException: Bắt lỗi định dạng mã số sinh viên không đúng quy chuẩn.
InvalidNameException: Bắt lỗi họ tên người dùng chứa ký tự không hợp lệ hoặc sai cấu trúc.
InvalidPhoneNumberException: Kiểm tra độ dài và đầu số điện thoại liên lạc.
InvalidEmailException: Ràng buộc định dạng email (bắt buộc kết thúc bằng phần mở rộng @fpt...).
InvalidDateOfBirthException: Bắt lỗi ngày sinh không hợp lệ hoặc sai định dạng thời gian.
InvalidPasswordException: Ràng buộc độ an toàn và quy cách của mật khẩu đăng ký.
3. Hệ thống thuật toán sắp xếp (Package controller.sort)
Tác giả hiện thực hóa 10 lớp chuyên biệt cài đặt giao diện java.util.Comparator để xử lý linh hoạt việc sắp xếp danh sách đối tượng:
- Sắp xếp Đăng ký học phần:
SortRegisteringByRegisterTimeEL (theo thời gian từ sớm đến muộn và ngược lại), SortRegisteringByStudentNameAZ (theo tên sinh viên từ A-Z), SortRegisteringByStudentNameZA (theo tên sinh viên từ Z-A).
- Sắp xếp Sinh viên:
SortStudentByNameASC (tên sinh viên tăng dần), SortStudentByNameDESC (tên sinh viên giảm dần), SortStudentByStudentIdASC (theo mã sinh viên tăng dần).
- Sắp xếp Môn học:
sortSubjectByNumOfLessonASC (số tiết học tăng dần), sortSubjectByNumOfLessonDESC (số tiết học giảm dần), sortSubjectByNameASC (tên môn học từ A-Z), sortSubjectByNameDESC (tên môn học từ Z-A).
4. Tầng xử lý logic và điều khiển (Package Controller)
Tầng Controller được chuẩn hóa qua 2 giao diện chính:
InforFilter: Khai báo các hàm kiểm tra hợp lệ dữ liệu: isStudentIdValid(), isPersonIdValid(), isNameValid(), isEmailValid(), isPhoneNumberValid(), isDateOfBirthValid(), isPasswordValid().
DataController: Khai báo các chức năng xử lý dữ liệu lõi bao gồm: writeToFile() (ghi dữ liệu ra file), readDataFromFile() (đọc dữ liệu từ file), kết nối cơ sở dữ liệu MySQL qua cổng XAMPP, login(), registerAccount(), các phương thức search và sort dữ liệu môn học, sinh viên, đăng ký, cùng phương thức createCourse() để tạo danh sách lớp học.
5. Thiết kế giao diện người dùng (Package View)
Giao diện hệ thống được xây dựng bằng Java Swing với các thành phần chính:
- Biểu mẫu Xác thực: Màn hình Đăng ký (
Sign up form) và Đăng nhập (Login form), yêu cầu email đúng chuẩn @fpt.
- Màn hình chính (
HomeFrm): Tổ chức theo giao diện 4 thẻ (Tabs):
- Tab Subjects: Quản lý danh sách môn học dưới dạng bảng (
JTable), tích hợp các nút chức năng Thêm (AddSubjectDialog), Cập nhật, Xóa trường nhập, Tìm kiếm theo tên gần đúng / số tiết học, và Sắp xếp đa tiêu chí.
- Tab Students: Quản lý thông tin sinh viên (
AddStudentDialog), hỗ trợ xem, cập nhật, tìm kiếm theo tên gần đúng / mã sinh viên / chuyên ngành, và sắp xếp theo tên / mã ID.
- Tab Registerings: Quản lý phiếu đăng ký môn học (
addRegisterDialog), tìm kiếm sinh viên và môn học liên kết, tìm kiếm theo thời gian đăng ký và sắp xếp theo tên / thời gian sớm - muộn.
- Tab Class division: Tự động tổng hợp dữ liệu từ bảng đăng ký, thông tin sinh viên và môn học để phân chia thành các lớp học cụ thể (
Course).
Nội dung chính theo từng chương
Tài liệu báo cáo có dung lượng 159 trang, được chia thành các chương mục phản ánh toàn diện chu trình phát triển phần mềm:
I. Giới thiệu và Đặc tả yêu cầu hệ thống (Introduction & Requirements)
Chương này phân tích bối cảnh bài toán quản lý môn học tại Greenwich Việt Nam, xác định mục tiêu xây dựng ứng dụng "Course Enrollment Management System". Tài liệu liệt kê chi tiết các yêu cầu chức năng cho 4 phân hệ chính (Subject, Student, Register, Class division), yêu cầu xác thực người dùng và lựa chọn công nghệ phát triển (Java Swing, NetBeans IDE, XAMPP MySQL, JUnit).
II. Thiết kế giao diện Wireframe và Cấu trúc tổng thể (Wireframes & Program Structure)
Tác giả trình bày các bản vẽ khung giao diện (Wireframes từ Hình 1 đến Hình 5) mô phỏng luồng tương tác người dùng cho màn hình Đăng ký/Đăng nhập, Tab Môn học, Tab Sinh viên, Tab Đăng ký và Tab Chia lớp. Đồng thời, cấu trúc tổng thể của chương trình được mô hình hóa theo kiến trúc MVC 5 gói rõ ràng (Hình 6).
III. Hiện thực hóa các lớp Ngoại lệ và Mô hình dữ liệu (Package Exception & Model)
Tài liệu trình bày chi tiết mã nguồn, sơ đồ thuộc tính và phương thức của 7 lớp ngoại lệ tùy biến (từ Hình 7 đến Hình 13) và 6 lớp thực thể dữ liệu (từ Hình 14 đến Hình 19). Mỗi lớp đều được giải thích tường tận về cơ chế đóng gói, phương thức khởi tạo (constructors), hàm băm hashCode(), hàm so sánh equals() và giao diện Serializable.
IV. Hiện thực hóa Thuật toán Sắp xếp, Lọc dữ liệu và Điều khiển (Sort, Filter & Controller)
Mô tả chi tiết việc cài đặt 10 lớp Comparator sắp xếp (Hình 20 - 30), giao diện InforFilter cùng các phương thức kiểm tra regex/logic hợp lệ (Hình 31 - 38). Tiếp đó là giao diện DataController và lớp triển khai DataControllerImp (Hình 39 - 51) xử lý các giải thuật tìm kiếm, kết nối cơ sở dữ liệu MySQL và phân lớp tự động createCourse().
V. Xây dựng Giao diện Người dùng và Xử lý Sự kiện (Package View & Event Handling)
Chương này tập trung vào kỹ thuật lập trình giao diện Swing trên HomeFrm và các Dialogs (Hình 52 - 88). Tác giả trình bày cơ chế lắng nghe sự kiện (addActionListener, actionPerformed), hiển thị dữ liệu lên bảng (showData), cơ chế gọi lại đối tượng (callback object) khi thêm/sửa, và các luồng xử lý ghi/đọc dữ liệu từ tập tin và MySQL.
VI. Kiểm thử Đơn vị với JUnit và Khắc phục lỗi (Unit Testing & Bug Fixing)
Trình bày quy trình thiết kế các bộ kiểm thử đơn vị tự động thông qua hai lớp DataControllerImpTest và InforFilterImpTest (Hình 89 - 94). Tác giả phân tích chi tiết ca kiểm thử phát hiện lỗi trong phương thức kiểm tra họ tên isNameValid(), tiến hành chỉnh sửa mã nguồn (Hình 95) và xác nhận kết quả kiểm thử toàn diện đạt chuẩn (Hình 96) trước khi đưa ra ảnh chụp màn hình chạy thực tế của toàn bộ hệ thống (Hình 97 - 107).
Kết quả và đóng góp
Đồ án đã hoàn thành toàn diện các mục tiêu kỹ thuật đề ra với các kết quả cụ thể được ghi nhận trong văn bản:
- Xây dựng hoàn chỉnh phần mềm: Hiện thực hóa thành công ứng dụng máy tính "Course Enrollment Management System" với quy mô 159 trang báo cáo kỹ thuật, bao gồm 107 hình vẽ/ảnh chụp chi tiết cấu trúc mã nguồn và giao diện.
- Hệ thống hóa dữ liệu và nghiệp vụ: Thiết lập 5 gói mã nguồn hoàn chỉnh với 6 lớp Model, 7 lớp Custom Exception, 10 lớp Comparator, 2 Interface lõi và các biểu mẫu giao diện Swing tương ứng cho 4 phân hệ chức năng.
- Xử lý lưu trữ song song: Cài đặt thành công 2 phương thức quản lý dữ liệu: đọc/ghi tuần tự hóa đối tượng qua File Stream và kết nối quản trị cơ sở dữ liệu quan hệ MySQL qua môi trường XAMPP.
- Tối ưu hóa chất lượng mã nguồn qua kiểm thử: Phát hiện và sửa lỗi thành công tại phương thức
isNameValid thông qua bộ kiểm thử JUnit InforFilterImpTest, đảm bảo toàn bộ các phương thức lọc và điều khiển dữ liệu vượt qua kiểm thử đơn vị trước khi đóng gói sản phẩm.
Hạn chế và hướng nghiên cứu tiếp
Dựa trên phạm vi và nội dung được trình bày trong tài liệu:
- Hạn chế: Hệ thống được thiết kế dưới dạng ứng dụng máy tính đơn lẻ (Desktop Application) chạy trên nền tảng Java Swing và MySQL cục bộ qua XAMPP; quy tắc xác thực tài khoản bị ràng buộc cố định vào tên miền nội bộ (
@fpt).
- Hướng mở rộng: Mở rộng kiến trúc phần mềm sang nền tảng ứng dụng Web đa người dùng hoặc dịch vụ đám mây (Cloud-based); tích hợp thêm cơ chế phân quyền nâng cao cho từng đối tượng (sinh viên, giảng viên, quản trị viên) và tối ưu hóa thuật toán chia lớp học tự động khi có các điều kiện ràng buộc phức tạp về phòng học và giảng viên.
Giá trị tham khảo
Báo cáo đồ án là tài liệu tham khảo có giá trị chuyên môn cao đối với:
- Sinh viên chuyên ngành Công nghệ thông tin, Kỹ thuật phần mềm đang thực hiện bài tập lớn, đồ án học phần (đặc biệt là chương trình BTEC HND Computing hoặc các môn học Lập trình Java nâng cao).
- Lập trình viên đang tìm kiếm tài liệu mẫu về việc áp dụng kiến trúc MVC trong ứng dụng Java Swing, kỹ thuật xử lý ngoại lệ tùy biến (Custom Exceptions) và kỹ thuật triển khai
Comparator cho các tác vụ sắp xếp đa tiêu chí.
- Tài liệu mẫu về quy trình xây dựng kiểm thử đơn vị tự động (Unit Testing) sử dụng JUnit để kiểm tra và khắc phục lỗi logic trong các ứng dụng quản lý.
Câu hỏi thường gặp
1. Hệ thống yêu cầu quy tắc xác thực tài khoản người dùng như thế nào khi đăng ký?
Theo đặc tả hệ thống, người dùng bắt buộc phải đăng ký tài khoản bằng địa chỉ Email có phần mở rộng tên miền @fpt kết hợp với Mật khẩu. Tính hợp lệ của email và mật khẩu được kiểm tra tự động qua các hàm isEmailValid() và isPasswordValid(), nếu vi phạm sẽ ném ra ngoại lệ InvalidEmailException hoặc InvalidPasswordException.
2. Chức năng Phân lớp học (Tab Class division) tổng hợp thông tin từ những nguồn nào?
Chức năng tạo lớp học (createCourse tại Tab Class division) hoạt động dựa trên việc trích xuất và kết hợp đồng thời dữ liệu từ bảng danh sách đăng ký môn học (Registering), hồ sơ thông tin sinh viên (Student) và thông tin chi tiết của môn học (Subject).
3. Cấu trúc mã nguồn của đồ án được chia thành những gói (packages) nào?
Chương trình được phân tách thành 5 gói chính theo mô hình MVC: gói model (chứa các lớp thực thể dữ liệu), gói view (chứa giao diện người dùng Swing), gói controller (chứa giao diện và lớp điều khiển logic), gói controller.sort (chứa các lớp so sánh Comparator) và gói exception (chứa các lớp ngoại lệ tự định nghĩa).
4. Hệ thống hỗ trợ những hình thức lưu trữ và truy xuất dữ liệu nào?
Hệ thống sử dụng cơ chế lưu trữ kép:
- Đọc và ghi dữ liệu đối tượng tuần tự hóa vào tập tin cục bộ thông qua việc cài đặt interface
Serializable và các phương thức writeToFile(), readDataFromFile().
- Kết nối và thao tác với cơ sở dữ liệu quan hệ MySQL chạy trên nền tảng máy chủ XAMPP được liên kết với NetBeans IDE.
5. Quá trình kiểm thử đơn vị bằng JUnit đã phát hiện và xử lý lỗi cụ thể nào?
Trong quá trình chạy kiểm thử tự động với lớp InforFilterImpTest, tác giả đã phát hiện lỗi logic xác thực dữ liệu tại phương thức isNameValid(). Tác giả đã tiến hành chỉnh sửa lại mã nguồn của hàm này (ghi nhận tại Hình 95) và thực hiện kiểm thử lại để đạt kết quả kiểm thử thành công tuyệt đối (Hình 96).
Kết luận
Đồ án "Course Enrollment Management System" của tác giả Trần Đức Long là một công trình thực hành kỹ thuật phần mềm hoàn chỉnh thuộc chương trình BTEC Level 5 HND Diploma in Computing. Ứng dụng đã giải quyết hiệu quả bài toán quản lý môn học, sinh viên, đăng ký học phần và phân chia lớp học thông qua việc vận dụng đúng đắn kiến trúc MVC trên nền tảng Java Swing, kết hợp lưu trữ kép trên File và MySQL. Toàn bộ các chức năng nghiệp vụ, hệ thống ngoại lệ tùy biến và thuật toán xử lý đều được chứng minh tính chính xác thông qua quy trình kiểm thử tự động nghiêm ngặt bằng JUnit Test.