import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
public class StudentManagementSystem extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
private JLabel nameLabel, ageLabel, genderLabel, phoneLabel, emailLabel;
private JTextField nameField, ageField, genderField, phoneField, emailField;
private JButton addButton, updateButton, deleteButton, clearButton, refreshButton;
private JPanel inputPanel, buttonPanel;
private JScrollPane tableScrollPane;
private JTable table;
private DefaultTableModel tableModel;
private Connection conn;
public StudentManagementSystem() {
nameLabel = new JLabel("Name:");
ageLabel = new JLabel("Age:");
genderLabel = new JLabel("Gender:");
phoneLabel = new JLabel("Phone:");
emailLabel = new JLabel("Email:");
nameField = new JTextField(20);
ageField = new JTextField(20);
genderField = new JTextField(20);
phoneField = new JTextField(20);
emailField = new JTextField(20);
addButton = new JButton("Add");
updateButton = new JButton("Update");
deleteButton = new JButton("Delete");
clearButton = new JButton("Clear");
refreshButton = new JButton("Refresh");
inputPanel = new JPanel();
inputPanel.setLayout(new BorderLayout());
inputPanel.add(nameLabel, BorderLayout.WEST);
inputPanel.add(nameField, BorderLayout.CENTER);
inputPanel.add(ageLabel, BorderLayout.WEST);
inputPanel.add(ageField, BorderLayout.CENTER);
inputPanel.add(genderLabel, BorderLayout.WEST);
inputPanel.add(genderField, BorderLayout.CENTER);
inputPanel.add(phoneLabel, BorderLayout.WEST);
inputPanel.add(phoneField, BorderLayout.CENTER);
inputPanel.add(emailLabel, BorderLayout.WEST);
inputPanel.add(emailField, BorderLayout.CENTER);
buttonPanel = new JPanel();
buttonPanel.add(addButton);
buttonPanel.add(updateButton);
buttonPanel.add(deleteButton);
buttonPanel.add(clearButton);
buttonPanel.add(refreshButton);
tableModel = new DefaultTableModel(new String[]{"ID", "Name", "Age", "Gender", "Phone", "Email"}, 0);
table = new JTable(tableModel);
tableScrollPane = new JScrollPane(table);
this.setLayout(new BorderLayout());
this.add(inputPanel, BorderLayout.NORTH);
this.add(buttonPanel, BorderLayout.CENTER);
this.add(tableScrollPane, BorderLayout.SOUTH);
addButton.addActionListener(this);
updateButton.addActionListener(this);
deleteButton.addActionListener(this);
clearButton.addActionListener(this);
refreshButton.addActionListener(this);
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/student?serverTimezone=UTC&useSSL=false", "root", "password"); // 连接MySQL数据库
loadStudents();
} catch (ClassNotFoundException | SQLException e) {
JOptionPane.showMessageDialog(null, "Database connection failed!\n" + e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
System.exit(-1);
}
this.setBounds(100, 100, 800, 600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == addButton) {
addStudent();
} else if (e.getSource() == updateButton) {
updateStudent();
} else if (e.getSource() == deleteButton) {
deleteStudent();
} else if (e.getSource() == clearButton) {
clearInputFields();
} else if (e.getSource() == refreshButton) {
refreshTable();
}
}
private void loadStudents() throws SQLException {
tableModel.setRowCount(0);
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM students");
ResultSet results = stmt.executeQuery();
while (results.next()) {
int id = results.getInt("id");
String name = results.getString("name");
int age = results.getInt("age");
String gender = results.getString("gender");
String phone = results.getString("phone");
String email = results.getString("email");
tableModel.addRow(new Object[]{id, name, age, gender, phone, email});
}
stmt.close();
}
private void addStudent() {
try {
String name = nameField.getText();
int age = Integer.parseInt(ageField.getText());
String gender = genderField.getText();
String phone = phoneField.getText();
String email = emailField.getText();
PreparedStatement stmt = conn.prepareStatement("INSERT INTO students (name, age, gender, phone, email) VALUES (?, ?, ?, ?, ?)");
stmt.setString(1, name);
stmt.setInt(2, age);
stmt.setString(3, gender);
stmt.setString(4, phone);
stmt.setString(5, email);
stmt.executeUpdate();
stmt.close();
clearInputFields();
refreshTable();
JOptionPane.showMessageDialog(null, "Student added successfully!", "Success", JOptionPane.INFORMATION_MESSAGE);
} catch (NumberFormatException | SQLException e) {
JOptionPane.showMessageDialog(null, "Invalid input!\n" + e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
}
private void updateStudent() {
try {
int selectedRow = table.getSelectedRow();
int id = (int) tableModel.getValueAt(selectedRow, 0);
String name = nameField.getText();
int age = Integer.parseInt(ageField.getText());
String gender = genderField.getText();
String phone = phoneField.getText();
String email = emailField.getText();
PreparedStatement stmt = conn.prepareStatement("UPDATE students SET name=?, age=?, gender=?, phone=?, email=? WHERE id=?");
stmt.setString(1, name);
stmt.setInt(2, age);
stmt.setString(3, gender);
stmt.setString(4, phone);
stmt.setString(5, email);
stmt.setInt(6, id);
stmt.executeUpdate();
stmt.close();
clearInputFields();
refreshTable();
JOptionPane.showMessageDialog(null, "Student updated successfully!", "Success", JOptionPane.INFORMATION_MESSAGE);
} catch (NumberFormatException | SQLException | ArrayIndexOutOfBoundsException e) {
JOptionPane.showMessageDialog(null, "Please select a student from the table to update!\n" + e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
}
private void deleteStudent() {
try {
int selectedRow = table.getSelectedRow();
int id = (int) tableModel.getValueAt(selectedRow, 0);
PreparedStatement stmt = conn.prepareStatement("DELETE FROM students WHERE id=?");
stmt.setInt(1, id);
stmt.executeUpdate();
stmt.close();
clearInputFields();
refreshTable();
JOptionPane.showMessageDialog(null, "Student deleted successfully!", "Success", JOptionPane.INFORMATION_MESSAGE);
} catch (ArrayIndexOutOfBoundsException | SQLException e) {
JOptionPane.showMessageDialog(null, "Please select a student from the table to delete!\n" + e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
}
private void clearInputFields() {
nameField.setText("");
ageField.setText("");
genderField.setText("");
phoneField.setText("");
emailField.setText("");
}
private void refreshTable() {
try {
loadStudents();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Database connection failed!\n" + e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
}
public static void main(String[] args) {
new StudentManagementSystem();
}
}
在这个示例代码中,我们创建了一个包含输入面板、按钮面板和学生信息表格的GUI界面。使用MySQL数据库进行数据存储,可以添加、更新、删除和查询学生信息。点击“Add”按钮会将输入框中的学生信息添加到数据库中,在信息表格中显示出来;点击“Update”按钮可以根据选中的学生更新其信息;点击“Delete”按钮可以根据选中的学生从数据库中删除其信息;点击“Clear”按钮可以清空输入框中的信息;点击“Refresh”按钮可以重新载入学生信息表格。
学生信息管理系统作为一种常见的管理信息化需求,也是企业级Java应用的基础。通过以上示例,我们可以看到如何使用Java语言和相关技术库实现一个简单的学生信息管理系统。