文章目录
一、选题与前期调查
1. 选题
2. 前期调查
主要使用gpt进行选题研究。
参考了其他人已完成的系统:
- https://blog.csdn.net/weixin_63374437/article/details/128518646
- https://blog.csdn.net/qq_61827376/article/details/124470583
- https://blog.csdn.net/weixin_43887148/article/details/116887706
二、人员分工
分工 | 姓名 | 任务 |
---|---|---|
组长 | 黄羽悦 | GUIEditDelete类,GUIEditForm类,GUIOutnum类,GUISeeknum类,StudentDataGenerator 类,GUIUserLogin类,前期调查和功能设计,博客编写 |
组员 | 庄雨宸 | JDBCUtil类,Student类,GUIInput类,编码规范设计 |
组员 | 孙思雨 | StudentDAOJDBCImpl类,StudentDAOl类,GUImain类,前期调查和功能设计 |
三、项目描述
1. 项目简介
该项目是一款学生成绩管理系统,用于学校老师查询、输入、修改学生的成绩信息。
2. 项目采用技术
- GUI图形界面
- 数据库存储
- 设计模式
- git代码管理
3.功能需求分析:
- 用户登录
- 输入学生信息
- 查询学生信息
- 姓名匹配(模糊匹配)
- 学号匹配
- 输出统计信息
- 编辑和删除学生
4.项目亮点:
- 支持对学生成绩画出柱状图
- 支持随机生成10w个学生
- 界面交互设计细腻,操作方便。
- 数据采用面向对象设计,扩展性强。
- 采用DAO模式设计,结构清晰。
- 功能完备,实现了学生成绩管理的主要功能需求。
5.系统细节
- 系统目录:
系统中包含以下主要对象:
-
GUImain:
- 主界面类,系统主界面,负责加载和显示其他各个界面
- 继承自Frame类,实现ActionListener接口。
- 功能:主界面各组件及处理按钮点击事件等。
-
GUIUserLogin:
- 用户登录界面类,进行用户名密码认证。
- 继承自JFrame类。
- 功能:包含用户名、密码文本框及登录按钮,处理登录事件。
-
LoginListener:
- 登录监听器接口,定义登录成功事件回调方法。
-
GUIInput:
- 输入学生信息界面类,负责输入学生信息。
- 继承自Frame类,实现ActionListener接口。
- 功能:包含文本框及按钮,处理输入及提交学生信息操作。
-
GUISeeknum:
- 查询学生信息界面类,支持按姓名或学号查询。
- 继承自Frame类,实现ActionListener接口。
- 功能:包含查询条件输入框及按钮,处理姓名/学号查询操作。
-
GUIOutnum:
- 输出学生信息界面类,显示查询结果并生成表格。
- 继承自JFrame类,实现ActionListener接口。
- 功能:包含总排名、科目成绩、生成报表按钮,处理各操作。
-
GUIEditDelete:
- 编辑/删除界面类,支持修改和删除学生记录。
- 继承自JFrame类,实现ActionListener接口。
- 包含表格、编辑、删除按钮,处理编辑删除操作。
-
GUIEditForm:
- 编辑界面类,具体进行编辑功能。
- 继承自JFrame类,实现ActionListener接口。
- 功能:包含文本框及按钮,处理编辑操作。
-
JDBCUtil:
- 数据库连接工具类,负责数据库的连接、查询和更新等工作
-
StudentDAOJDBCImpl:
- 实现了StudentDAO接口的类,用于实现对学生信息的数据库操作。
-
Student:
- 学生类,包含学生的各项属性和对应的getter和setter方法。
这些类主要使用继承、接口和委托接管界面和业务逻辑的职责。不同界面类负责对应的界面展现和事件响应。JDBCUtil负责数据层操作。整体采用MVC模式进行分层设计。
各界面类主要属性包括UI组件,方法主要是初始化界面、注册监听器和处理相关事件。JDBCUtil封装了数据库连接和操作方法。
四、功能运行结果展示
-
用户登录,有验证操作
-
系统主界面
-
输入信息
-
查询信息
按姓名查询(支持模糊匹配)以表格方式展示
按学号查询
5.输出成绩总体排名
6.成绩柱状图
7.编辑学生信息
5. 删除学生信息
6. 生成10w个学生
五、关键代码
数据库建表
CREATE TABLE students (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
gender CHAR(1) NOT NULL,
birthdate DATE,
math FLOAT(5,2),
English FLOAT(5,2),
Java FLOAT(5,2),
computer FLOAT(5,2),
score FLOAT(5,2),
average FLOAT(5,2),
PRIMARY KEY (id)
);
代码:
- 输入信息
public void actionPerformed(ActionEvent e) { // 实现 ActionListener 接口的方法
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()) { // 使用 try-with-resources 语句创建 JDBCUtil 实例
Connection conn = db.getConn(); // 获取数据库连接
String sql = "INSERT INTO students (name, gender, birthdate, math, English, Java, computer, score, average) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"; // 定义插入学生信息的 SQL 语句
PreparedStatement pst = conn.prepareStatement(sql); // 创建 PreparedStatement 对象
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 class GUIEditDelete extends JFrame implements ActionListener { // 声明 GUIEditDelete 类,继承自 JFrame 类并实现 ActionListener 接口
private static final long serialVersionUID = 1L; // 声明一个私有静态常量 serialVersionUID
private JButton editButton, deleteButton, backButton; // 声明三个按钮变量
private JTable table; // 声明一个表格变量
private JScrollPane scrollPane; // 声明一个滚动面板变量
public GUIEditDelete() { // 声明类的构造函数
setLayout(new BorderLayout()); // 设置布局为 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(); // 调用 fillTableData 方法从数据库中获取数据并填充到表格中
}
public void fillTableData() { // 声明 fillTableData 方法,用于填充表格数据
try (JDBCUtil jdbc = new JDBCUtil()) { // 使用 try-with-resources 语句创建 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"; // 定义 SQL 查询语句
Statement stmt = conn.createStatement(); // 创建 Statement 对象
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(); // 关闭 Statement
} catch (Exception e) { // 捕获异常
e.printStackTrace(); // 打印异常信息
}
}
public void actionPerformed(ActionEvent e) { // 实现 ActionListener 接口的方法
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); // 调用 deleteStudent 方法删除学生信息
}
} else if (e.getSource() == backButton) { // 当点击返回按钮时
setVisible(false); // 隐藏当前窗口
dispose(); // 释放当前窗口资源
}
}
public void deleteStudent(int studentId) { // 声明 deleteStudent 方法,用于删除学生信息
int result = JOptionPane.showConfirmDialog(null, "是否确认删除该学生信息?", "确认", JOptionPane.YES_NO_OPTION); // 显示确认对话框
if (result == JOptionPane.YES_OPTION) { // 如果确认删除
try (JDBCUtil db = new JDBCUtil()) { // 使用 try-with-resources 语句创建 JDBCUtil 实例
Connection conn = db.getConn(); // 获取数据库连接
String sql = "DELETE FROM students WHERE id = ?"; // 定义 SQL 删除语句
PreparedStatement pst = conn.prepareStatement(sql); // 创建 PreparedStatement 对象
pst.setInt(1, studentId); // 设置参数
pst.executeUpdate(); // 执行删除操作
fillTableData(); // 删除后刷新表格数据
} catch (Exception e) { // 捕获异常
e.printStackTrace(); // 打印异常信息
}
}
}
- 展示总体排名和柱状图
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()) { // 使用 try-with-resources 语句创建 JDBCUtil 实例
Connection conn = db.getConn(); // 获取数据库连接
int rank = 1; // 初始化排名为1
try {
Statement stmt = conn.createStatement(); // 创建 Statement 对象
String sql = "SELECT name, id, math, English, Java, computer, (math + English + Java + computer) AS total " +
"FROM students ORDER BY total DESC"; // 定义查询总体排名的 SQL 语句
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"); // 获取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++; // 排名加1
}
// 创建表格并添加到滚动面板中
JTable table = new JTable(tableModel); // 创建表格
JScrollPane scrollPane = new JScrollPane(table); // 创建滚动面板
frame.add(scrollPane, BorderLayout.CENTER); // 添加到窗口中
frame.add(backButton, BorderLayout.SOUTH); // 添加返回按钮到窗口底部
rs.close(); // 关闭结果集
stmt.close(); // 关闭 Statement
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()) { // 使用 try-with-resources 语句创建 JDBCUtil 实例
Connection conn = db.getConn(); // 获取数据库连接
Statement stmt = conn.createStatement(); // 创建 Statement 对象
String query = "SELECT math, English, Java, computer FROM students"; // 定义查询学生各科目成绩的 SQL 语句
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(); // 关闭 Statement
conn.close(); // 关闭连接
} catch (Exception ex) {
ex.printStackTrace(); // 打印异常信息
}
frame.setVisible(true); // 显示窗口
} else if (e.getSource() == backButton) { // 当点击返回按钮时
setVisible(false); // 隐藏窗口
dispose(); // 释放资源
}
}
- 用户登录
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 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 ?"; // 使用占位符的 SQL 语句
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; // 构造查询的 SQL 语句
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); // 显示消息对话框
}
六、使用git管理代码
仓库地址:https://gitee.com/wuxigoulu/java7
遇到的困难
- GUI界面中文显示不出来
解决方法:在要运行的代码上右键 Run As --> Run Configurations。在 Arguments --> VM arguments: 中增加: -Dfile.encoding=gbk