You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

313 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package .;
import ..Login;
import ..StudentSystem;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
public class ClassroomManager extends JFrame implements ActionListener {
private JMenuItem reLogin;
private JMenuItem menu;
private JMenuItem exit;
private JMenuItem aboutMe;
String path = "C:\\Users\\23513\\Desktop\\学生成绩管理系统\\";
private static final String URL = "jdbc:mysql://localhost:3306/studentmanager";
private static final String USERNAME = "root";
private static final String PASSWORD = "123456";
private static Connection connection;
private DefaultTableModel tableModel;
private JTable dataTable;
public ClassroomManager() {
initializeDatabase();
initializeMainFrame();
queryRecords(); // Auto-load data from the database upon initializing the main frame
initMenu();
}
// 初始化数据库连接
private void initializeDatabase() {
try {
connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(this, "无法连接到数据库", "错误", JOptionPane.ERROR_MESSAGE);
System.exit(1);
}
}
// 初始化主界面
private void initializeMainFrame() {
setTitle("学生信息管理界面");
setSize(600, 450);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
ImageIcon imageIcon = new ImageIcon( "imge\\Login1.2.png");
JLabel label = new JLabel(imageIcon);
this.getContentPane().add(label, BorderLayout.CENTER);
// 修改图标
Toolkit tk = Toolkit.getDefaultToolkit();
// 获取图片 三种图片格式都可以
java.awt.Image img = tk.getImage( "imge\\成绩录入2.png");
this.setIconImage(img);//详细分析
// 创建表格模型和表格
tableModel = new DefaultTableModel();
tableModel.addColumn("ID");
tableModel.addColumn("姓名");
tableModel.addColumn("年龄");
tableModel.addColumn("性别");
tableModel.addColumn("年级");
tableModel.addColumn("班级");
dataTable = new JTable(tableModel);
// 创建按钮面板
JPanel buttonPanel = new JPanel();
JButton addButton = new JButton("添加数据");
JButton displayButton = new JButton("显示数据");
JButton deleteButton = new JButton("删除数据");
// 将按钮添加到按钮面板
buttonPanel.add(addButton);
buttonPanel.add(displayButton);
buttonPanel.add(deleteButton);
// 添加按钮点击事件监听器
addButton.addActionListener(e -> showAddDataDialog());
displayButton.addActionListener(e -> showDisplayDataDialog());
deleteButton.addActionListener(e -> deleteSelectedRecord());
// 将按钮面板和表格添加到主界面
add(buttonPanel, BorderLayout.NORTH);
add(new JScrollPane(dataTable), BorderLayout.CENTER);
}
// 显示添加数据的对话框
private void showAddDataDialog() {
AddDataDialog addDataDialog = new AddDataDialog(this, "添加数据", true);
addDataDialog.setLocationRelativeTo(this);
addDataDialog.setVisible(true);
}
// 显示显示数据的对话框
private void showDisplayDataDialog() {
queryRecords();
}
// 查询数据库中的记录
private void queryRecords() {
try {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM student");
tableModel.setRowCount(0);
while (resultSet.next()) {
Object[] rowData = {
resultSet.getInt("id"),
resultSet.getString("name"),
resultSet.getInt("age"),
resultSet.getString("sex"),
resultSet.getString("grade"),
resultSet.getString("classroom")
};
tableModel.addRow(rowData);
}
// Close resources
resultSet.close();
statement.close();
} catch (SQLException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(this, "查询数据失败", "错误", JOptionPane.ERROR_MESSAGE);
}
}
// 删除选定的记录
private void deleteSelectedRecord() {
int selectedRow = dataTable.getSelectedRow();
if (selectedRow != -1) {
int idToDelete = (int) dataTable.getValueAt(selectedRow, 0);
try {
String deleteQuery = "DELETE FROM student WHERE id=?";
try (PreparedStatement preparedStatement = connection.prepareStatement(deleteQuery)) {
preparedStatement.setInt(1, idToDelete);
preparedStatement.executeUpdate();
}
queryRecords();
JOptionPane.showMessageDialog(this, "记录删除成功", "成功", JOptionPane.INFORMATION_MESSAGE);
} catch (SQLException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(this, "删除记录失败", "错误", JOptionPane.ERROR_MESSAGE);
}
} else {
JOptionPane.showMessageDialog(this, "请选择要删除的记录", "警告", JOptionPane.WARNING_MESSAGE);
}
}
// 添加数据的对话框
private static class AddDataDialog extends JDialog {
private JTextField idTextField;
private JTextField nameTextField;
private JTextField ageTextField;
private JTextField sexTextField;
private JTextField gradeTextField;
private JTextField classroomTextField;
public AddDataDialog(JFrame parent, String title, boolean modal) {
super(parent, title, modal);
setSize(300, 200);
// 初始化文本框和按钮
idTextField = new JTextField(15);
nameTextField = new JTextField(15);
ageTextField = new JTextField(15);
sexTextField = new JTextField(15);
gradeTextField = new JTextField(15);
classroomTextField = new JTextField(15);
JButton addButton = new JButton("添加");
addButton.addActionListener(e -> addRecord());
// 创建面板,并添加标签、文本框和按钮
JPanel panel = new JPanel(new GridLayout(7, 2, 10, 10));
panel.add(new JLabel("ID:"));
panel.add(idTextField);
panel.add(new JLabel("姓名:"));
panel.add(nameTextField);
panel.add(new JLabel("年龄:"));
panel.add(ageTextField);
panel.add(new JLabel("性别:"));
panel.add(sexTextField);
panel.add(new JLabel("年级:"));
panel.add(gradeTextField);
panel.add(new JLabel("班级:"));
panel.add(classroomTextField);
panel.add(new JLabel()); // 空标签用于调整布局
panel.add(addButton);
// 将面板添加到对话框
add(panel);
}
// 添加记录到数据库
private void addRecord() {
try {
// Get values from text fields
int id = Integer.parseInt(idTextField.getText());
String name = nameTextField.getText();
int age = Integer.parseInt(ageTextField.getText());
String sex = sexTextField.getText();
String grade = gradeTextField.getText(); // Update to getString for non-numeric grade
String classroom = classroomTextField.getText();
// Insert the record into the database
String insertQuery = "INSERT INTO student (id, name, age, sex, grade, classroom) VALUES (?, ?, ?, ?, ?, ?)";
try (PreparedStatement preparedStatement = connection.prepareStatement(insertQuery)) {
preparedStatement.setInt(1, id);
preparedStatement.setString(2, name);
preparedStatement.setInt(3, age);
preparedStatement.setString(4, sex);
preparedStatement.setString(5, grade); // Update to setString for non-numeric grade
preparedStatement.setString(6, classroom);
preparedStatement.executeUpdate();
}
// Update the table model with the new data
((ClassroomManager) getParent()).queryRecords();
// Close the dialog
JOptionPane.showMessageDialog(this, "记录添加成功", "成功", JOptionPane.INFORMATION_MESSAGE);
dispose();
} catch (NumberFormatException | SQLException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(this, "添加记录失败", "错误", JOptionPane.ERROR_MESSAGE);
}
}
}
private void initMenu() {
JMenuBar jMenuBar = new JMenuBar();
JMenu about = new JMenu("关于我");
JMenu function = new JMenu("功能");
aboutMe = new JMenuItem("QQ二维码");
reLogin = new JMenuItem("重新登录");
menu = new JMenuItem("主页");
exit = new JMenuItem("退出");
about.add(aboutMe);
function.add(reLogin);
function.add(menu);
function.add(exit);
aboutMe.addActionListener(this);
reLogin.addActionListener(this);
menu.addActionListener(this);
exit.addActionListener(this);
jMenuBar.add(about);
jMenuBar.add(function);
this.setJMenuBar(jMenuBar);
}
@Override
public void actionPerformed(ActionEvent e) {
// 获取当前被点击的条目对象
Object obj = e.getSource();
if (obj == reLogin) {
dispose();
new Login();
} else if (obj == menu) {
dispose();
new StudentSystem();
} else if (obj == exit) {
System.exit(0);
} else if (obj == aboutMe) {
// 创建一个弹框对象
JDialog jDialog = new JDialog();
Toolkit tk = Toolkit.getDefaultToolkit();
Image img = tk.getImage("imge\\成绩录入2.png");
jDialog.setIconImage(img);
// 创建一个管理图片的容器对象JLabel
JLabel jLabel = new JLabel(new ImageIcon("imge\\about.png"));
// 设置位置和宽高
jLabel.setBounds(0, 0, 300, 380);
// 把图片添加到弹框当中
jDialog.getContentPane().add(jLabel);
// 给弹框设置大小
jDialog.setSize(400, 400);
// 让弹框置顶
jDialog.setAlwaysOnTop(true);
// 让弹框居中
jDialog.setLocationRelativeTo(null);
// 弹框不关闭则无法操作下面的界面
jDialog.setModal(true);
// 让弹框显示出来
jDialog.setVisible(true);
}
}
// 主方法启动Swing应用程序
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
ClassroomManager scoreManager = new ClassroomManager();
scoreManager.setVisible(true);
});
}
}