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.

232 lines
9.7 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 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<JiangchengWR> 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<JiangchengWR> 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<Object> row = (Vector<Object>) 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);
}
}