Giới thiệu đề tài Phần mềm quản lý điểm sinh viên để quản lý thông tin sinh viên và điểm của sinh viên các môn tương ứng.. Cơ sở dữ liệu - Đã biết cách cài đặt và cấu hình SQL - Biết các
Trang 1Mục lục
Chương 1 Tổng quan 2
1.1 Giới thiệu đề tài 2
1.2 Các kiến thức sử dụng trong bài 2
1.2.1 Cơ sở dữ liệu 2
1.2.2 Ngôn ngữ lập trình 2
Chương 2 Phân tích thiết kế 4
2.1 Phân tích và thiết kế hệ thống 4
2.1.1 Phân tích chương trình 4
2.1.2 Thiết kế cơ sở dữ liệu 5
2.2 Xây dựng các chức năng 8
Chương 3 Chương trình phần mềm 9
3.1 Giao diện 9
3.2 Một số đoạn code chính (copy một số đoạn code làm mẫu) 13
Kết luận 21
Trang 2Chương 1 Tổng quan
1.1 Giới thiệu đề tài
Phần mềm quản lý điểm sinh viên để quản lý thông tin sinh viên và điểm của sinh viên các môn tương ứng Giúp cho người quản lý dễ dàng xem và cập nhật điểm của sinh viên theo môn học
1.2 Các kiến thức sử dụng trong bài
1.2.1 Cơ sở dữ liệu
- Đã biết cách cài đặt và cấu hình SQL
- Biết cách tạo bảng và liên kết giữa các bảng trong SQL
- Biết sử dụng các câu lệnh truy vấn căn bản như:
o Select : Để lấy dữ liệu từ cơ sở dữ liệu
o Insert: Để ghi dữ liệu vào cơ sở dữ liệu
o Update: Để cập nhật thông tin một bản ghi trong cơ sở dữ liệu
o Delete: Để xóa một bản ghi trong cơ sở dữ liệu
o Câu lệnh select sử dụng thêm các điều kiện where để lọc dữ liệu
1.2.2 Ngôn ngữ lập trình
- Biết cách sử dụng thư viện để kết nối với SQL Sever
- Biết cách thiết kế giao diện chương trình
- Biết cách khai báo biến, sử dụng các biến và thực hiện được các chức năng như:
o Hiển thị dữ liệu trong cơ sở dữ liệu lên table trong Java
o Thêm dữ liệu từ giao diện vào cơ sở dữ liệu từ code Java
o Cập nhật thông tin của bản ghi trong cơ sở dữ liệu từ code Java
o Xóa một bản ghi trong cơ sở dữ liệu từ code Java
Trang 3Chương 2 Phân tích thiết kế
2.1 Phân tích và thiết kế hệ thống
2.1.1 Phân tích chương trình
Phần mềm quản lý điểm sinh viên gồm các chức năng: (Liệt kê các chức năng trong phần mềm của các em ra nhé)
- Quản lý sinh viên: Quản lý thông tin sinh viên theo lớp và khoa
- Quản lý điểm: Quản lý điểm của các sinh viên theo môn học
- Quản lý lớp học: Quản lý lớp sinh viên
- Quản lý khoa: Quản lý các khoa của trường
- Quản lý người dùng: Quản lý thông tin người dùng hệ thống
Trang 42.1.2 Thiết kế cơ sở dữ liệu
Trang 52.2 Xây dựng các chức năng
dbo.Students: Đại diện cho sinh viên, với các thuộc tính:
StudentID (Khóa chính): Mã định danh duy nhất cho mỗi sinh viên.
FirstName: Tên của sinh viên.
LastName: Họ của sinh viên.
DateOfBirth: Ngày sinh của sinh viên.
Email: Địa chỉ email của sinh viên.
dbo.Courses: Đại diện cho các khóa học, với các thuộc tính:
CourseID (Khóa chính): Mã định danh duy nhất cho mỗi khóa học.
CourseName: Tên của khóa học.
dbo.Enrollments: Đại diện cho việc ghi danh của sinh viên vào các khóa học, với các thuộc tính:
EnrollmentID (Khóa chính): Mã định danh duy nhất cho mỗi lần ghi danh.
StudentID (Khóa ngoại): Liên kết đến dbo.Students để chỉ ra sinh viên trong lần ghi danh.
CourseID (Khóa ngoại): Liên kết đến dbo.Courses để chỉ ra khóa học mà sinh viên ghi danh vào.
EnrollmentDate: Ngày sinh viên ghi danh vào khóa học.
Chương 3 Chương trình phần mềm
3Giao diện chương trình
Trang 7- Giao diện quản lý sinh viên
Trang 8- Giao diện khoá học
Trang 93.2Một số đoạn code chính (copy một số đoạn code làm mẫu)
private void connectToDatabase() {
try {
String url =
"jdbc:sqlserver://localhost:1433;databaseName=quanlysinhvien;user=sa;passwo rd=@Ducquyenbg123;encrypt=true;trustServerCertificate=true;";
connection = DriverManager.getConnection(url);
System.out.println("Kết nối thành công đến cơ sở dữ liệu.");
} catch (SQLException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(this, "Không thể kết nối đến cơ sở dữ liệu.");
}
}
private void loadStudents() {
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM Students");
tableModel.setRowCount(0); // Xóa các hàng cũ trong bảng
while (rs.next()) {
int id = rs.getInt("StudentID");
Trang 10String firstName = rs.getString("FirstName");
String lastName = rs.getString("LastName");
Date dateOfBirth = rs.getDate("DateOfBirth");
String email = rs.getString("Email");
tableModel.addRow(new Object[]{id, firstName, lastName, dateOfBirth, email});
}
} catch (SQLException e) {
e.printStackTrace();
}
}
private void loadCourses() {
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM Courses");
courseTableModel.setRowCount(0); // Xóa các hàng cũ trong bảng
while (rs.next()) {
int id = rs.getInt("CourseID");
String courseName = rs.getString("CourseName");
Trang 11courseTableModel.addRow(new Object[]{id, courseName});
}
} catch (SQLException e) {
e.printStackTrace();
}
}
private void loadEnrolledStudents(int courseId) {
try {
enrolledStudentsModel.setRowCount(0); // Xóa các hàng cũ trong bảng String query = "SELECT s.StudentID, s.FirstName, s.LastName, s.Email
" +
"FROM Students s " +
"JOIN Enrollments e ON s.StudentID = e.StudentID " +
"WHERE e.CourseID = ?";
PreparedStatement pstmt = connection.prepareStatement(query);
pstmt.setInt(1, courseId);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
int id = rs.getInt("StudentID");
String firstName = rs.getString("FirstName");
String lastName = rs.getString("LastName");
Trang 12String email = rs.getString("Email");
enrolledStudentsModel.addRow(new Object[]{id, firstName, lastName, email});
}
} catch (SQLException e) {
e.printStackTrace();
}
}
private class AddStudentListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String firstName = txtFirstName.getText();
String lastName = txtLastName.getText();
String dateOfBirth = txtDateOfBirth.getText();
String email = txtEmail.getText();
try {
String query = "INSERT INTO Students (FirstName, LastName, DateOfBirth, Email) VALUES (?, ?, ?, ?)";
PreparedStatement pstmt = connection.prepareStatement(query);
pstmt.setString(1, firstName);
Trang 13pstmt.setString(2, lastName);
pstmt.setDate(3, Date.valueOf(dateOfBirth)); // Đảm bảo định dạng YYYY-MM-DD
pstmt.setString(4, email);
pstmt.executeUpdate();
JOptionPane.showMessageDialog(StudentManagementApp.this,
"Sinh viên đã được thêm thành công.");
loadStudents(); // Tải lại danh sách sinh viên
clearStudentInputFields();
} catch (SQLException ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(StudentManagementApp.this, "Lỗi khi thêm sinh viên.");
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(StudentManagementApp.this,
"Ngày sinh không hợp lệ.");
}
}
}
private class UpdateStudentListener implements ActionListener {
Trang 14@Override
public void actionPerformed(ActionEvent e) {
if (selectedStudentId == -1) {
JOptionPane.showMessageDialog(StudentManagementApp.this, "Vui lòng chọn một sinh viên để sửa.");
return;
}
String firstName = txtFirstName.getText();
String lastName = txtLastName.getText();
String dateOfBirth = txtDateOfBirth.getText();
String email = txtEmail.getText();
try {
String query = "UPDATE Students SET FirstName = ?, LastName
= ?, DateOfBirth = ?, Email = ? WHERE StudentID = ?";
PreparedStatement pstmt = connection.prepareStatement(query);
pstmt.setString(1, firstName);
pstmt.setString(2, lastName);
pstmt.setDate(3, Date.valueOf(dateOfBirth)); // Đảm bảo định dạng YYYY-MM-DD
pstmt.setString(4, email);
pstmt.setInt(5, selectedStudentId);
Trang 15pstmt.executeUpdate();
JOptionPane.showMessageDialog(StudentManagementApp.this,
"Sinh viên đã được sửa thành công.");
loadStudents(); // Tải lại danh sách sinh viên
clearStudentInputFields();
} catch (SQLException ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(StudentManagementApp.this, "Lỗi khi sửa sinh viên.");
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(StudentManagementApp.this,
"Ngày sinh không hợp lệ.");
}
}
}
private class DeleteStudentListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (selectedStudentId == -1) {
Trang 16JOptionPane.showMessageDialog(StudentManagementApp.this, "Vui lòng chọn một sinh viên để xóa.");
return;
}
try {
String query = "DELETE FROM Students WHERE StudentID = ?"; PreparedStatement pstmt = connection.prepareStatement(query);
pstmt.setInt(1, selectedStudentId);
pstmt.executeUpdate();
JOptionPane.showMessageDialog(StudentManagementApp.this,
"Sinh viên đã được xóa thành công.");
loadStudents(); // Tải lại danh sách sinh viên
clearStudentInputFields();
} catch (SQLException ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(StudentManagementApp.this, "Lỗi khi xóa sinh viên.");
}
}
}
Trang 17private class AddCourseListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String courseName = txtCourseName.getText();
try {
String query = "INSERT INTO Courses (CourseName) VALUES (?)"; PreparedStatement pstmt = connection.prepareStatement(query);
pstmt.setString(1, courseName);
pstmt.executeUpdate();
JOptionPane.showMessageDialog(StudentManagementApp.this,
"Khóa học đã được thêm thành công.");
loadCourses(); // Tải lại danh sách khóa học
clearCourseInputFields();
} catch (SQLException ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(StudentManagementApp.this, "Lỗi khi thêm khóa học.");
}
}
}
Trang 18private class DeleteCourseListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (selectedCourseId == -1) {
JOptionPane.showMessageDialog(StudentManagementApp.this, "Vui lòng chọn một khóa học để xóa.");
return;
}
try {
String query = "DELETE FROM Courses WHERE CourseID = ?";
PreparedStatement pstmt = connection.prepareStatement(query);
pstmt.setInt(1, selectedCourseId);
pstmt.executeUpdate();
JOptionPane.showMessageDialog(StudentManagementApp.this,
"Khóa học đã được xóa thành công.");
loadCourses(); // Tải lại danh sách khóa học
clearCourseInputFields();
} catch (SQLException ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(StudentManagementApp.this, "Lỗi khi xóa khóa học.");
Trang 19}
}
}
Trang 20Kết luận
Trên đây là nội dung đồ án lập trình java với đề tài quản lý điểm sinh viên của
em Do thời gian và trình độ còn hạn chế nên chương trình còn chưa được hoàn thiện Em rất mong nhận được ý kiến đóng góp của thầy cô để em có thể hiểu hơn
và hoàn thiện hơn cho các đồ án sau
Em xin trân thành cảm ơn thầy cô !