package com.WR.StudentMS.view; import javax.swing.*; import javax.swing.table.DefaultTableModel; import java.awt.*; import java.util.List; import java.util.Vector; import java.util.stream.Collectors; import com.WR.StudentMS.model.Tchengjilzh; import com.WR.StudentMS.dao.mysql.Tchengjidaoimplzh; public class TchengjiPanel extends JPanel { private List tchengjiList; private Tchengjidaoimplzh tchengjiDao; private JTable table; private DefaultTableModel model; private JTextField searchField; private JButton searchButton; public TchengjiPanel() { super(new BorderLayout()); // 使用BorderLayout布局管理器 tchengjiDao = new Tchengjidaoimplzh(); model = new DefaultTableModel(); initializeUI(); loadTchengjiRecords(); } private void initializeUI() { // 定义列名 String[] columnNames = {"排名", "学号ID", "课程ID", "成绩", "学年", "学生学号", "课程名称"}; model.setColumnIdentifiers(columnNames); table = new JTable(model); // 添加表格到滚动面板 JScrollPane scrollPane = new JScrollPane(table); add(scrollPane, BorderLayout.CENTER); // 创建按钮面板 JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new FlowLayout()); // 添加按钮 JButton addButton = new JButton("添加成绩记录"); JButton deleteButton = new JButton("删除选中的成绩记录"); JButton saveButton = new JButton("保存更改"); // 创建搜索框和搜索按钮 searchField = new JTextField(); searchField.setPreferredSize(new Dimension(200, searchField.getPreferredSize().height)); searchButton = new JButton("ID查询"); // 为按钮添加事件监听器 addButton.addActionListener(e -> addTchengjiRecord()); deleteButton.addActionListener(e -> deleteSelectedTchengjiRecord()); searchButton.addActionListener(e -> searchTchengji()); saveButton.addActionListener(e -> saveChanges()); // 将按钮添加到面板 buttonPanel.add(addButton); buttonPanel.add(deleteButton); buttonPanel.add(searchField); buttonPanel.add(searchButton); // 添加搜索按钮到面板 buttonPanel.add(saveButton); // 将按钮面板添加到底部 add(buttonPanel, BorderLayout.SOUTH); } private void loadTchengjiRecords() { // 从数据库加载成绩记录数据并更新表格 tchengjiList = tchengjiDao.findAll(); model.setRowCount(0); // 清空表格 for (Tchengjilzh record : tchengjiList) { Object[] rowData = new Object[]{ record.getId(), record.getStu_id(), record.getKecheng_id(), record.getChengji(), record.getXuenian(), record.getStu_xuehao(), record.getKecheng_name() }; model.addRow(rowData); } } private void addTchengjiRecord() { // 弹出对话框让用户输入成绩记录信息 String input = (String) JOptionPane.showInputDialog( this, "请输入成绩记录信息(格式:排名-学号ID-课程ID-成绩-学年-学生学号-课程名称):", "添加成绩记录", JOptionPane.QUESTION_MESSAGE, null, null, null ); if (input != null && !input.trim().isEmpty()) { String[] parts = input.split("-", 7); // 按"-"分割字符串 if (parts.length >= 7) { Tchengjilzh newRecord = new Tchengjilzh(); newRecord.setId(Integer.parseInt(parts[0].trim())); newRecord.setStu_id(Integer.parseInt(parts[1].trim())); newRecord.setKecheng_id(Integer.parseInt(parts[2].trim())); newRecord.setChengji(Integer.parseInt(parts[3].trim())); newRecord.setXuenian(parts[4].trim()); newRecord.setStu_xuehao(parts[5].trim()); newRecord.setKecheng_name(parts[6].trim()); int result = tchengjiDao.create(newRecord); if (result > 0) { Object[] rowData = new Object[]{ newRecord.getId(), newRecord.getStu_id(), newRecord.getKecheng_id(), newRecord.getChengji(), newRecord.getXuenian(), newRecord.getStu_xuehao(), newRecord.getKecheng_name() }; model.addRow(rowData); // 添加到表格 JOptionPane.showMessageDialog(this, "成绩记录添加成功!"); } else { JOptionPane.showMessageDialog(this, "成绩记录添加失败!"); } } else { JOptionPane.showMessageDialog(this, "输入格式不正确,需要排名-学号ID-课程ID-成绩-学年-学生学号-课程名称!"); } } } private void deleteSelectedTchengjiRecord() { int selectedRow = table.getSelectedRow(); if (selectedRow >= 0) { int id = (int) model.getValueAt(selectedRow, 0); Tchengjilzh recordToDelete = new Tchengjilzh(); recordToDelete.setId(id); int result = tchengjiDao.remove(recordToDelete); if (result > 0) { model.removeRow(selectedRow); // 从表格中移除 JOptionPane.showMessageDialog(this, "成绩记录删除成功!"); } else { JOptionPane.showMessageDialog(this, "成绩记录删除失败!"); } } } private void searchTchengji() { String searchQuery = searchField.getText(); if (!searchQuery.trim().isEmpty()) { // 过滤成绩记录列表,仅根据班级ID进行搜索 List filteredList = tchengjiList.stream() .filter(record -> String.valueOf(record.getId()).equals(searchQuery)) // 仅根据班级ID过滤 .collect(Collectors.toList()); // 更新表格模型以显示过滤后的成绩记录 model.setRowCount(0); // 清空表格 for (Tchengjilzh record : filteredList) { Object[] rowData = new Object[]{ record.getId(), record.getStu_id(), record.getKecheng_id(), record.getChengji(), record.getXuenian(), record.getStu_xuehao(), record.getKecheng_name() }; model.addRow(rowData); } } else { // 如果搜索框为空,则重新加载所有成绩记录 loadTchengjiRecords(); } } private void saveChanges() { // 遍历表格中的每一行 for (int i = 0; i < model.getRowCount(); i++) { // 从表格模型获取第 i 行的 Vector Vector row = (Vector) model.getDataVector().elementAt(i); // 从 Vector 中获取每个字段的值 int id = Integer.parseInt(row.elementAt(0).toString()); // 假设ID存储在第一列 int stuId = Integer.parseInt(row.elementAt(1).toString()); // 学号ID存储在第二列 int kechengId = Integer.parseInt(row.elementAt(2).toString()); // 课程ID存储在第三列 int chengji = Integer.parseInt(row.elementAt(3).toString()); // 成绩存储在第四列 String xuenian = (String) row.elementAt(4); // 学年存储在第五列 String stuxuehao = (String) row.elementAt(5); // 学生学号存储在第六列 String kechengName = (String) row.elementAt(6); // 课程名称存储在第七列 // 创建Tchengjilzh对象 Tchengjilzh tchengji = new Tchengjilzh(); tchengji.setId(id); tchengji.setStu_id(stuId); tchengji.setKecheng_id(kechengId); tchengji.setChengji(chengji); tchengji.setXuenian(xuenian); tchengji.setStu_xuehao(stuxuehao); tchengji.setKecheng_name(kechengName); // 检查ID是否已存在,若存在则更新,否则创建新记录 Tchengjilzh existingRecord = tchengjiDao.findById(String.valueOf(id)); if (existingRecord != null) { // 记录已存在,执行更新操作 int updateResult = tchengjiDao.modify(tchengji); if (updateResult > 0) { JOptionPane.showMessageDialog(this, "更新成绩记录成功。", "正确", JOptionPane.INFORMATION_MESSAGE); // 更新成功 } else { // 更新失败,提示错误信息 JOptionPane.showMessageDialog(this, "更新成绩记录失败。", "错误", JOptionPane.ERROR_MESSAGE); } } else { // 记录不存在,执行创建操作 int createResult = tchengjiDao.create(tchengji); if (createResult > 0) { // 创建成功 } else { // 创建失败,提示错误信息 JOptionPane.showMessageDialog(this, "创建成绩记录失败。", "错误", JOptionPane.ERROR_MESSAGE); } } } // 保存完成后,刷新表格数据 loadTchengjiRecords(); // 显示保存成功的提示信息 JOptionPane.showMessageDialog(this, "所有更改已成功保存。", "成功", JOptionPane.INFORMATION_MESSAGE); } }