Ứng dụng quản lý sinh viên là một phân mềm quan trọng trong hệ thông giáo dục, giúp các trường đại học và các tô chức giáo dục khác quan ly thông tin về sinh viên một cách hiệu quả.. Tro
Trang 1BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP HÒ CHÍ MINH
KHOA CNTT
—= [flÏ
A
INDUSTRIAL
J [aI UNIVERSITY
OF HOCHIMINH CITY
BAO CAO Mén: PHAT TRIEN HE THONG TICH HOP
Dé tai: Ung dung quan ly sinh vién tich
hgp RMI va JDBC
Giảng viên hướng dẫn : Đào Bá Phúc
Thành viên
Đào Đình Phúc
Trang 2
Ứng dụng quản lý sinh viên là một phân mềm quan trọng trong hệ thông giáo dục, giúp các trường đại học và các tô chức giáo dục khác quan ly thông tin về sinh viên một cách hiệu quả Trong báo cáo này, chúng tôi trình bày về quá trình thiết kế một ứng dụng quan ly sinh vién tich hop RMI (Remote Method Invocation) va JDBC (Java Database Connectivity)
+ Phân tích yêu cầu:
-_ Các Chức Năng Chính của ứng dụng:
I Thêm Sinh Viên: Thêm sinh viên mới vào hệ thống với thông tin chỉ tiết như tên,
tuôi, địa chỉ và điểm trung bình
2 Xóa Sinh Viên: Xóa sinh viên khỏi hệ thống dựa trên TD của sinh viên
3 Tìm Kiếm Sinh Viên: Tìm kiếm sinh viên trong hệ thống bằng cách nhập ID và
xem thông tin chi tiết của sinh viên
4 Cập Nhật Thông Tin Sinh Viên: Cập nhật thông tin của sinh viên như tên, tuôi, địa
chỉ và điểm trung bình
- Tinh Năng Đặc Biệt:
> Giao Diện Thân Thiện và Dễ Sử Dụng: Giao diện người dùng được thiết kế đơn giản và thân thiện, s1úp người dùng đề dàng tương tác với ứng dụng mà không cân
có kỹ năng đặc biệt
> Tính Linh Hoạt: Ứng dụng có khả năng linh hoạt và mở rộng, cho phép bạn thêm, sửa đôi hoặc xóa thông tin sinh viên một cách dê dàng
> An Toản và Bảo Mật: Dữ liệu sinh viên được lưu trữ một cách an toàn và bảo mật trong cơ sở đữ liệu, đảm bảo tính riêng tư của sinh viên
+ Nền Tang Ly Thuyét:
- RMI (Remote Method Invocation): RMI la m6t co ché trong Java cho phép goi cac phuong thức từ các đối tượng trên một máy chủ từ xa Nó cho phép việc gọi phương thức giống như việc gọi các phương thức trong củng một máy, mặc dù các đối tượng và phương thức đó có thê đang chạy trên các máy khác nhau
- JDBC (Java Database Connectivity): JDBC la mét API trong Java cho phép cac ứng dụng Java truy cập vả thao tac đữ liệu trong cơ sở dữ liệu Nó cung cấp các lớp và giao diện đề kết nồi va thao tác với các loại cơ sở dữ liệu khác nhau
+ Thiết Kế Hệ Thống
Trang 3- Mo Hinh:
¢ H6é thống sẽ bao g6m ba thanh phan chinh: may chu, may khach va co sở dữ liệu
e _ Máy chủ sẽ chứa các phương thức để thực hiện các chức năng quản lý sinh viên và sử dụng RMI để cho phép máy khách gọi các phương thức này từ xa
® - Cơ sở đữ liệu sẽ lưu trữ thông tin về sinh viên và sử dụng JDBC đề kết nối và thao tác với cơ sở đữ liệu
- Giao Diện Người Dùng:
e - Giao diện người dùng sẽ cung cấp các chức năng quản lý cơ bản, bao gồm thêm, xóa, tìm kiếm va cập nhật sinh viên
© Giao diện sẽ pửi các yêu cầu đến máy chủ thông qua RMI để thực hiện các chức năng này
H MÔ HÌNH PHẦN TÍCH, TRIỄN KHAI ỨNG DỤNG
- Biéu do tong quat Use Case:
———-
i: —< cập nhật »)
g —_ „É_ đăng nhập ) `“
_—” e—.——S ,
t«include
người quân lý :
1 + Œ tìm kiếm >)
“= ye xt ff td despa ge
ˆ ~ ~~ l — )
C _thêm sinh viên _ 9 : ~~ Ầ
ot sinh vién
2 ¬
€ xóasinhveien )
Trang 4Modelstudent
Class Diagram cua wng dung quan ly sinh vién
+d: int +name:Sinng
+implement
StudentManagementinterface
+addStudent(Obyect obj) Sinng
+deleteStudent(Odject obj) int +searchStudemtByID(Object obj): int
+updateStudent(Object obj)-int
Controller +proccessStudent( String
command) ‘
Sequence Diagram của chức năng của thêm sinh viên:
sd addstudent J
= a
1 Nhan" AddStudent” :
3 : actionPerformed : 2: addStudert i
4: Connect to MySQL }
Š - addStudent
[ 6 : Success ;
Showmessage † [ 8 : Student added successfully J
seq Connect Reusult J
9 - Print error
1*10 - Showmessage
: Failed to add student Please ty again :
Trang 5
- Sequence Diagram của chức năng của xóa sinh viên:
sd Deletestudent )
1! Nh&in™ DeleteStudent™
: 2: DeleteStudent
3; actionPerformed
ị ị ] 4: Connect to MySQL
5: DeleteStudent
L 6: Success
7 : Showmessaoe : 8: Student deleted successfully H
seq Connect Reusult
—¬
: : delete fail
10 : Showmessage :
11 : Failed to delete student Please try again ;
- Sequence Diagram cua chire nang tim kiém sinh vién:
sd Searchstudent J
1: Enter student ID }
2 : Nhãn" SearchStudent"
3: SearchStudent
]
4: searchStudentByID
5 : Connect to MySQL
— 6: SELECT * FROM Student WHERE id
7: Found
[ 8: ResultSet
9: Show Informatinon Student
seq Connect Reusult 10: Not Found
12 : Not found student :
Trang 6
Sequence Diagram của chức năng cập nhật Sinh viên
sd Searchstuderrt
=a
1: Enter student ID to update
2: SearchStudent
8 : Enter new student name
9: Enter new student age
10 : Enter new student address
11: Enter new student GPA
3 : searchStudentBylD
là Student WHERE id
1) Class Client
@Clientjava x ie ji a
1 package chat2;
2
[lì Serverjava
3*import java.awt.BonderLayout;[ |
12 ; Click “UpdateStudent” : 3 a
13 : updateStudent ;
14: addnewantorstudent
17: Success
[ 18: Showmes<age
| Suudent updated successfully : seq Connect Reusult J ‡—= =
20 : unsuccessful °s=== *
21 : Showmessage : =e
it update unsuccessful : r =
li Studenttjava li StudentManagementlnterface java
19
28 public class Client extends JFrame {
21
private JPanel contentPane;
23 private String correctUsername = “user1234567890";
24 private String correctPassword = "1234567890";
25
26° public Client() {
27 prepareGUI();
28
29
305 public static void main(String[] args) {
31 EventQueue.invokeLater(() -> {
32 Client demo = new Client();
33 demo showJFrameDemo( ) ;
34 ysl
35
37° private void prepareGUI() {
38
39 setTitle("Student manager");
46 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;
41 setSize(400, 300);
42 setLocationRelativeTo(null);
43
44 contentPane = new JPanel();
4s contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
46 setContentPane(contentPane) ;
47 contentPane.setLayout(new BorderLayout(@, @));
Trang 7}
contentPane.add(controlPanel, BorderLayout.CENTER) ;
controlPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 1@));
3JButton loginButton = new JButton("Login");
controlPanel.add(loginButton) ;
loginButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { String username = JOptionPane.showInputDialog(null, “Enter username:");
String password = JOptionPane.showInputDialog(null, "Enter password:");
aif (username.equals(correctUsername) && password.equals(correctPassword)) { showFunctions();
} else { JOptionPane showMessageDialog(null, “Incorrect username or password Please try again.");
} });
private void showFunctions() {
}
Controller controller = new Controller(this) ;
JFrame frame = new JFrame("Actions");
frame setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE) ;
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
panel.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));
frame.add(panel);
JButton btnAddStudent = new JButton("Add Student”);
btnAddStudent.setFont(new Font("Tahoma", Font.PLAIN, 18));
panel.add(btnAddStudent) ; JButton btnDeleteStudent = new JButton("Delete Student");
btnDeleteStudent.setFont(new Font("“Tahoma", Font.PLAIN, 18));
panel.add(btnDeleteStudent ) ;
JButton btnsearchStudentByID = new JButton("Search Students");
btnsearchStudentByID.setFont(new Font("Tahoma", Font.PLAIN, 18));
panel.add(btnsearchStudentByID) ; JButton btnupdateStudent = new JButton("Update Student");
btnupdateStudent.setFont(new Font(”Tahoma”, Font.PLAIN, 18));
panel.add(btnupdateStudent);
btnAddStudent.addActionListener(controller);
btnDeleteStudent addActionListener(controller);
btnsearchStudentByTD addActionListener(controller) ; btnupdateStudent addActionListener(controller);
frame.setVisible(true);
public void showJFrameDemo() {
}
setVisible(true) ;
Sử dụng phương thức main() dé khoi tao giao diện người dùng và hiển thi cửa số đăng nhập
Sử dụng các thành phần giao điện như JFrame, JPanel, và JButton dé tạo giao diện
Sử dụng phương thức addActionListener() để đăng ký sự kiện cho các nút nhắn trên giao dién
Sử dụng JOptionPane đề hiển thị thông báo và nhập dữ liệu từ người dùng
7
Trang 82) Class ConnectionMySql
public class ConnectionToMySql {
› public static java.sql.Connection getConnection()
//Ban dau tao 1 connection = null java.sql.Connection connection = null;
try {
//Đăng ký driver DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
//Tạo đường dẫn như bên dưới (học thuộc jdbc:mysq1://1ocalhost: 3398/yourDa String urlString = "jdbc:mysql://localhost:3300/new_schema";
String userName = "root";
String password = "1234";
//Tao két noi dén database connection = DriverManager.getConnection(urlString, userName, password); return connection;
} catch (Exception e) { // TODO: handle exception e.printStackTrace();
return null;
1
//đóng kết nối
public static void closeConnection(java.sql.Connection connection)
if (connection != null) {
try {
connection.close();
} catch (Exception e) { // TODO: handle exception e.printStackTrace();
1 Sử dung DriverManager.registerDriver() dé đăng ký trình điều khiển
MySQL
2 Sur dung DriverManager.getConnection() dé thiét lập kết nối đến cơ sở dữ
3 Su dung connection.close() dé dong két noi khi khéng cân thiết
Trang 93) Class Controller
e
public void searchStudentByID() {
int id = Integer parseInt(JOptionPane.showInputDialog(this.client, "Enter student ID to search:"));
try {
§ = ) Naming Lookup("rmi: // localhost: 1099/StudentManagementService");
String result = studentMa nt searchStudentByID( id);
if (result != null) {
JOptionPane.showessageDialog(this.client, result);
} else e {
JOptionPane.showMessageDialog(this.client, "Student not found.”);
} catch (Exception e)
@.printStackTrace();
}
public void updateStudent() {
int id = Integer.parseZnt(30ptionPane.showInputDialog(this.client, “Enter student ID to update:"));
String name = JOptionPane.showInputDialog(this.client, “Enter new student name:");
int age = Integer.parseInt(JOptionPane.showInputDialog(this.client, “Enter new student age: "3);
String address = JOptionPane.showInputDialog(this.client, “Enter new student address:"
double gpa = Double.parseDouble(JOptionPane.showInputDialog(this.client, "Enter new student 6PA: "));
try {
studentManagement updateStudent (id, nase, cee, address, gpa);
Pane showessageDialog(this.client, "Student updated successfully.");
} catch (Exception e) {
e.printStackTrace() ;
ace) Naming Lookup("rmi://localhost:1099/StudentManagementService");
import java.awt.event.ActionEvent; |
public class Controller implements ActionListener {
Client client;
public Controller(Client client) {
this.client = client;
@Override
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand() ; switch (command) {
case "Add Student":
addStudent();
break;
case "Delete Student”
deleteStudent();
break;
case "Search Students":
searchStudentByTD() ; break;
case "Update Student”
updateStudent();
break;
}
public void addStudent () {
String name = J0OptionPane.showTnputDiaLog(this.client, ”Enter student name:”);
public void sddstudent() {
ring name = JOptionPane.showInputDialog(this.client, "Enter student name:");
int age = — parseInt(JOptionPane.showInputDialog(this.client, “Enter student age:"));
String address = JOptionPane.showInputDialog(this.client, "Enter student address:");
double gpa = Double.parseDoubLe(JOptionPane.showInputDialog(this.client, “Enter student GPA:"));
try {
face student Interface) Naming lookup("“rmi: //localhost:1699/StudentManagementService"); studentManagement addStudent(name, age, address, gpa);
JOptionPane showMessageDialog(this.client, "Student added successfully.");
} catch (Exception e1) {
el.printStackTrace();
}
public void deleteStudent() {
int id = Integer.parseInt(JOptionPane.showInputDialog(this.client, "Enter student ID to delete:"));
try {
face studentManagement deleteStudent (id);
JOptionPane showMessageDialog(this.client, "Student deleted successfully.");
} catch (Exception e) {
e.printStackTrace();
= ¢ face) Naming Lookup("rmi: //localhost:1099/StudentManagementService");
Trang 101 Sử dụng phương thức actionPerformed() để bắt các sự kiện từ người dùng khi họ tương tác với ø1ao diện
2 Su dung switch-case đề xác định hành động cần thực hiện dựa trên sự kiện người dùng
3 Gọi các phương thức tương ứng để xử lý các hành động như thêm, xóa, tìm kiếm
và cập nhật sinh viên
4) Class ProccessStudents
@Override
public void addStudent(String name, int age, String address, double gpa) throws RemoteException {
try {
Connection connection = ConnectionToMySql.getConnection() ; String sql = “INSERT INTO Student (name, age, address, gpa) VALUES (?, PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, name);
preparedStatement.setInt(2, age);
preparedStatement.setString(3, address);
preparedStatement.setDouble(4, gpa);
preparedStatement.executeUpdate();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
P,P, PYG
@0verride
public void deleteStudent(int id) throws RemoteException {
try {
Connection connection = ConnectionToMySql.getConnection() ; String sql = "DELETE FROM Student WHERE id = ?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, id);
preparedStatement.executeUpdate();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
public String searchStudentByID(int id) throws RemoteException {
StringBuilder result = new StringBuilder();
try {
Connection connection = ConnectionTomysql getconnection();
string sql = "SEL EcT * FROM Student WHERE id
Preparedstatement preparedstatement preparedstatement.setint(1,
Resultset rs
= connection.preparestatement(sql);
id) preparedstatement executequery();
result.append("ID: “).append(rs.getint("id”)).append(", “) append(rs.getstring( name”
sappend(", Age: “).append(rs.getrnt("age"))-append(", Address: ") seetnd Cro esetotrdon(taddress" » .append(", GPA: “).append(rs.getDouble("gpa"))3
} else ( result.append("sStudent with 1D ”
) -append(id).append(" not found.");
connection.close();
} catch (SQLException e) {
rintStackTrace();
return result tostring();
@override
public void updatestudent(int id, string newName, int newAge, String newAddress, double newGpa) throws RemoteException {
ry {
= ConnectionToMySql.getConnection();
“UPDATE "student SET name - ?, age - ?, address - ?, gpa - ? WHERE id - ?"
connection preparestatement(sql) i
Connection connectior
paredStatement.setDouble(4, newGpa) 3
preparedstatement.setInt(5, id);
preparedstatement.executeUpdate();
connection.close();
} catch (SQLException e) {
e.printstackTrace();
+
10