如何用java+swing+mysql开发一个学生管理系统模块

开发一个学生管理系统模块需要以下几个步骤:

数据库设计
首先需要设计数据库,包括学生信息表、课程信息表、选课信息表等。可以使用MySQL Workbench等工具进行设计,也可以手写SQL语句创建表。

Java连接MySQL数据库
使用Java语言连接MySQL数据库,可以使用JDBC或者ORM框架,如Hibernate、MyBatis等。其中JDBC是Java连接数据库的基础API,需要手写SQL语句操作数据库,而ORM框架可以通过对象映射来实现数据库操作。

Swing界面设计
使用Java Swing框架设计界面,包括学生信息管理界面、课程信息管理界面、选课信息管理界面等。可以使用NetBeans等工具进行界面设计,也可以手写代码实现。

Java代码实现
在Java代码中实现对数据库的增删改查操作,包括添加学生信息、删除学生信息、修改学生信息、查询学生信息等。同时也需要实现选课操作、退课操作等功能。

测试和调试
在开发过程中需要进行测试和调试,确保功能的正确性和稳定性。可以使用JUnit等测试框架进行单元测试,也可以手动测试。

发布和部署
完成开发后需要将程序发布和部署。可以使用Java打包工具将程序打包成jar文件,也可以使用Java Web开发框架如Spring、Struts等将程序部署到Web服务器中。

总体而言,学生管理系统模块的开发需要数据库设计、Java连接MySQL数据库、Swing界面设计、Java代码实现、测试和调试、发布和部署等步骤。

下面是一个简单的学生管理系统模块的案例,使用Java Swing作为界面,MySQL作为数据库。

数据库设计
本案例需要创建两个表:students和courses。其中students表包含学生的基本信息,如学号、姓名、性别、出生日期等;courses表包含课程的基本信息,如课程号、课程名称、学分等。另外,还需要创建一个中间表stu_course,记录学生选修的课程信息。

CREATE TABLE students (
  id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  gender VARCHAR(10) NOT NULL,
  birth DATE NOT NULL,
  PRIMARY KEY (id)
);

CREATE TABLE courses (
  id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  credit INT NOT NULL,
  PRIMARY KEY (id)
);

CREATE TABLE stu_course (
  id INT NOT NULL AUTO_INCREMENT,
  student_id INT NOT NULL,
  course_id INT NOT NULL,
  PRIMARY KEY (id),
  FOREIGN KEY (student_id) REFERENCES students(id),
  FOREIGN KEY (course_id) REFERENCES courses(id)
);

Java连接MySQL数据库
使用JDBC连接MySQL数据库,首先需要下载MySQL Connector/J驱动,然后在Java代码中使用Class.forName方法加载驱动程序,创建Connection对象并连接数据库,最后使用Statement或PreparedStatement执行SQL语句。

import java.sql.*;

public class DBUtil {
    private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
    private static final String URL = "jdbc:mysql://localhost:3306/student_management_system?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "123456";

    public static Connection getConnection() throws ClassNotFoundException, SQLException {
        Class.forName(DRIVER);
        Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
        return conn;
    }

    public static void close(Connection conn, Statement stmt, ResultSet rs) {
        try {
            if (rs != null) rs.close();
            if (stmt != null) stmt.close();
            if (conn != null) conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

Swing界面设计
使用Swing设计学生管理系统模块的界面,包括学生信息管理界面、课程信息管理界面、选课信息管理界面等。这里以学生信息管理界面为例,包含学生的基本信息,如学号、姓名、性别、出生日期等。可以使用Swing组件如JFrame、JPanel、JLabel、JTextField、JButton等来实现界面设计。

import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.*;

public class StudentInfoPanel extends JPanel {
    private JLabel lblId, lblName, lblGender, lblBirth;
    private JTextField txtId, txtName, txtGender, txtBirth;
    private JButton btnAdd, btnUpdate, btnDelete, btnClear;
    private JTable tblStudents;
    private DefaultTableModel tblModel;
    private Connection conn;

    public StudentInfoPanel() {
        initUI();
        initDB();
        loadData();
    }
private void initUI() {
private void initDB() {
    try {
        conn = DBUtil.getConnection();
    } catch (ClassNotFoundException | SQLException e) {
        e.printStackTrace();
    }
}

private void loadData() {
    try {
        String sql = "SELECT * FROM students";
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(sql);

        while (rs.next()) {
            String id = rs.getString("id");
            String name = rs.getString("name");
            String gender = rs.getString("gender");
            String birth = rs.getString("birth");
            Object[] row = {id, name, gender, birth};
            tblModel.addRow(row);
        }

        rs.close();
        stmt.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

private void clearFields() {
    txtId.setText("");
    txtName.setText("");
    txtGender.setText("");
    txtBirth.setText("");
}

private void addStudent() {
    String id = txtId.getText().trim();
    String name = txtName.getText().trim();
    String gender = txtGender.getText().trim();
    String birth = txtBirth.getText().trim();

    try {
        String sql = "INSERT INTO students(id, name, gender, birth) VALUES (?, ?, ?, ?)";
        PreparedStatement stmt = conn.prepareStatement(sql);
        stmt.setString(1, id);
        stmt.setString(2, name);
        stmt.setString(3, gender);
        stmt.setString(4, birth);
        int result = stmt.executeUpdate();
        if (result == 1) {
            Object[] row = {id, name, gender, birth};
            tblModel.addRow(row);
            JOptionPane.showMessageDialog(this, "添加成功");
        }
        stmt.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

private void updateStudent() {
    int row = tblStudents.getSelectedRow();
    if (row == -1) {
        JOptionPane.showMessageDialog(this, "请先选择一行记录");
        return;
    }

    String id = txtId.getText().trim();
    String name = txtName.getText().trim();
    String gender = txtGender.getText().trim();
    String birth = txtBirth.getText().trim();

    try {
        String sql = "UPDATE students SET name=?, gender=?, birth=? WHERE id=?";
        PreparedStatement stmt = conn.prepareStatement(sql);
        stmt.setString(1, name);
        stmt.setString(2, gender);
        stmt.setString(3, birth);
        stmt.setString(4, id);
        int result = stmt.executeUpdate();
        if (result == 1) {
            tblModel.setValueAt(name, row, 1);
            tblModel.setValueAt(gender, row, 2);
            tblModel.setValueAt(birth, row, 3);
            JOptionPane.showMessageDialog(this, "修改成功");
        }
        stmt.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

private void deleteStudent() {
    int row = tblStudents.getSelectedRow();
    if (row == -1) {
        JOptionPane.showMessageDialog(this, "请先选择一行记录");
        return;
    }

    String id = txtId.getText().trim();

    int option = JOptionPane.showConfirmDialog(this, "确定删除该记录吗?");
    if (option == JOptionPane.YES_OPTION) {
        try {
            String sql = "DELETE FROM students WHERE id=?";
            PreparedStatement stmt = conn.prepareStatement(sql);
            stmt.setString(1, id);
            int result = stmt.executeUpdate();
            if (result == 1) {
                tblModel.removeRow(row);
                clearFields();
                JOptionPane.showMessageDialog(this, "删除成功");
            }
            stmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
                }
}
private void addStudent() {
    String id = txtId.getText().trim();
    String name = txtName.getText().trim();
    String gender = txtGender.getText().trim();
    String birth = txtBirth.getText().trim();

    if (id.isEmpty() || name.isEmpty() || gender.isEmpty() || birth.isEmpty()) {
        JOptionPane.showMessageDialog(this, "请填写所有字段!", "错误", JOptionPane.ERROR_MESSAGE);
        return;
    }

    String sql = "INSERT INTO students (id, name, gender, birth) VALUES (?, ?, ?, ?)";
    try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
        pstmt.setString(1, id);
        pstmt.setString(2, name);
        pstmt.setString(3, gender);
        pstmt.setString(4, birth);
        pstmt.executeUpdate();
        JOptionPane.showMessageDialog(this, "添加成功!", "成功", JOptionPane.INFORMATION_MESSAGE);
        loadData();
    } catch (SQLException e) {
        e.printStackTrace();
        JOptionPane.showMessageDialog(this, "添加失败!", "错误", JOptionPane.ERROR_MESSAGE);
    }
}

private void updateStudent() {
    int row = tblStudents.getSelectedRow();
    if (row < 0) {
        JOptionPane.showMessageDialog(this, "请先选择要修改的学生!", "错误", JOptionPane.ERROR_MESSAGE);
        return;
    }

    String id = txtId.getText().trim();
    String name = txtName.getText().trim();
    String gender = txtGender.getText().trim();
    String birth = txtBirth.getText().trim();

    if (id.isEmpty() || name.isEmpty() || gender.isEmpty() || birth.isEmpty()) {
        JOptionPane.showMessageDialog(this, "请填写所有字段!", "错误", JOptionPane.ERROR_MESSAGE);
        return;
    }

    String oldId = tblStudents.getValueAt(row, 0).toString();
    String sql = "UPDATE students SET id=?, name=?, gender=?, birth=? WHERE id=?";
    try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
        pstmt.setString(1, id);
        pstmt.setString(2, name);
        pstmt.setString(3, gender);
        pstmt.setString(4, birth);
        pstmt.setString(5, oldId);
        pstmt.executeUpdate();
        JOptionPane.showMessageDialog(this, "修改成功!", "成功", JOptionPane.INFORMATION_MESSAGE);
        loadData();
    } catch (SQLException e) {
        e.printStackTrace();
        JOptionPane.showMessageDialog(this, "修改失败!", "错误", JOptionPane.ERROR_MESSAGE);
    }
}

private void deleteStudent() {
    int row = tblStudents.getSelectedRow();
    if (row < 0) {
        JOptionPane.showMessageDialog(this, "请先选择要删除的学生!", "错误", JOptionPane.ERROR_MESSAGE);
        return;
    }

    int choice = JOptionPane.showConfirmDialog(this, "确定要删除选中的学生吗?", "确认删除", JOptionPane.YES_NO_OPTION);
    if (choice != JOptionPane.YES_OPTION) {
        return;
    }

    String id = tblStudents.getValueAt(row, 0).toString();
    String sql = "DELETE FROM students WHERE id=?";
    try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
        pstmt.setString(1, id);
        pstmt.executeUpdate();
        JOptionPane.showMessageDialog(this, "删除成功!", "成功", JOptionPane.INFORMATION_MESSAGE);
        loadData();
    } catch (SQLException e) {
        e.printStackTrace();
        JOptionPane.showMessageDialog(this, "删除失败!", "错误", JOptionPane.ERROR_MESSAGE);
    }
}

private void clearInput() {
    txtId.setText("");
    txtName.setText("");
    txtGender.setText("");
    txtBirth.setText("");
    tblStudents.clearSelection();
}
}

上面的代码实现了一个简单的学生管理模块,可以对学生信息进行添加、修改、删除和查询等操作。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Usinian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值