Hệ thống trang web này sẽ cung cấp các chức năng chính bao gồm: quản lý hồ sơ sinh viên, theo dõi điểm số, hỗ trợ đăng ký môn học, và kết xuất báo cáo.. 1 Mô hình chức năng hệ thống 2.2
Giới thiệu về đề tài
Giới thiệu về đề tài
Trong thời đại công nghệ số phát triển mạnh mẽ, việc quản lý thông tin sinh viên truyền thống qua giấy tờ và bảng tính Excel gặp nhiều khó khăn như lưu trữ, cập nhật và chia sẻ dữ liệu Để khắc phục vấn đề này, nhóm đã phát triển "Trang web quản lý sinh viên", một hệ thống trực tuyến tối ưu hóa quy trình quản lý, đảm bảo tính chính xác, nhanh chóng và tiện lợi trong việc quản lý thông tin sinh viên.
Hệ thống trang web này cung cấp các chức năng quản lý hồ sơ sinh viên, theo dõi điểm số, hỗ trợ đăng ký môn học và kết xuất báo cáo Với giao diện trực quan, người dùng như quản trị viên, giảng viên và sinh viên có thể dễ dàng truy cập và thao tác dữ liệu nhanh chóng từ bất kỳ thiết bị nào có kết nối Internet Hệ thống cũng đảm bảo tính bảo mật và minh bạch trong việc xử lý và lưu trữ dữ liệu.
Kế hoạch làm đề tài
1 Giai đoạn 1: Lập kế hoạch (Tuần 1)
Trong giai đoạn này, nhóm tập trung vào việc nghiên cứu và xác định yêu cầu hệ thống Chúng tôi thu thập thông tin từ các nguồn tham khảo và xây dựng tài liệu mô tả yêu cầu phần mềm (SRS) làm cơ sở phát triển Đồng thời, các bản thiết kế giao diện ban đầu (wireframe) sẽ được phác thảo để định hướng cho phát triển giao diện người dùng.
2 Giai đoạn 2: Phân tích và thiết kế (Tuần 2-3)
Dựa trên các yêu cầu đã xác định, nhóm sẽ tiến hành phân tích dữ liệu và thiết kế hệ thống chi tiết:
Thiết kế cơ sở dữ liệu: Xây dựng các bảng dữ liệu cần thiết như SinhVien,
LopHoc, MonHoc, Diem, đảm bảo cấu trúc chặt chẽ và dễ mở rộng.
Thiết kế giao diện người dùng: Sử dụng các công cụ như Figma hoặc
Adobe XD để thiết kế giao diện thân thiện và dễ sử dụng.
Thiết kế kiến trúc hệ thống: Áp dụng mô hình MVC (Model-View-
Controller) để tách biệt logic xử lý, giao diện, và cơ sở dữ liệu, giúp hệ thống dễ bảo trì và nâng cấp.
3 Giai đoạn 3: Phát triển (Tuần 4-6)
Giai đoạn này tập trung vào việc lập trình và xây dựng các thành phần chính của hệ thống:
Phát triển giao diện người dùng (Frontend): Sử dụng HTML, CSS,
JavaScript kết hợp với các framework như React.js hoặc Angular.js để tạo giao diện hiện đại và thân thiện với người dùng.
Xây dựng API và logic xử lý (Backend): Sử dụng Node.js hoặc Java
Spring Boot để xây dựng các API RESTful, phục vụ cho việc trao đổi dữ liệu giữa giao diện và cơ sở dữ liệu.
Kết nối cơ sở dữ liệu: Sử dụng MySQL hoặc PostgreSQL để lưu trữ thông tin sinh viên, lớp học và điểm số.
4 Giai đoạn 4: Kiểm thử và triển khai (Tuần 7)
Sau khi hoàn thành phát triển, nhóm tiến hành kiểm thử toàn bộ hệ thống để đảm bảo các chức năng hoạt động ổn định và không có lỗi Công cụ Postman sẽ được sử dụng để kiểm thử API, trong khi kiểm thử giao diện sẽ được thực hiện thủ công trên nhiều thiết bị khác nhau Sau khi kiểm thử thành công, hệ thống sẽ được triển khai trên máy chủ như AWS hoặc Heroku để người dùng có thể trải nghiệm.
5 Giai đoạn 5: Hoàn thiện và báo cáo (Tuần 8)
Nhóm sẽ cải tiến các tính năng, giao diện và hiệu năng hệ thống dựa trên phản hồi của người dùng Đồng thời, tài liệu hướng dẫn sử dụng và báo cáo tổng kết sẽ được chuẩn bị để trình bày kết quả và quy trình thực hiện đề tài.
Các công nghệ sử dụng
Ngôn ngữ lập trình Java: là ngôn ngữ lập trình chủ yếu được sử dụng để phát triển ứng dụng này Java được chọn vì các lý do sau:
Java là một ngôn ngữ lập trình đa nền tảng, cho phép chạy trên nhiều hệ điều hành như Windows, Linux, và macOS mà không cần thay đổi mã nguồn.
- Lập trình hướng đối tượng: Java hỗ trợ lập trình hướng đối tượng (OOP), giúp quản lý các đối tượng như điện thoại, khách hàng, đơn hàng, v.v dễ dàng.
- Khả năng mở rộng: Với Java, bạn có thể mở rộng ứng dụng để hỗ trợ nhiều tính năng phức tạp hơn trong tương lai.
Java cung cấp một hệ thống thư viện phong phú, hỗ trợ hiệu quả cho các tác vụ như kết nối cơ sở dữ liệu, phát triển giao diện đồ họa (GUI) và quản lý luồng, giúp lập trình viên dễ dàng thực hiện các công việc phức tạp.
Giao diện người dùng: JavaFX / Swing
- JavaFX và Swing là các thư viện được sử dụng để xây dựng giao diện người dùng (GUI) trong Java.
JavaFX là công nghệ tiên tiến, mạnh mẽ, giúp tạo ra giao diện đồ họa hấp dẫn và dễ dàng tích hợp các hiệu ứng động cùng đồ họa.
- Swing là thư viện cũ hơn, phù hợp cho các ứng dụng đơn giản và tương thích tốt với hầu hết các môi trường Java.
MySQL: Lưu trữ dữ liệu có cấu trúc bao gồm thông tin sinh viên, lớp học, môn học và điểm số.
MongoDB: Tùy chọn sử dụng nếu cần lưu trữ dữ liệu phi cấu trúc.
GitHub/GitLab: Quản lý mã nguồn và hỗ trợ làm việc nhóm hiệu quả.
Postman: Dùng để kiểm thử API.
Docker: Đóng gói ứng dụng và triển khai dễ dàng trên nhiều môi trường.
Stack OverFlow: Hỗ trợ code, sửa tính logic của code
Firebase Hosting: Triển khai và chạy hệ thống trực tuyến.
Web server: Sử dụng Nginx hoặc Apache Netbeans để phục vụ ứng dụng.
Kết chương 1
Chương 1 đã giới thiệu tổng quan về đề tài "Trang web quản lý sinh viên", bao gồm lý do chọn đề tài, mục tiêu, phạm vi nghiên cứu và ý nghĩa thực tiễn của hệ thống Việc xây dựng một trang web quản lý sinh viên không chỉ giúp nâng cao hiệu quả quản lý dữ liệu mà còn mang lại tính minh bạch và tiện lợi cho các bên liên quan, từ quản trị viên, giảng viên đến sinh viên.
Kế hoạch thực hiện được chia thành các giai đoạn rõ ràng, bao gồm lập kế hoạch, phân tích, thiết kế, phát triển, kiểm thử và triển khai, nhằm đảm bảo tính khoa học và hệ thống Các công nghệ tiên tiến như React.js, Node.js, MySQL và Docker sẽ được áp dụng để xây dựng một hệ thống ổn định, bảo mật và có khả năng mở rộng trong tương lai.
Chương tiếp theo sẽ phân tích kỹ lưỡng các yêu cầu hệ thống, bao gồm yêu cầu nghiệp vụ, yêu cầu chức năng và yêu cầu phi chức năng Bên cạnh đó, bản thiết kế chi tiết cơ sở dữ liệu và kiến trúc hệ thống sẽ được trình bày, tạo nền tảng vững chắc cho các giai đoạn phát triển tiếp theo.
Mô hình hệ thống
Mô hình chức năng
2.2 Mô hình lớp của hệ thống quản lý sinh viên
2.3 Giao diện thêm sinh viên mới
2.4 Hiển thị danh sách sinh viên
2.5 Sửa thông tin sinh viên 24
2.6 Xóa thông tin sinh viên 25
2.7 Hiển thị tất cả sinh viên có trong danh sách
2.9 Giao diện chính của hệ thống quản lý sinh viên
Chương 1 Giới thiệu về đề tài
1.1.Giới thiệu về đề tài.
Trong thời đại công nghệ số, việc quản lý thông tin sinh viên bằng phương pháp truyền thống như giấy tờ và bảng tính Excel gặp nhiều khó khăn trong lưu trữ, cập nhật và chia sẻ dữ liệu Để khắc phục những hạn chế này, nhóm đã phát triển "Trang web quản lý sinh viên", một hệ thống trực tuyến tối ưu hóa quy trình quản lý, đảm bảo tính chính xác, nhanh chóng và tiện lợi trong việc xử lý thông tin sinh viên.
Hệ thống trang web này cung cấp các chức năng quan trọng như quản lý hồ sơ sinh viên, theo dõi điểm số, hỗ trợ đăng ký môn học và kết xuất báo cáo Giao diện trực quan cho phép người dùng, bao gồm quản trị viên, giảng viên và sinh viên, dễ dàng truy cập và thao tác với dữ liệu từ bất kỳ thiết bị nào có kết nối Internet Hệ thống cũng đảm bảo tính bảo mật và minh bạch trong việc xử lý và lưu trữ dữ liệu.
1.2 Kế hoạch làm đề tài.
1 Giai đoạn 1: Lập kế hoạch (Tuần 1)
Trong giai đoạn này, nhóm sẽ tập trung vào việc nghiên cứu và xác định rõ yêu cầu của hệ thống Chúng tôi sẽ thu thập thông tin từ các nguồn tham khảo và xây dựng tài liệu mô tả yêu cầu phần mềm (SRS) làm cơ sở phát triển Bên cạnh đó, các bản thiết kế giao diện ban đầu (wireframe) cũng sẽ được phác thảo để định hướng cho phát triển giao diện người dùng.
2 Giai đoạn 2: Phân tích và thiết kế (Tuần 2-3)
Dựa trên các yêu cầu đã xác định, nhóm sẽ tiến hành phân tích dữ liệu và thiết kế hệ thống chi tiết:
Thiết kế cơ sở dữ liệu: Xây dựng các bảng dữ liệu cần thiết như SinhVien,
LopHoc, MonHoc, Diem, đảm bảo cấu trúc chặt chẽ và dễ mở rộng.
Thiết kế giao diện người dùng: Sử dụng các công cụ như Figma hoặc
Adobe XD để thiết kế giao diện thân thiện và dễ sử dụng.
Thiết kế kiến trúc hệ thống: Áp dụng mô hình MVC (Model-View-
Controller) để tách biệt logic xử lý, giao diện, và cơ sở dữ liệu, giúp hệ thống dễ bảo trì và nâng cấp.
3 Giai đoạn 3: Phát triển (Tuần 4-6)
Giai đoạn này tập trung vào việc lập trình và xây dựng các thành phần chính của hệ thống:
Phát triển giao diện người dùng (Frontend): Sử dụng HTML, CSS,
JavaScript kết hợp với các framework như React.js hoặc Angular.js để tạo giao diện hiện đại và thân thiện với người dùng.
Xây dựng API và logic xử lý (Backend): Sử dụng Node.js hoặc Java
Spring Boot để xây dựng các API RESTful, phục vụ cho việc trao đổi dữ liệu giữa giao diện và cơ sở dữ liệu.
Kết nối cơ sở dữ liệu: Sử dụng MySQL hoặc PostgreSQL để lưu trữ thông tin sinh viên, lớp học và điểm số.
4 Giai đoạn 4: Kiểm thử và triển khai (Tuần 7)
Sau khi hoàn thành phát triển, nhóm sẽ tiến hành kiểm thử toàn bộ hệ thống để đảm bảo các chức năng hoạt động ổn định và không có lỗi Công cụ Postman sẽ được sử dụng để kiểm thử API, trong khi kiểm thử giao diện sẽ được thực hiện thủ công trên nhiều thiết bị khác nhau Sau khi quá trình kiểm thử thành công, hệ thống sẽ được triển khai trên máy chủ như AWS hoặc Heroku để người dùng có thể trải nghiệm.
5 Giai đoạn 5: Hoàn thiện và báo cáo (Tuần 8)
Nhóm sẽ tiếp thu phản hồi từ người dùng để hoàn thiện tính năng, cải thiện giao diện và tối ưu hóa hiệu suất hệ thống Bên cạnh đó, tài liệu hướng dẫn sử dụng và báo cáo tổng kết sẽ được chuẩn bị nhằm trình bày kết quả và quy trình thực hiện đề tài.
1.3 Các công nghệ sử dụng.
Ngôn ngữ lập trình Java: là ngôn ngữ lập trình chủ yếu được sử dụng để phát triển ứng dụng này Java được chọn vì các lý do sau:
Java là một ngôn ngữ lập trình đa nền tảng, cho phép chạy trên nhiều hệ điều hành khác nhau như Windows, Linux và macOS mà không cần thay đổi mã nguồn.
- Lập trình hướng đối tượng: Java hỗ trợ lập trình hướng đối tượng (OOP), giúp quản lý các đối tượng như điện thoại, khách hàng, đơn hàng, v.v dễ dàng.
- Khả năng mở rộng: Với Java, bạn có thể mở rộng ứng dụng để hỗ trợ nhiều tính năng phức tạp hơn trong tương lai.
Java cung cấp một hệ thống thư viện phong phú, hỗ trợ hiệu quả cho các công việc như kết nối cơ sở dữ liệu, phát triển giao diện đồ họa (GUI) và quản lý luồng, giúp lập trình viên tiết kiệm thời gian và nâng cao năng suất.
Giao diện người dùng: JavaFX / Swing
- JavaFX và Swing là các thư viện được sử dụng để xây dựng giao diện người dùng (GUI) trong Java.
JavaFX là công nghệ tiên tiến, mạnh mẽ, cho phép phát triển giao diện đồ họa hấp dẫn và dễ dàng tích hợp các hiệu ứng động cùng đồ họa.
- Swing là thư viện cũ hơn, phù hợp cho các ứng dụng đơn giản và tương thích tốt với hầu hết các môi trường Java.
MySQL: Lưu trữ dữ liệu có cấu trúc bao gồm thông tin sinh viên, lớp học, môn học và điểm số.
MongoDB: Tùy chọn sử dụng nếu cần lưu trữ dữ liệu phi cấu trúc.
GitHub/GitLab: Quản lý mã nguồn và hỗ trợ làm việc nhóm hiệu quả.
Postman: Dùng để kiểm thử API.
Docker: Đóng gói ứng dụng và triển khai dễ dàng trên nhiều môi trường.
Stack OverFlow: Hỗ trợ code, sửa tính logic của code
Firebase Hosting: Triển khai và chạy hệ thống trực tuyến.
Web server: Sử dụng Nginx hoặc Apache Netbeans để phục vụ ứng dụng.
Chương 1 đã giới thiệu tổng quan về đề tài "Trang web quản lý sinh viên", bao gồm lý do chọn đề tài, mục tiêu, phạm vi nghiên cứu và ý nghĩa thực tiễn của hệ thống Việc xây dựng một trang web quản lý sinh viên không chỉ giúp nâng cao hiệu quả quản lý dữ liệu mà còn mang lại tính minh bạch và tiện lợi cho các bên liên quan, từ quản trị viên, giảng viên đến sinh viên.
Kế hoạch thực hiện được chia thành các giai đoạn rõ ràng: lập kế hoạch, phân tích, thiết kế, phát triển, kiểm thử và triển khai, nhằm đảm bảo tính khoa học và hệ thống Sử dụng các công nghệ tiên tiến như React.js, Node.js, MySQL và Docker sẽ giúp xây dựng một hệ thống ổn định, bảo mật và có khả năng mở rộng trong tương lai.
Chương tiếp theo sẽ phân tích yêu cầu hệ thống, bao gồm yêu cầu nghiệp vụ, yêu cầu chức năng và yêu cầu phi chức năng Bên cạnh đó, bản thiết kế chi tiết cơ sở dữ liệu và kiến trúc hệ thống sẽ được trình bày, tạo nền tảng cho các giai đoạn phát triển tiếp theo.
Chương 2 Mô hình hệ thống 2.1 Mô hình chức năng
Hình 2 1 Mô hình chức năng hệ thống
Thiết kế giao diện của lớp
Giao diện 1: Person (Mô tả đối tượng nhân viên)
Mục đích: Thêm, Sửa, Xóa, Xem thông tin nhân viên.
Giao diện 2: StudentOperations (Mô tả thao tác dành cho sinh viên)
Mục đích: Cung cấp các chức năng để sinh viên tương tác với hệ thống.
Thuộc tính: o Không có (chỉ định nghĩa các thao tác).
The methods for managing course enrollment include `void enrollCourse(String course)`, which allows students to register for a specific course, `void dropCourse(String course)`, enabling them to withdraw from a course, and `ArrayList getCourses()`, which retrieves a list of all courses the student is currently enrolled in.
Giao diện 3: CourseManagement (Mô tả quản lý môn học)
Mục đích: Cung cấp chức năng quản lý các môn học trong hệ thống.
Thuộc tính: o Không có (tập trung vào thao tác).
Để quản lý môn học, hệ thống cung cấp các phương thức như sau: `void addCourse(String courseId, String courseName)` cho phép thêm một môn học mới, `void editCourse(String courseId, String newCourseName)` để sửa thông tin môn học, `void deleteCourse(String courseId)` dùng để xóa môn học khỏi hệ thống, và `List listCourses()` giúp lấy danh sách tất cả các môn học hiện có.
Giao diện 4: GradeManagement (Mô tả quản lý điểm số)
Mục đích: Định nghĩa các thao tác quản lý điểm số của sinh viên.
Thuộc tính: o Không có (chỉ định nghĩa thao tác).
Để quản lý điểm số của sinh viên trong các môn học, có bốn phương thức chính: `addGrade(String studentId, String courseId, double grade)` cho phép nhập điểm cho sinh viên; `updateGrade(String studentId, String courseId, double newGrade)` để cập nhật điểm số; `deleteGrade(String studentId, String courseId)` giúp xóa điểm số của sinh viên; và `getGrade(String studentId, String courseId)` để lấy điểm số của sinh viên trong môn học cụ thể.
Giao diện 5: ReportOperations (Mô tả thao tác thống kê và báo cáo)
Mục đích: Hỗ trợ tạo báo cáo và thống kê kết quả học tập.
Thuộc tính: o Không có (tập trung vào thao tác).
The methods provided include counting the number of students in a class with `int countStudentsByClass(String classId)`, calculating the average grade for a course using `double calculateAverageGrade(String courseId)`, retrieving a list of top-performing students in a subject through `List getTopStudents(String courseId)`, and generating an academic report for a student with `List generateReport(String studentId)`.
Giao diện 6: Authentication (Mô tả quản lý tài khoản người dùng)
Mục đích: Định nghĩa các chức năng liên quan đến tài khoản và bảo mật.
Thuộc tính: o Không có (tập trung vào thao tác).
Trong hệ thống, người dùng có thể thực hiện các phương thức sau: `boolean login(String username, String password)` để xác thực đăng nhập, `void logout()` để đăng xuất khỏi hệ thống, `boolean changePassword(String username, String oldPassword, String newPassword)` để thay đổi mật khẩu, và `boolean resetPassword(String username)` để đặt lại mật khẩu cho tài khoản.
Mô hình kiến trúc hệ thống
Lớp 1: Person (Lớp cha, mô tả đối tượng người dùng cơ bản)
Thuộc tính: o String id: Mã định danh của lớp người (sinh viên, giảng viên, nhân viên). o String name: Tên của lớp người. o int age: Tuổi của lớp người.
Phương thức: o String getId(): Lấy mã định danh của lớp người. o String getName(): Lấy tên của lớp người. o int getAge(): Lấy tuổi của lớp người.
Lớp Person cung cấp thông tin cơ bản về cá nhân, bao gồm sinh viên, giảng viên và nhân viên Các phương thức trong lớp này cho phép truy xuất thông tin cá nhân một cách hiệu quả.
Lớp 2: Student (Kế thừa từ Person, mô tả sinh viên và các thao tác liên quan)
Thuộc tính: o ArrayList enrolledCourses: Danh sách các môn học mà sinh viên đã đăng ký.
Để quản lý việc đăng ký môn học cho sinh viên, có ba phương thức chính: đầu tiên, phương thức `void enrollCourse(String course)` cho phép sinh viên đăng ký một môn học; thứ hai, `void dropCourse(String course)` giúp sinh viên hủy đăng ký môn học; cuối cùng, phương thức `ArrayList getEnrolledCourses()` cung cấp danh sách các môn học mà sinh viên đã đăng ký.
Lớp Student được phát triển từ lớp Person, bổ sung các chức năng quản lý môn học mà sinh viên đăng ký Các phương thức trong lớp này cho phép sinh viên thực hiện việc đăng ký hoặc hủy bỏ môn học một cách dễ dàng và hiệu quả.
Lớp 3: Course (Lớp mô tả thông tin môn học)
Thuộc tính: o String courseId: Mã môn học. o String courseName: Tên môn học. o int credits: Số tín chỉ của môn học.
The methods provided include: `String getCourseId()` for retrieving the course ID, `String getCourseName()` to obtain the course name, and `int getCredits()` which returns the number of credits for the course Additionally, `void setCourseName(String name)` allows for updating the course name.
Lớp Course lưu trữ thông tin chi tiết về các môn học, bao gồm các phương thức cho phép người dùng truy xuất thông tin hoặc cập nhật tên môn học một cách dễ dàng và hiệu quả.
Lớp 4: Grade (Lớp mô tả thông tin điểm số của sinh viên)
Thuộc tính: o String studentId: Mã sinh viên. o String courseId: Mã môn học. o double grade: Điểm của sinh viên trong môn học.
Phương thức trong hệ thống quản lý điểm số bao gồm: double getGrade() để lấy điểm số của sinh viên trong môn học, void setGrade(double grade) để cập nhật điểm số của sinh viên, String getStudentId() để lấy mã sinh viên, và String getCourseId() để lấy mã môn học.
Lớp Grade quản lý điểm số của sinh viên cho từng môn học, cung cấp các phương thức để truy xuất và cập nhật điểm số của sinh viên một cách hiệu quả.
Lớp 5: StudentManagement (Quản lý sinh viên, thực hiện các thao tác thêm, sửa, xóa)
Thuộc tính: o ArrayList students: Danh sách tất cả các sinh viên trong hệ thống.
Trong hệ thống quản lý sinh viên, có bốn phương thức chính: `void addStudent(Student student)` để thêm sinh viên mới vào danh sách; `void removeStudent(String studentId)` nhằm xóa sinh viên theo mã sinh viên; `Student getStudentById(String studentId)` để lấy thông tin của sinh viên dựa trên mã; và `List getAllStudents()` dùng để lấy danh sách tất cả sinh viên trong hệ thống.
Mô tả: Lớp StudentManagement quản lý danh sách sinh viên và thực hiện các thao tác liên quan như thêm, xóa hoặc tìm kiếm sinh viên.
Lớp 6: GradeManagement (Quản lý điểm số của sinh viên)
Thuộc tính: o ArrayList grades: Danh sách điểm số của tất cả sinh viên.
Phương thức quản lý điểm sinh viên bao gồm: `void addGrade(String studentId, String courseId, double grade)` để nhập điểm cho sinh viên; `void updateGrade(String studentId, String courseId, double grade)` nhằm cập nhật điểm của sinh viên; `void deleteGrade(String studentId, String courseId)` để xóa điểm của sinh viên; `List getGradesByStudent(String studentId)` giúp lấy danh sách điểm của sinh viên; và `List getGradesByCourse(String courseId)` cho phép lấy danh sách điểm của sinh viên trong một môn học cụ thể.
Lớp GradeManagement chịu trách nhiệm quản lý điểm số của sinh viên trong hệ thống Các phương thức trong lớp này cho phép người dùng thêm, cập nhật, xóa và truy xuất thông tin điểm số của sinh viên một cách hiệu quả.
Hình 2 2 Mô hình lớp của hệ thống
Mô hình cơ sở dữ liệu
Mục đích: Lưu trữ thông tin sinh viên.
Thuộc tính: o student_id (VARCHAR): Mã sinh viên (khóa chính). o name (VARCHAR): Tên sinh viên. o age (INT): Tuổi của sinh viên.
Mục đích: Lưu trữ thông tin các môn học.
Thuộc tính: o course_id (VARCHAR): Mã môn học (khóa chính). o course_name (VARCHAR): Tên môn học. o credits (INT): Số tín chỉ của môn học.
3 Bảng Enrollments (Đăng ký môn học)
Mục đích: Lưu trữ thông tin các môn học mà sinh viên đã đăng ký.
Bảng này chứa các thuộc tính quan trọng liên quan đến việc đăng ký môn học của sinh viên, bao gồm mã sinh viên (student_id) dưới dạng VARCHAR, là khóa ngoại từ bảng Sinh viên (Students); mã môn học (course_id) cũng dưới dạng VARCHAR, là khóa ngoại từ bảng Môn học (Courses); và ngày đăng ký môn học (enrollment_date) dưới dạng DATE.
Mục đích: Lưu trữ điểm số của sinh viên trong các môn học.
Thuộc tính của bảng bao gồm: student_id (VARCHAR) đại diện cho mã sinh viên, là khóa ngoại từ bảng Students; course_id (VARCHAR) thể hiện mã môn học, cũng là khóa ngoại từ bảng Courses; và grade (DECIMAL) ghi nhận điểm số của sinh viên trong môn học tương ứng.
1 Truy vấn lấy thông tin tất cả sinh viên
2 Truy vấn lấy tất cả môn học của một sinh viên
JOIN Courses ON Enrollments.course_id = Courses.course_id
3 Truy vấn lấy điểm của một sinh viên trong một môn học
WHERE student_id = 'S001' AND course_id = 'C001';
4 Truy vấn danh sách sinh viên đăng ký môn học cụ thể
JOIN Students ON Enrollments.student_id = Students.student_id WHERE Enrollments.course_id = 'C001';
5 Truy vấn điểm trung bình của một sinh viên
SELECT AVG(grade) AS avg_grade
6 Truy vấn sinh viên có điểm cao nhất trong một môn học
Các Cập Nhật Dữ Liệu
1 Thêm một sinh viên mới
INSERT INTO Students (student_id, name, age)
2 Thêm một môn học mới
INSERT INTO Courses (course_id, course_name, credits)
3 Sinh viên đăng ký môn học
INSERT INTO Enrollments (student_id, course_id, enrollment_date)
4 Cập nhật điểm của sinh viên trong một môn học
WHERE student_id = 'S001' AND course_id = 'C001';
5 Xóa điểm của sinh viên trong một môn học
WHERE student_id = 'S001' AND course_id = 'C001';
6 Sinh viên hủy đăng ký môn học
WHERE student_id = 'S001' AND course_id = 'C001';
Giao diện người dùng
Giao diện Thêm Sinh Viên
Mục đích: Cho phép người dùng nhập thông tin của sinh viên mới và thêm vào cơ sở dữ liệu.
student_id: Mã sinh viên (Text field).
name: Tên sinh viên (Text field).
age: Tuổi của sinh viên (Text field).
btnAdd: Nút để thêm sinh viên (Button).
addStudent(): Xử lý việc thêm thông tin sinh viên vào cơ sở dữ liệu khi người dùng nhấn nút "Thêm". public void addStudent() {
String name = txtName.getText(); int age = Integer.parseInt(txtAge.getText());
Student student = new Student(id, name, age); students.add(student); tableModel.addRow(new Object[]{id, name, age});
Hình 2.3 Thêm sinh viên mới
Giao diện Hiển Thị Sinh Viên
Mục đích: Hiển thị danh sách tất cả sinh viên trong hệ thống.
table: Bảng hiển thị thông tin sinh viên.
tableModel: Mô hình bảng dữ liệu.
The `showStudentList()` method updates the display table of students by first clearing all existing rows with `tableModel.setRowCount(0)` It then iterates through the list of students, adding each student's ID, name, and age to the table using `tableModel.addRow()`.
Hình 2.4 Hiển thị tất cả sinh viên có trong danh sách
Giao diện Sửa Thông Tin Sinh Viên
Mục đích: Cho phép người dùng chỉnh sửa thông tin của một sinh viên đã có trong hệ thống.
student_id: Mã sinh viên (Text field).
name: Tên sinh viên (Text field).
age: Tuổi của sinh viên (Text field).
btnEdit: Nút để lưu thay đổi (Button).
editStudent(): Sửa thông tin của sinh viên đã chọn trong bảng. public void editStudent() { int selectedRow = table.getSelectedRow(); if (selectedRow >= 0) {
String name = txtName.getText(); int age = Integer.parseInt(txtAge.getText());
Student student = students.get(selectedRow); student.id = id; student.name = name; student.age = age; tableModel.setValueAt(id, selectedRow, 0); tableModel.setValueAt(name, selectedRow, 1); tableModel.setValueAt(age, selectedRow, 2);
Hình 2.5 Thông tin sinh viên đã được sửa
Giao diện Xóa Sinh Viên
Mục đích: Cho phép người dùng xóa một sinh viên khỏi hệ thống.
table: Bảng hiển thị danh sách sinh viên.
btnDelete: Nút để xóa sinh viên đã chọn (Button).
deleteStudent(): Xóa sinh viên đã chọn trong bảng và cơ sở dữ liệu. public void deleteStudent() { int selectedRow = table.getSelectedRow(); if (selectedRow >= 0) { students.remove(selectedRow); tableModel.removeRow(selectedRow);
Hình 2.6 Giao diện sau khi đã xóa sinh viên
Giao diện Hiển thị danh sách sinh viên
Mục đích: Hiển thị tất cả sinh viên có trong danh sách.
table: Bảng hiển thị danh sách sinh viên. btnshowStudent: Nút để hiển thị tất cả sinh viên (Button)
public void hienThiDanhSachSinhVien(DefaultTableModel tableModel) { // Xóa dữ liệu cũ trên bảng tableModel.setRowCount(0);
// Kiểm tra danh sách sinh viên if (danhSachSinhVien.isEmpty()) {
JOptionPane.showMessageDialog(null, "Danh sách sinh viên rỗng!",
"Thông Báo", JOptionPane.INFORMATION_MESSAGE);
// Thêm từng sinh viên vào bảng for (SinhVien sv : danhSachSinhVien) {
Object[] row = {sv.getMaSV(), sv.getHoTen(), sv.getTuoi(), sv.getLopHoc()}; tableModel.addRow(row);
Hình 2.7 Hiển thị tất cả sinh viên có trong danh sách
Các tiện ích
1 Phương thức addStudent() trong lớp StudentManagementApp
Mục đích: Thêm một sinh viên mới vào hệ thống.
Phương thức này thu thập thông tin từ các trường nhập liệu để tạo một đối tượng sinh viên mới, sau đó thêm sinh viên vào danh sách và cập nhật bảng hiển thị.
String name = txtName.getText(); int age = Integer.parseInt(txtAge.getText()); if (id.isEmpty() || name.isEmpty()) {
JOptionPane.showMessageDialog(frame, "Vui lòng điền vào trường này!"); return;
Student student = new Student(id, name, age); students.add(student); // Thêm sinh viên vào danh sách tableModel.addRow(new Object[]{id, name, age, student.getEnrolledCourses()});
//Cập nhật bảng clearFields(); // Làm sạch các trường nhập liệu
JOptionPane.showMessageDialog(frame, "Nhập thông tin sinh viên bạn muốn thêm!");
2 Phương thức editStudent() trong lớp StudentManagementApp
Mục đích: Sửa thông tin của một sinh viên đã được chọn từ bảng.
Phương thức editStudent() cho phép cập nhật thông tin của sinh viên trong danh sách students bằng cách lấy dữ liệu từ các trường nhập liệu Sau khi thông tin được cập nhật, bảng hiển thị sẽ được làm mới để phản ánh sự thay đổi.
String name = txtName.getText(); int age = Integer.parseInt(txtAge.getText()); if (id.isEmpty() || name.isEmpty()) {
JOptionPane.showMessageDialog(frame, "Vui lòng điền vào trường này!"); return;
// Cập nhật thông tin sinh viên trong danh sách
Student student = students.get(selectedRow); student.id = id; student.name = name; student.age = age;
// Cập nhật bảng tableModel.setValueAt(id, selectedRow, 0); tableModel.setValueAt(name, selectedRow, 1); tableModel.setValueAt(age, selectedRow, 2); clearFields(); // Làm sạch các trường nhập liệu
JOptionPane.showMessageDialog(frame, "Tuổi phải là 1 số!");
JOptionPane.showMessageDialog(frame, "Vui lòng chọn sinh viên để sửa!"); }
3 Phương thức deleteStudent() trong lớp StudentManagementApp
Mục đích: Xóa sinh viên đã được chọn từ bảng.
The method described will remove a student from the list and update the display table accordingly It begins by identifying the selected row in the table If a valid row is selected, the student is removed from the list, and the table model is updated to reflect this change by removing the corresponding row.
JOptionPane.showMessageDialog(frame, "Vui lòng chọn sinh viên để xóa!"); }
4 Phương thức showStudentCount() trong lớp StudentManagementApp
Mục đích: Hiển thị tổng số sinh viên trong hệ thống.
Mô tả: Phương thức này sẽ tính toán và hiển thị tổng số sinh viên trong hệ thống. public void showStudentCount() {
JOptionPane.showMessageDialog(frame, "Tổng số sinh viên: " + students.size());
5 Phương thức enrollCourse() trong lớp Student
Mục đích: Đăng ký một môn học cho sinh viên.
Phương thức enrollCourse(String course) cho phép thêm môn học vào danh sách các môn học mà sinh viên đã đăng ký Cụ thể, nó sẽ sử dụng lệnh enrolledCourses.add(course) để ghi nhận môn học mới vào danh sách đã đăng ký.
6 Phương thức dropCourse() trong lớp Student
Mục đích: Hủy đăng ký một môn học của sinh viên.
Phương thức này cho phép sinh viên loại bỏ một môn học khỏi danh sách các môn học đã đăng ký Cụ thể, hàm `dropCourse` nhận vào tên môn học và thực hiện việc xóa môn học đó khỏi danh sách `enrolledCourses`.
Kết chương 3
Chương 3 đã trình bày chi tiết quá trình thiết kế và triển khai hệ thống quản lý sinh viên, bao gồm các phần chính như xây dựng các giao diện người dùng, các lớp và phương thức trong hệ thống, cũng như mô hình cơ sở dữ liệu quan hệ.
Các nội dung chính trong chương 3
1 Các Giao Diện Người Dùng: Hệ thống cung cấp các giao diện người dùng cơ bản để quản lý thông tin sinh viên, bao gồm các chức năng thêm, sửa, xóa sinh viên, hiển thị danh sách sinh viên, thống kê tổng số sinh viên, và cho phép sinh viên đăng ký/hủy các môn học.
2 Các Lớp và Phương Thức: Chúng ta đã xây dựng các lớp chính như StudentManagementApp và Student, nơi các phương thức như addStudent(), editStudent(), deleteStudent(), showStudentCount() và enrollCourse() giúp quản lý thông tin sinh viên, môn học, và các thao tác liên quan.
3 Mô Hình Cơ Sở Dữ Liệu: Hệ thống sử dụng một cơ sở dữ liệu đơn giản với các bảng liên quan đến sinh viên, môn học, khoa, lớp học và điểm Các truy vấn SQL giúp thực hiện các thao tác như thêm, sửa, xóa và truy vấn thông tin từ cơ sở dữ liệu.
4 Các Phương Thức Của Lớp: Các phương thức được định nghĩa trong hệ thống để thực hiện các thao tác trên sinh viên và môn học, đảm bảo rằng các thao tác này được thực hiện chính xác và hiệu quả.
Hệ thống quản lý sinh viên hoàn chỉnh với các tính năng cơ bản như quản lý thông tin sinh viên, đăng ký môn học và cập nhật cơ sở dữ liệu Các lớp và phương thức được thiết kế rõ ràng, dễ hiểu và dễ sử dụng, hỗ trợ người dùng trong việc quản lý sinh viên hiệu quả Hệ thống còn được tối ưu hóa với các thao tác cơ sở dữ liệu, đảm bảo tính toàn vẹn và nhất quán của dữ liệu.
Phát triển hệ thống
Phát triển các giao diện
Giao diện thêm sinh viên (Add Student)
Cho phép người dùng nhập thông tin sinh viên mới và thêm vào hệ thống.
Các trường nhập liệu: Mã sinh viên, Tên sinh viên, Tuổi.
Nút "Thêm" để thêm sinh viên vào hệ thống.
Bảng hiển thị danh sách sinh viên.
JButton btnAdd = new JButton("Thêm"); btnAdd.addActionListener(e -> {
String name = txtName.getText(); int age = Integer.parseInt(txtAge.getText()); if (id.isEmpty() || name.isEmpty()) {
JOptionPane.showMessageDialog(frame, "Vui lòng điền đầy đủ thông tin."); return;
Student student = new Student(id, name, age); students.add(student); tableModel.addRow(new Object[]{id, name, age});
Giao diện hiển thị sinh viên (Display Student)
Dùng để hiển thị danh sách sinh viên đã được thêm vào hệ thống.
Bảng hiển thị sinh viên với các thông tin: Mã sinh viên, Tên, Tuổi.
To refresh the student list, click the "Update" button The method `showStudentList()` resets the table by setting the row count to zero, effectively clearing the current data It then iterates through the list of students and adds each student's ID, name, and age to the table model.
Giao Diện Sửa Sinh Viên (Edit Student)
Cho phép người dùng sửa thông tin của sinh viên đã có.
Các trường nhập liệu để sửa thông tin sinh viên: Mã sinh viên, Tên, Tuổi.
Nút "Lưu" để lưu thay đổi.
JButton btnEdit = new JButton("Lưu"); btnEdit.addActionListener(e -> { int selectedRow = table.getSelectedRow(); if (selectedRow >= 0) { String id = txtId.getText();
String name = txtName.getText(); int age = Integer.parseInt(txtAge.getText());
Student student = students.get(selectedRow); student.setId(id); student.setName(name); student.setAge(age); tableModel.setValueAt(id, selectedRow, 0); tableModel.setValueAt(name, selectedRow, 1); tableModel.setValueAt(age, selectedRow, 2);
Giao Diện Xóa Sinh Viên (Delete Student)
Cho phép người dùng xóa sinh viên khỏi hệ thống.
Nút "Xóa" để xóa sinh viên đã chọn trong bảng.
The JButton labeled "Delete" allows users to remove a selected student from the table When clicked, it prompts a confirmation dialog asking if the user is sure about the deletion If the user confirms by selecting "Yes," the student is removed from the list and the corresponding row is deleted from the table model.
Giao Diện Thống Kê Tổng Số Sinh Viên (Show Total Students)
Hiển thị tổng số sinh viên trong hệ thống.
Nút "Hiển thị tổng số sinh viên" để hiển thị số lượng sinh viên.
JButton btnShowCount = new JButton("Hiển thị tổng số sinh viên"); btnShowCount.addActionListener(e -> {
JOptionPane.showMessageDialog(frame, "Tổng số sinh viên: " + students.size());
Phát triển các lớp, triển khai các giao diện
The Student class represents a student with attributes such as student ID, name, age, and methods for enrolling and withdrawing from courses It includes a constructor to initialize these properties and an ArrayList to manage the courses the student is enrolled in The class features an enrollCourse method that allows students to add courses to their enrollment list.
} public void dropCourse(String course) { enrolledCourses.remove(course);
} public String getId() { return id;
} public String getName() { return name;
} public int getAge() { return age;
} public ArrayList getEnrolledCourses() { return enrolledCourses;
} public void setId(String id) { this.id = id;
} public void setName(String name) { this.name = name;
} public void setAge(int age) { this.age = age;
The Student Management Application serves as the primary interface for managing student records, allowing users to add, edit, and delete student information It utilizes an ArrayList to store student data, integrates a DefaultTableModel for displaying the information in a JTable, and features a JFrame titled "Student Management" that organizes the layout of the application.
"Tuổi"}, 0); table = new JTable(tableModel);
JScrollPane scrollPane = new JScrollPane(table); frame.add(scrollPane, BorderLayout.CENTER);
Phát triển giao diện người dùng
Giao diện người dùng (GUI) là yếu tố quan trọng giúp người sử dụng tương tác hiệu quả với hệ thống Trong hệ thống quản lý sinh viên, GUI được phát triển bằng Java Swing, mang lại sự đơn giản, dễ sử dụng và trực quan cho người dùng.
Các thành phần chính của giao diện người dùng:
1 Form thêm sinh viên: o Các trường nhập liệu: Mã sinh viên, Tên, Lớp, Điểm trung bình. o Nút "Thêm" để lưu thông tin sinh viên vào cơ sở dữ liệu.
2 Bảng danh sách sinh viên: o Hiển thị toàn bộ danh sách sinh viên, bao gồm các thông tin như mã sinh viên, tên, lớp, và điểm trung bình. o Cho phép tìm kiếm theo mã sinh viên.
3 Các chức năng khác: o Nút "Sửa": Cho phép cập nhật thông tin sinh viên. o Nút "Xóa": Loại bỏ sinh viên khỏi danh sách. o Nút "Tìm kiếm": Hiển thị thông tin chi tiết của một sinh viên dựa trên mã nhập vào.
Hình 2.9 Giao diện chính của hệ thống quản lý sinh viên
Triển khai cơ sở dữ liệu
Tạo cơ sở dữ liệu
CREATE TABLE SinhVien ( id INT AUTO_INCREMENT PRIMARY KEY, maSinhVien VARCHAR(10) NOT NULL UNIQUE, tenSinhVien VARCHAR(50) NOT NULL, lop VARCHAR(20) NOT NULL, diemTrungBinh FLOAT NOT NULL
Kết nối JBDC với MySQL import java.sql.Connection; import java.sql.DriverManager; public class DatabaseConnection { public static Connection connect() { try {
String url = "jdbc:mysql://localhost:3306/quanlysinhvien";
String password = "password"; return DriverManager.getConnection(url, user, password);