GUImain
package gui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.SwingUtilities;
public class GUImain extends Frame implements ActionListener {
private static final long serialVersionUID = 1L;
private Button[] buttons;
private Label a1, a2;
private GridBagLayout gb;
private GridBagConstraints gbc;
public GUImain() {
GUIUserLogin userLogin = new GUIUserLogin();
userLogin.setLocationRelativeTo(null);
userLogin.setVisible(true);
userLogin.setLoginListener(new LoginListener() {
public void onLoginSuccess() {
loadMainGUI();
}
});
}
private void loadMainGUI() {
a1 = new Label(" 欢迎使用学生成绩管理系统");
a1.setFont(new Font(null, Font.LAYOUT_RIGHT_TO_LEFT, 20));
a2 = new Label(" ");
gb = new GridBagLayout();
setLayout(gb);
gbc = new GridBagConstraints();
createButtons();
setupLayout();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int screenWidth = screenSize.width;
int screenHeight = screenSize.height;
int windowWidth = 400;
int windowHeight = 300;
int x = (screenWidth - windowWidth) / 2;
int y = (screenHeight - windowHeight) / 2;
setLocation(x, y);
setSize(windowWidth, windowHeight);
setVisible(true);
}
private void createButtons() {
buttons = new Button[5];
buttons[0] = new Button("输入信息");
buttons[1] = new Button("查询成绩");
buttons[2] = new Button("输出成绩");
buttons[3] = new Button("编辑或删除学生信息");
buttons[4] = new Button("退出系统");
for (Button button : buttons) {
button.addActionListener(this);
}
}
private void setupLayout() {
gbc.fill = GridBagConstraints.HORIZONTAL;
addComponent(a1, 0, 2, 1, 4);
addComponent(a2, 4, 2, 1, 2);
addComponent(buttons[0], 6, 2, 1, 2);
addComponent(buttons[1], 8, 2, 1, 2);
addComponent(buttons[2], 10, 2, 1, 2);
addComponent(buttons[3], 12, 2, 1, 2);
addComponent(buttons[4], 14, 2, 1, 2);
}
public void actionPerformed(ActionEvent e) {
for (Button button : buttons) {
if (e.getActionCommand().equals(button.getLabel())) {
handleButtonClick(button.getLabel());
break;
}
}
}
private void handleButtonClick(String buttonLabel) {
switch (buttonLabel) {
case "输入信息":
GUIInput inputFrame = new GUIInput();
setupFrame(inputFrame, 600, 400);
break;
case "查询成绩":
GUISeeknum seeknumFrame = new GUISeeknum();
setupFrame(seeknumFrame, 600, 400);
break;
case "输出成绩":
GUIOutnum outnumFrame = new GUIOutnum();
setupFrame(outnumFrame, 700, 500);
break;
case "编辑或删除学生信息":
GUIEditDelete editStudentFrame = new GUIEditDelete();
setupFrame(editStudentFrame, 600, 400);
break;
case "退出系统":
setVisible(false);
dispose();
System.exit(0);
break;
default:
break;
}
}
private void setupFrame(Frame frame, int width, int height) {
frame.setSize(width, height);
frame.setVisible(true);
}
public void addComponent(Component c, int row, int col, int nrow, int ncol) {
gbc.gridx = col;
gbc.gridy = row;
gbc.gridheight = ncol;
gbc.gridwidth = nrow;
gb.setConstraints(c, gbc);
add(c);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
GUImain mainGUI = new GUImain();
mainGUI.setVisible(false);
});
}
}
GUIInput
package gui;
import java.awt.*;
import java.awt.event.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import utils.JDBCUtil;
public class GUIInput extends Frame implements ActionListener {
private static final long serialVersionUID = 1L;
private TextField nameField, genderField, birthdayField, mathField, englishField, javaField, computerField;
private Button submitButton, exitButton;
public GUIInput() {
nameField = new TextField(20);
genderField = new TextField(20);
birthdayField = new TextField(20);
mathField = new TextField(20);
englishField = new TextField(20);
javaField = new TextField(20);
computerField = new TextField(20);
submitButton = new Button("提交");
exitButton = new Button("退出");
setLayout(new GridLayout(9, 2));
add(new Label("姓名"));
add(nameField);
add(new Label("性别"));
add(genderField);
add(new Label("生日"));
add(birthdayField);
add(new Label("应用数学"));
add(mathField);
add(new Label("大学英语"));
add(englishField);
add(new Label("Java程序设计"));
add(javaField);
add(new Label("计算机应用基础"));
add(computerField);
add(submitButton);
add(exitButton);
submitButton.addActionListener(this);
exitButton.addActionListener(this);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
setVisible(false);
dispose();
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == submitButton) {
String name = nameField.getText();
String gender = genderField.getText();
String birthday = birthdayField.getText();
double mathScore = Double.parseDouble(mathField.getText());
double englishScore = Double.parseDouble(englishField.getText());
double javaScore = Double.parseDouble(javaField.getText());
double computerScore = Double.parseDouble(computerField.getText());
double totalScore = mathScore + englishScore + javaScore + computerScore;
double averageScore = totalScore / 4;
try {
saveStudentInfo(name, gender, birthday, mathScore, englishScore, javaScore, computerScore, totalScore, averageScore);
} catch (Exception e1) {
e1.printStackTrace();
}
} else if (e.getSource() == exitButton) {
setVisible(false);
dispose();
}
}
private void saveStudentInfo(String name, String gender, String birthday, double mathScore, double englishScore, double javaScore, double computerScore, double totalScore, double averageScore) throws Exception {
try (JDBCUtil db = new JDBCUtil()) {
Connection conn = db.getConn();
String sql = "INSERT INTO students (name, gender, birthdate, math, English, Java, computer, score, average) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1, name);
pst.setString(2, gender);
pst.setString(3, birthday);
pst.setDouble(4, mathScore);
pst.setDouble(5, englishScore);
pst.setDouble(6, javaScore);
pst.setDouble(7, computerScore);
pst.setDouble(8, totalScore);
pst.setDouble(9, averageScore);
pst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
displayResult();
}
private void displayResult() {
Frame resultFrame = new Frame();
resultFrame.setBounds(300, 300, 350, 100);
resultFrame.setLayout(null);
resultFrame.setVisible(true);
Button returnButton = new Button("返回");
returnButton.setBounds(230, 40, 80, 30);
returnButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
resultFrame.setVisible(false);
resultFrame.dispose();
}
});
Label resultLabel = new Label("添加成功!");
resultLabel.setBounds(140, 20, 100, 40);
resultFrame.add(resultLabel);
resultFrame.add(returnButton);
resultFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
resultFrame.setVisible(false);
resultFrame.dispose();
}
});
}
public static void main(String[] args) {
GUIInput gui = new GUIInput();
gui.setSize(600, 400);
gui.setVisible(true);
}
}
GUIoutnum
package gui;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import utils.JDBCUtil;
public class GUIOutnum extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
private JButton overallRankButton, subjectScoresButton, backButton;
private JPanel chartPanel;
private GridBagConstraints gridBagConstraints;
public GUIOutnum() {
setLayout(new GridBagLayout());
gridBagConstraints = new GridBagConstraints();
overallRankButton = new JButton("总体排名");
overallRankButton.addActionListener(this);
subjectScoresButton = new JButton("科目成绩");
subjectScoresButton.addActionListener(this);
backButton = new JButton("返回");
backButton.addActionListener(this);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
setVisible(false);
dispose();
System.exit(0);
}
});
addComponent(overallRankButton, 0, 2, 1, 2);
addComponent(subjectScoresButton, 2, 2, 1, 2);
addComponent(backButton, 4, 2, 1, 2);
}
public void addComponent(Component component, int row, int col, int nrow, int ncol) {
gridBagConstraints.gridx = col;
gridBagConstraints.gridy = row;
gridBagConstraints.gridheight = ncol;
gridBagConstraints.gridwidth = nrow;
gridBagConstraints.insets = new Insets(5, 5, 5, 5);
gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
add(component, gridBagConstraints);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == overallRankButton) {
JFrame frame = new JFrame();
frame.setBounds(600, 130, 500, 750);
frame.setLayout(new BorderLayout());
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
backButton.setBounds(380, 690, 80, 30);
backButton.addActionListener(this);
try (JDBCUtil db = new JDBCUtil()) {
Connection conn = db.getConn();
int rank = 1;
try {
Statement stmt = conn.createStatement();
String sql = "SELECT name, id, math, English, Java, computer, (math + English + Java + computer) AS total " +
"FROM students ORDER BY total DESC";
ResultSet rs = stmt.executeQuery(sql);
DefaultTableModel tableModel = new DefaultTableModel();
tableModel.addColumn("排名");
tableModel.addColumn("姓名");
tableModel.addColumn("学号");
tableModel.addColumn("数学成绩");
tableModel.addColumn("英语成绩");
tableModel.addColumn("Java成绩");
tableModel.addColumn("计算机成绩");
tableModel.addColumn("总成绩");
tableModel.addColumn("平均成绩");
while (rs.next()) {
double math = rs.getDouble("math");
double english = rs.getDouble("English");
double java = rs.getDouble("Java");
double computer = rs.getDouble("computer");
double total = math + english + java + computer;
double average = total / 4;
String[] row = {String.valueOf(rank), rs.getString("name"), rs.getString("id"),
String.valueOf(math), String.valueOf(english),
String.valueOf(java), String.valueOf(computer),
String.valueOf(total),
String.valueOf(average)};
tableModel.addRow(row);
rank++;
}
JTable table = new JTable(tableModel);
JScrollPane scrollPane = new JScrollPane(table);
frame.add(scrollPane, BorderLayout.CENTER);
frame.add(backButton, BorderLayout.SOUTH);
rs.close();
stmt.close();
conn.close();
} catch (Exception e1) {
e1.printStackTrace();
}
} catch (Exception e1) {
e1.printStackTrace();
}
frame.setVisible(true);
} else if (e.getSource() == subjectScoresButton) {
JFrame frame = new JFrame();
frame.setBounds(300, 300, 450, 450);
frame.setLayout(new BorderLayout());
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
try (JDBCUtil db = new JDBCUtil()) {
Connection conn = db.getConn();
Statement stmt = conn.createStatement();
String query = "SELECT math, English, Java, computer FROM students";
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
dataset.addValue(rs.getDouble("math"), "Math", "Student");
dataset.addValue(rs.getDouble("English"), "English", "Student");
dataset.addValue(rs.getDouble("Java"), "Java", "Student");
dataset.addValue(rs.getDouble("computer"), "Computer", "Student");
}
JFreeChart barChart = ChartFactory.createBarChart("Student's subject grades", "Subject", "Grades", dataset);
chartPanel = new ChartPanel(barChart);
frame.add(chartPanel, BorderLayout.CENTER);
rs.close();
stmt.close();
conn.close();
} catch (Exception ex) {
ex.printStackTrace();
}
frame.setVisible(true);
} else if (e.getSource() == backButton) {
setVisible(false);
dispose();
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
GUIOutnum gui = new GUIOutnum();
gui.setSize(700, 500);
gui.setVisible(true);
});
}
}
GUIseeknum
package gui;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.JOptionPane;
import utils.JDBCUtil;
public class GUISeeknum extends Frame implements ActionListener {
private static final long serialVersionUID = 1L;
private Label a1;
private Button b1, b2, b3;
private TextField c1;
public GUISeeknum() {
a1 = new Label("请输入学生学号或姓名:");
c1 = new TextField(20);
setLayout(new FlowLayout());
add(a1);
add(c1);
b1 = new Button("根据姓名查询");
b2 = new Button("根据学号查询");
b3 = new Button("退出");
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
add(b1);
add(b2);
add(b3);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e) {
String input = c1.getText().trim();
if (e.getSource() == b1) {
if (input.isEmpty()) {
JOptionPane.showMessageDialog(this, "请输入姓名", "提醒", JOptionPane.INFORMATION_MESSAGE);
} else {
try {
searchByName(input);
} catch (Exception e1) {
e1.printStackTrace();
}
}
} else if (e.getSource() == b2) {
if (input.isEmpty()) {
JOptionPane.showMessageDialog(this, "请输入学号", "提醒", JOptionPane.INFORMATION_MESSAGE);
} else {
try {
searchById(input);
} catch (Exception e1) {
e1.printStackTrace();
}
}
} else if (e.getSource() == b3) {
setVisible(false);
dispose();
}
}
private void searchByName(String name) throws Exception {
String sql = "select * from students where name like ?";
try (JDBCUtil db = new JDBCUtil();
Connection conn = db.getConn();
PreparedStatement preparedStatement = conn.prepareStatement(sql)) {
preparedStatement.setString(1, "%" + name + "%");
try (ResultSet rs = preparedStatement.executeQuery()) {
int count = 0;
while (rs.next()) {
showStudentInfo(rs);
count++;
}
if (count == 0) {
JOptionPane.showMessageDialog(this, "没有找到学生信息", "提醒", JOptionPane.INFORMATION_MESSAGE);
}
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
private void searchById(String id) throws Exception {
try {
int studentId = Integer.parseInt(id);
String sql = "select * from students where id=" + studentId;
executeQuery(sql);
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(this, "学号必须是数字", "错误", JOptionPane.ERROR_MESSAGE);
}
}
private void executeQuery(String sql) throws Exception {
try (JDBCUtil db = new JDBCUtil();
Connection conn = db.getConn();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
int count = 0;
while (rs.next()) {
showStudentInfo(rs);
count++;
}
if (count == 0) {
JOptionPane.showMessageDialog(this, "没有找到学生信息", "提醒", JOptionPane.INFORMATION_MESSAGE);
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
private void showStudentInfo(ResultSet rs) throws SQLException {
String studentInfo = "学号: " + rs.getString("id") + "\n姓名: " + rs.getString("name") + "\n性别: "
+ rs.getString("gender") + "\n生日: " + rs.getDate("birthdate") + "\n应用数学: " + rs.getFloat("math")
+ "\n大学英语: " + rs.getFloat("English") + "\nJava程序设计: " + rs.getFloat("Java") + "\n计算机应用基础: "
+ rs.getFloat("computer") + "\n总分: " + rs.getFloat("score") + "\n平均分: " + rs.getFloat("average");
JOptionPane.showMessageDialog(this, studentInfo, "学生信息", JOptionPane.INFORMATION_MESSAGE);
}
public static void main(String[] args) {
GUISeeknum mygb = new GUISeeknum();
mygb.setSize(300, 200);
mygb.setVisible(true);
}
}
userloin
package gui;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class GUIUserLogin extends JFrame {
private static final long serialVersionUID = 1L;
private JTextField usernameField;
private JPasswordField passwordField;
private LoginListener loginListener;
public void setLoginListener(LoginListener loginListener) {
this.loginListener = loginListener;
}
public GUIUserLogin() {
setTitle("用户登录");
setSize(400, 250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
JLabel usernameLabel = new JLabel("用户名:");
usernameField = new JTextField(15);
JLabel passwordLabel = new JLabel("密码:");
passwordField = new JPasswordField(15);
JButton loginButton = new JButton("登录");
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(20, 20, 20, 20);
gbc.gridx = 0;
gbc.gridy = 0;
panel.add(usernameLabel, gbc);
gbc.gridx = 1;
gbc.gridy = 0;
panel.add(usernameField, gbc);
gbc.gridx = 0;
gbc.gridy = 1;
panel.add(passwordLabel, gbc);
gbc.gridx = 1;
gbc.gridy = 1;
panel.add(passwordField, gbc);
gbc.gridwidth = 1;
gbc.gridx = 1;
gbc.gridy = 2;
panel.add(loginButton, gbc);
add(panel);
setLocationRelativeTo(null);
loginButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String username = usernameField.getText();
String password = new String(passwordField.getPassword());
if (username.equals("咕噜咕噜") && password.equals("123")) {
JOptionPane.showMessageDialog(GUIUserLogin.this, "登录成功");
if (loginListener != null) {
loginListener.onLoginSuccess();
}
dispose();
}
else {
JOptionPane.showMessageDialog(GUIUserLogin.this, "账号或密码错误,请重新输入");
usernameField.setText("");
passwordField.setText("");
}
}
});
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
GUIUserLogin loginGUI = new GUIUserLogin();
loginGUI.setVisible(true);
}
});
}
}
interface LoginListener
package gui;
public interface LoginListener {
void onLoginSuccess();
}
generate
package gui;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Random;
public class StudentDataGenerator {
private static final String[] surnameList = {
"赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯", "陈", "褚", "卫", "蒋", "沈", "韩",
"杨", "朱", "秦", "尤", "许", "何", "吕", "施", "张", "孔", "曹", "严", "华", "金", "魏",
"陶", "姜", "戚", "谢", "邹", "喻", "柏", "水", "窦", "章", "云", "苏", "潘", "葛",
"奚", "范", "彭", "郎", "鲁", "韦", "昌", "马", "苗", "凤", "花", "方", "俞", "任", "袁",
"柳", "酆", "鲍", "史", "唐", "费", "廉", "岑", "薛", "雷", "贺", "倪", "汤", "滕", "殷",
"罗", "毕", "郝", "邬", "安", "常", "乐", "于", "时", "傅", "皮", "卞", "齐", "康", "伍",
"余", "元", "卜", "顾", "孟", "平", "黄", "和", "穆", "萧", "尹", "欧阳", "慕容"
};
private static final String[] givenNameList = {
"白", "羽", "斯", "年", "念", "瑀", "云", "飞", "宸", "悦", "华", "坦", "玄", "染", "生", "阳",
"太", "极", "素", "宁", "凝", "礼", "瑞", "简", "钧", "珩", "安", "烟", "雾", "彤", "清", "辞",
"檀", "桃", "莓", "夏", "愿", "华", "焜", "彤", "霭", "桐", "璃", "韵", "婉", "静", "娅", "娴"
};
public static void main(String[] args) {
try {
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "20041015");
String insertSQL = "INSERT INTO students (name, gender, math, English, Java, computer, score, average) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
PreparedStatement pstmt = conn.prepareStatement(insertSQL);
Random random = new Random();
for (int i = 1; i <= 100; i++) {
String name = getRandomChineseName();
String gender = i % 2 == 0 ? "女" : "男";
float mathScore = generateRandomScore(80, 20, random);
float englishScore = generateRandomScore(80, 20, random);
float javaScore = generateRandomScore(80, 20, random);
float computerScore = generateRandomScore(80, 20, random);
pstmt.setString(1, name);
pstmt.setString(2, gender);
pstmt.setFloat(3, mathScore);
pstmt.setFloat(4, englishScore);
pstmt.setFloat(5, javaScore);
pstmt.setFloat(6, computerScore);
pstmt.setFloat(7, (mathScore + englishScore + javaScore + computerScore));
pstmt.setFloat(8, (mathScore + englishScore + javaScore + computerScore) / 4);
pstmt.executeUpdate();
}
pstmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private static float generateRandomScore(float average, float standardDeviation, Random random) {
float score = (float) (random.nextGaussian() * standardDeviation + average);
if (score < 0) {
return 0;
} else if (score > 100) {
return 100;
} else {
return score;
}
}
private static String getRandomChineseName() {
Random random = new Random();
int indexSurname = random.nextInt(surnameList.length);
int indexGivenName = random.nextInt(givenNameList.length);
return surnameList[indexSurname] + givenNameList[indexGivenName];
}
}
editform
package gui;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import utils.JDBCUtil;
public class GUIEditForm extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
private JTextField nameField, genderField, birthdayField, mathField, englishField, javaField, computerField;
private JButton saveButton, backButton;
private int studentId;
public GUIEditForm(int id, String name) {
studentId = id;
setTitle("编辑学生信息");
setLayout(new GridLayout(9, 2));
new JLabel("学号: " + id);
nameField = new JTextField(name);
genderField = new JTextField();
birthdayField = new JTextField();
mathField = new JTextField();
englishField = new JTextField();
javaField = new JTextField();
computerField = new JTextField();
saveButton = new JButton("保存");
backButton = new JButton("返回");
add(new Label("姓名"));
add(nameField);
add(new Label("性别"));
add(genderField);
add(new Label("生日"));
add(birthdayField);
add(new Label("应用数学"));
add(mathField);
add(new Label("大学英语"));
add(englishField);
add(new Label("Java程序设计"));
add(javaField);
add(new Label("计算机应用基础"));
add(computerField);
add(saveButton);
add(backButton);
saveButton.addActionListener(this);
backButton.addActionListener(this);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
setVisible(false);
dispose();
}
});
setLocationRelativeTo(null);
setSize(600, 400);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == saveButton) {
String name = nameField.getText();
String gender = genderField.getText();
String birthday = birthdayField.getText();
double mathScore = Double.parseDouble(mathField.getText());
double englishScore = Double.parseDouble(englishField.getText());
double javaScore = Double.parseDouble(javaField.getText());
double computerScore = Double.parseDouble(computerField.getText());
try (JDBCUtil db = new JDBCUtil()) {
Connection conn = db.getConn();
String sql = "UPDATE students SET name=?, gender=?, birthdate=?, math=?, English=?, Java=?, computer=? WHERE id=?";
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1, name);
pst.setString(2, gender);
pst.setString(3, birthday);
pst.setDouble(4, mathScore);
pst.setDouble(5, englishScore);
pst.setDouble(6, javaScore);
pst.setDouble(7, computerScore);
pst.setInt(8, studentId);
pst.executeUpdate();
JOptionPane.showMessageDialog(null, "学生信息更新成功", "提示", JOptionPane.INFORMATION_MESSAGE);
} catch (Exception ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "保存失败,请检查输入", "错误", JOptionPane.ERROR_MESSAGE);
}
} else if (e.getSource() == backButton) {
setVisible(false);
dispose();
}
}
}
editdelete
package gui;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.table.DefaultTableModel;
import utils.JDBCUtil;
public class GUIEditDelete extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
private JButton editButton, deleteButton, backButton;
private JTable table;
private JScrollPane scrollPane;
public GUIEditDelete() {
setLayout(new BorderLayout());
JPanel buttonPanel = new JPanel();
editButton = new JButton("编辑");
deleteButton = new JButton("删除");
backButton = new JButton("返回");
editButton.addActionListener(this);
deleteButton.addActionListener(this);
backButton.addActionListener(this);
buttonPanel.add(editButton);
buttonPanel.add(deleteButton);
buttonPanel.add(backButton);
String[] columnNames = {"学号", "姓名", "性别", "生日", "数学", "英语", "Java", "计算机", "总成绩", "平均成绩"};
DefaultTableModel tableModel = new DefaultTableModel(columnNames, 0);
table = new JTable(tableModel);
scrollPane = new JScrollPane(table);
add(buttonPanel, BorderLayout.NORTH);
add(scrollPane, BorderLayout.CENTER);
fillTableData();
}
public void fillTableData() {
try (JDBCUtil jdbc = new JDBCUtil()) {
Connection conn = jdbc.getConn();
String sql = "SELECT id, name, gender, birthdate, math, English, Java, computer, (math + English + Java + computer) AS total, (math + English + Java + computer) / 4 AS average FROM students";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
tableModel.setRowCount(0);
while (rs.next()) {
Object[] row = {
rs.getInt("id"),
rs.getString("name"),
rs.getString("gender"),
rs.getString("birthdate"),
rs.getDouble("math"),
rs.getDouble("English"),
rs.getDouble("Java"),
rs.getDouble("computer"),
rs.getDouble("total"),
rs.getDouble("average")
};
tableModel.addRow(row);
}
rs.close();
stmt.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == editButton) {
int selectedRow = table.getSelectedRow();
if (selectedRow == -1) {
JOptionPane.showMessageDialog(null, "请选择一行数据进行编辑", "提示", JOptionPane.INFORMATION_MESSAGE);
} else {
int studentId = (Integer) table.getValueAt(selectedRow, 0);
String studentName = (String) table.getValueAt(selectedRow, 1);
GUIEditForm editForm = new GUIEditForm(studentId, studentName);
editForm.setVisible(true);
this.dispose();
}
} else if (e.getSource() == deleteButton) {
int selectedRow = table.getSelectedRow();
if (selectedRow == -1) {
JOptionPane.showMessageDialog(null, "请选择一行数据进行删除", "提示", JOptionPane.INFORMATION_MESSAGE);
} else {
int studentId = (Integer) table.getValueAt(selectedRow, 0);
deleteStudent(studentId);
}
} else if (e.getSource() == backButton) {
setVisible(false);
dispose();
}
}
public void deleteStudent(int studentId) {
int result = JOptionPane.showConfirmDialog(null, "是否确认删除该学生信息?", "确认", JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.YES_OPTION) {
try (JDBCUtil db = new JDBCUtil()) {
Connection conn = db.getConn();
String sql = "DELETE FROM students WHERE id = ?";
PreparedStatement pst = conn.prepareStatement(sql);
pst.setInt(1, studentId);
pst.executeUpdate();
fillTableData();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
GUIEditDelete gui = new GUIEditDelete();
gui.setSize(800, 400);
gui.setVisible(true);
});
}
}
studentDAO
package dao;
import model.Student;
import java.util.List;
public interface StudentDAO {
List<Student> getAllStudents();
void addStudent(Student student);
void updateStudent(Student student);
void deleteStudent(int id);
}
studentDAOJDBCimpl
package dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import model.Student;
public class StudentDAOJDBCImpl implements StudentDAO {
private Connection conn;
public StudentDAOJDBCImpl(Connection conn) {
this.conn = conn;
}
public List<Student> getAllStudents() {
List<Student> students = new ArrayList<>();
try (PreparedStatement stmt = conn.prepareStatement("SELECT * FROM students");
ResultSet rs = stmt.executeQuery()) {
while (rs.next()) {
Student student = new Student(rs.getInt("id"), rs.getString("name"), rs.getString("gender").charAt(0),
rs.getDate("birthdate"), rs.getDouble("math"), rs.getDouble("English"), rs.getDouble("Java"),
rs.getDouble("computer"), rs.getDouble("score"), rs.getDouble("average"));
students.add(student);
}
} catch (SQLException ex) {
ex.printStackTrace();
}
return students;
}
public void addStudent(Student student) {
try (PreparedStatement stmt = conn.prepareStatement(
"INSERT INTO students (id, name, gender, birthdate, math, English, Java, computer, score, average) "
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")) {
stmt.setInt(1, student.getId());
stmt.setString(2, student.getName());
stmt.setString(3, String.valueOf(student.getGender()));
stmt.setDate(4, student.getBirthdate());
stmt.setDouble(5, student.getMath());
stmt.setDouble(6, student.getEnglish());
stmt.setDouble(7, student.getJava());
stmt.setDouble(8, student.getComputer());
stmt.setDouble(9, student.getScore());
stmt.setDouble(10, student.getAverage());
stmt.executeUpdate();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
public void updateStudent(Student student) {
try (PreparedStatement stmt = conn
.prepareStatement("UPDATE students SET name = ?, gender = ?, birthdate = ?, math = ?, "
+ "English = ?, Java = ?, computer = ?, score = ?, average = ? WHERE id = ?")) {
stmt.setString(1, student.getName());
stmt.setString(2, String.valueOf(student.getGender()));
stmt.setDate(3, student.getBirthdate());
stmt.setDouble(4, student.getMath());
stmt.setDouble(5, student.getEnglish());
stmt.setDouble(6, student.getJava());
stmt.setDouble(7, student.getComputer());
stmt.setDouble(8, student.getScore());
stmt.setDouble(9, student.getAverage());
stmt.setInt(10, student.getId());
stmt.executeUpdate();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
public void deleteStudent(int id) {
try (PreparedStatement stmt = conn.prepareStatement("DELETE FROM students WHERE id = ?")) {
stmt.setInt(1, id);
stmt.executeUpdate();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
student
package model;
import java.sql.Date;
public class Student {
private int id;
private String name;
private char gender;
private Date birthdate;
private double math;
private double english;
private double java;
private double computer;
private double score;
private double average;
public Student(int id, String name, char gender, Date birthdate, double math, double english, double java,
double computer, double score, double average) {
this.id = id;
this.name = name;
this.gender = gender;
this.birthdate = birthdate;
this.math = math;
this.english = english;
this.java = java;
this.computer = computer;
this.score = score;
this.average = average;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public Date getBirthdate() {
return birthdate;
}
public void setBirthdate(Date birthdate) {
this.birthdate = birthdate;
}
public double getMath() {
return math;
}
public void setMath(double math) {
this.math = math;
}
public double getEnglish() {
return english;
}
public void setEnglish(double english) {
this.english = english;
}
public double getJava() {
return java;
}
public void setJava(double java) {
this.java = java;
}
public double getComputer() {
return computer;
}
public void setComputer(double computer) {
this.computer = computer;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public double getAverage() {
return average;
}
public void setAverage(double average) {
this.average = average;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", gender=" + gender + ", birthdate=" + birthdate + ", math="
+ math + ", english=" + english + ", java=" + java + ", computer=" + computer + ", score=" + score
+ ", average=" + average + "]";
}
}
JDBCutils
package utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JDBCUtil implements AutoCloseable {
private Connection conn;
public JDBCUtil() {
try {
String url = "jdbc:mysql://localhost:3306/test";
String username = "root";
String password = "20041015";
conn = DriverManager.getConnection(url, username, password);
} catch (SQLException ex) {
ex.printStackTrace();
}
}
public Connection getConn() {
return conn;
}
@Override
public void close() throws Exception {
if (conn != null && !conn.isClosed()) {
conn.close();
}
}
}