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.

235 lines
10 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.Tchengjilzh;
import com.WR.StudentMS.dao.mysql.Tchengjidaoimplzh;
public class TchengjiPanel extends JPanel {
private List<Tchengjilzh> 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<Tchengjilzh> 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<Object>
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存储在第二列
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);
}
}