Java实现学生管理系统详解流程
一、系统需求分析
1.1 系统功能需求
- 添加学生信息
- 删除学生信息
- 修改学生信息
- 查询学生信息
- 显示所有学生信息
1.2 系统性能需求
- 界面友好,操作简单明了
- 对学生信息进行持久化存储,确保数据不会丢失
- 查询、添加、删除、修改操作均要快速、正确
二、系统设计
2.1 数据库设计
使用MySQL数据库存储学生信息,设计学生表student,表结构如下:
create table student(
id int primary key auto_increment,
name varchar(20),
gender varchar(20),
age int,
major varchar(20)
);
2.2 界面设计
使用Java GUI开发,设计主界面和各个子界面,如添加学生信息、查询学生信息、修改学生信息等界面,并添加事件响应函数。
2.3 功能模块设计
- 添加学生信息:收集学生基本信息并插入数据库表中
- 删除学生信息:根据学号从数据库表中删除该学生信息
- 修改学生信息:根据学号从数据库表中更新该学生信息
- 查询学生信息:根据学号或关键字查询学生信息
- 显示所有学生信息:从数据库中读取所有学生信息并显示在界面上
三、系统实现
使用Java语言实现,在JDK8的环境下进行开发,借助Java GUI库Swing进行窗口设计,使用MySQL数据库进行数据存储。
3.1 项目结构
在项目目录下分别创建src、bin和lib三个目录,其中:
- src目录用于存放Java源代码
- bin目录用于存放编译后的Java类文件
- lib目录用于存放MySQL的Java驱动jar包
3.2 源代码实现
3.2.1 添加学生信息示例
在主界面上添加一个‘添加学生’的按钮,并为该按钮添加事件响应函数,当用户点击该按钮时,弹出添加学生信息的界面。
public void actionPerformed(ActionEvent e) {
if (e.getSource() == addButton) {
AddStudentFrame addFrame = new AddStudentFrame();
addFrame.setVisible(true);
addFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}
AddStudentFrame类代码如下:
public class AddStudentFrame extends JFrame implements ActionListener {
JLabel nameLabel = new JLabel("姓名");
JLabel genderLabel = new JLabel("性别");
JLabel ageLabel = new JLabel("年龄");
JLabel majorLabel = new JLabel("专业");
JTextField nameField = new JTextField(20);
JTextField genderField = new JTextField(20);
JTextField ageField = new JTextField(20);
JTextField majorField = new JTextField(20);
JButton addButton = new JButton("添加");
JButton cancelButton = new JButton("取消");
public AddStudentFrame() {
super("添加学生信息");
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(5, 2, 10, 10));
panel.add(nameLabel);
panel.add(nameField);
panel.add(genderLabel);
panel.add(genderField);
panel.add(ageLabel);
panel.add(ageField);
panel.add(majorLabel);
panel.add(majorField);
panel.add(addButton);
panel.add(cancelButton);
addButton.addActionListener(this);
cancelButton.addActionListener(this);
add(panel);
pack();
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == addButton) {
String name = nameField.getText();
String gender = genderField.getText();
int age = Integer.parseInt(ageField.getText());
String major = majorField.getText();
String sql = "insert into student(name, gender, age, major) values(?, ?, ?, ?)";
Object[] params = {
name, gender, age, major
};
if (DbUtil.executeUpdate(sql, params)) {
JOptionPane.showMessageDialog(this, "添加学生成功");
this.dispose();
} else {
JOptionPane.showMessageDialog(this, "添加学生失败");
}
} else if (e.getSource() == cancelButton) {
this.dispose();
}
}
}
其中DbUtil是一个数据库操作工具类,用于封装一些常用的数据库操作。
3.2.2 查询学生信息示例
在主界面上添加一个‘查询学生’的按钮,并为该按钮添加事件响应函数,当用户点击该按钮时,弹出查询学生信息的界面。
public void actionPerformed(ActionEvent e) {
if (e.getSource() == searchButton) {
SearchStudentFrame searchFrame = new SearchStudentFrame();
searchFrame.setVisible(true);
searchFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}
SearchStudentFrame类代码如下:
public class SearchStudentFrame extends JFrame implements ActionListener {
JLabel keywordLabel = new JLabel("关键字");
JTextField keywordField = new JTextField(20);
JButton searchButton = new JButton("查询");
JTable dataTable = new JTable();
public SearchStudentFrame() {
super("查询学生信息");
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(BorderLayout.NORTH, keywordLabel);
panel.add(BorderLayout.CENTER, keywordField);
panel.add(BorderLayout.SOUTH, searchButton);
searchButton.addActionListener(this);
add(panel);
JScrollPane scrollPane = new JScrollPane(dataTable);
add(BorderLayout.SOUTH, scrollPane);
dataTable.setFillsViewportHeight(true);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == searchButton) {
String keyword = keywordField.getText();
String sql = "select * from student where id = ? or name like ? or major like ?";
Object[] params = {
keyword, "%" + keyword + "%", "%" + keyword + "%"
};
ResultSet rs = DbUtil.executeQuery(sql, params);
try {
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
Vector<String> columnNames = new Vector<>();
Vector<Vector<Object>> data = new Vector<>();
for (int i = 1; i <= columnCount; i++) {
columnNames.add(metaData.getColumnName(i));
}
while (rs.next()) {
Vector<Object> row = new Vector<>();
for (int i = 1; i <= columnCount; i++) {
row.add(rs.getObject(i));
}
data.add(row);
}
DefaultTableModel model = new DefaultTableModel(data, columnNames);
dataTable.setModel(model);
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
}
其中DbUtil是一个数据库操作工具类,用于封装一些常用的数据库操作。
四、系统测试
对系统进行单元测试,测试各个模块的功能是否正确,如添加学生信息、查询学生信息等。
五、系统优化
在测试过程中,对系统进行性能和功能的优化,确保系统的安全性、可靠性和稳定性。
六、总结
实现学生管理系统是一个综合性的项目,需要对Java语言、MySQL数据库以及GUI编程有一定的了解。通过该项目的实现,可以提高Java程序设计的水平,为今后的Java开发奠定坚实的基础。
示例说明:
- 在添加学生信息实现中,通过获取文本框中的学生基本信息,使用预处理语句插入到MySQL数据库的student表中。在添加成功或失败后,通过消息提示框告知用户结果。
- 在查询学生信息实现中,通过获取文本框中的关键字,使用预处理语句查询MySQL数据库的student表,将查询结果显示在JTable中。同时,在执行查询操作时,使用了DbUtil数据库操作工具类进行连接池复用操作,提高了系统性能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现学生管理系统详解流程 - Python技术站