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.JiangchengWR; import com.WR.StudentMS.model.Tchengjilzh; import com.WR.StudentMS.model.ZhuanyeWR; import com.WR.StudentMS.dao.mysql.JiangchengDaoImpWR; public class JiangchengPanel extends JPanel { private List jiangchengList; private JiangchengDaoImpWR jiangchengDao; private JTable table; private DefaultTableModel model; private JTextField searchField; private JButton searchButton; public JiangchengPanel() { super(new BorderLayout()); // 使用BorderLayout布局管理器 jiangchengDao = new JiangchengDaoImpWR(); model = new DefaultTableModel(); initializeUI(); loadJiangchengs(); } 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 -> addJiangcheng()); deleteButton.addActionListener(e -> deleteSelectedJiangcheng()); searchButton.addActionListener(e -> searchJiangcheng()); 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 loadJiangchengs() { try { // 从数据库加载学籍信息并更新表格 jiangchengList = jiangchengDao.findAll(); model.setRowCount(0); // 清空表格 for (JiangchengWR jiangcheng : jiangchengList) { Object[] rowData = new Object[]{ jiangcheng.getId(), jiangcheng.getStu_id(), jiangcheng.getShijian(), jiangcheng.getShuxing(), jiangcheng.getBeizhu(), }; model.addRow(rowData); } } catch (Exception e) { JOptionPane.showMessageDialog(this, "加载奖惩信息失败: " + e.getMessage(), "错误", JOptionPane.ERROR_MESSAGE); } } // 在JiangchengPanel类中 private void addJiangcheng() { // 弹出输入框让用户输入奖惩记录详情 String input = (String) JOptionPane.showInputDialog( this, "请输入奖惩记录的详细信息(格式:id-学籍id-时间-属性-备注):", "添加奖惩记录", JOptionPane.QUESTION_MESSAGE, null, null, null ); if (input != null && !input.trim().isEmpty()) { // 按"-"分割字符串 String[] parts = input.split("-", 5); if (parts.length == 5) { // 确保有5个部分 try { int id = Integer.parseInt(parts[0].trim()); int stuId = Integer.parseInt(parts[1].trim()); String time = parts[2].trim(); String type = parts[3].trim(); String note = parts[4].trim(); JiangchengWR newJiangcheng = new JiangchengWR(); newJiangcheng.setId(id); newJiangcheng.setStu_id(stuId); newJiangcheng.setShijian(time); newJiangcheng.setShuxing(type); newJiangcheng.setBeizhu(note); int result = jiangchengDao.create(newJiangcheng); if (result > 0) { loadJiangchengs(); // 刷新表格 JOptionPane.showMessageDialog(this, "奖惩信息添加成功!"); } else { JOptionPane.showMessageDialog(this, "奖惩信息添加失败,数据库操作未影响任何行。"); } } catch (NumberFormatException e) { JOptionPane.showMessageDialog(this, "输入包含无效的数字格式。"); } catch (Exception e) { JOptionPane.showMessageDialog(this, "发生错误:" + e.getMessage()); } } else { JOptionPane.showMessageDialog(this, "输入格式不正确,需要id-学籍id-时间-属性-备注!"); } } } private void deleteSelectedJiangcheng() { int selectedRow = table.getSelectedRow(); if (selectedRow >= 0) { int id = (int) model.getValueAt(selectedRow, 0); JiangchengWR jiangchengToDelete = new JiangchengWR(); jiangchengToDelete.setId(id); int result = jiangchengDao.remove(jiangchengToDelete); if (result > 0) { model.removeRow(selectedRow); // 从表格中移除 JOptionPane.showMessageDialog(this, "奖惩记录删除成功!"); } else { JOptionPane.showMessageDialog(this, "奖惩记录删除失败!"); } } } private void searchJiangcheng() { String searchQuery = searchField.getText(); if (!searchQuery.trim().isEmpty()) { // 过滤奖惩信息列表,仅根据ID进行搜索 List filteredList = jiangchengList.stream() .filter(jiangcheng -> String.valueOf(jiangcheng.getId()).equals(searchQuery)) // 仅根据ID过滤 .collect(Collectors.toList()); // 更新表格模型以显示过滤后的奖惩信息 model.setRowCount(0); // 清空表格 for (JiangchengWR jiangcheng : filteredList) { Object[] rowData = new Object[]{ jiangcheng.getId(), jiangcheng.getStu_id(), jiangcheng.getShijian(), jiangcheng.getShuxing(), jiangcheng.getBeizhu() }; model.addRow(rowData); } } else { // 如果搜索框为空,则重新加载所有奖惩信息 loadJiangchengs(); } } private void saveChanges() { // 遍历表格中的每一行 for (int i = 0; i < model.getRowCount(); i++) { // 获取表格行数据 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存储在第二列 String time = (String) row.elementAt(2); // 假设时间存储在第三列 String type = (String) row.elementAt(3); // 假设属性存储在第四列 String note = (String) row.elementAt(4); // 假设备注存储在第五列 // 创建JiangchengWR对象 JiangchengWR jiangcheng = new JiangchengWR(); jiangcheng.setId(id); jiangcheng.setStu_id(stuId); // 注意这里现在使用int参数 jiangcheng.setShijian(time); jiangcheng.setShuxing(type); jiangcheng.setBeizhu(note); // 检查id是否已存在,若存在则更新,否则创建新记录 JiangchengWR existingJiangcheng = jiangchengDao.findById(id); if (existingJiangcheng != null) { // 奖惩信息已存在,执行更新操作 int updateResult = jiangchengDao.modify(jiangcheng); if (updateResult <= 0) { // 更新成功 } else { // 更新失败,显示错误消息 JOptionPane.showMessageDialog(this, "更新奖惩信息失败。", "错误", JOptionPane.ERROR_MESSAGE); } } else { // 奖惩信息不存在,执行创建操作 int createResult = jiangchengDao.create(jiangcheng); if (createResult <= 0) { // 创建失败,显示错误消息 JOptionPane.showMessageDialog(this, "创建奖惩信息失败。", "错误", JOptionPane.ERROR_MESSAGE); } } } // 保存完成后,刷新表格数据 loadJiangchengs(); // 显示保存成功的提示信息 JOptionPane.showMessageDialog(this, "所有更改已成功保存。", "成功", JOptionPane.INFORMATION_MESSAGE); } }