java Swing+JDBC+mysql实现毕业设计选题管理系统(附源码)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: java Swing+JDBC+mysql实现毕业设计选题管理系统(附源码)
🍅程序员小王的博客:程序员小王的博客
🍅 欢迎点赞 👍 收藏 ⭐留言 📝
🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕
🍅java自学的学习路线:java自学的学习路线

一、前言

前几天有一位学妹让我做一个毕业设计选题管理系统,使用java Swing+JDBC+mysql实现,然后功能大概是:


能够导入分配后的名单;


能够从中分离出学生、教师名单,存入学生表和对应关系表中;


教师第一次登录后要补充完整自己的信息:职称、学历、学位。


教师可以输入自己带的学生的毕设题目信息,如每个学生的题目、课题性质、


然后我这几天也没什么事嘛就给他做了一下,后期他说又不要了,然后我就将这个项目拿出来和大家一起学习,如果对这个项目感兴趣,可以自己下载数据库设计+源码:

https://download.csdn.net/download/weixin_44385486/85665117



开发工具

image.png


二、数据库设计



数据库模型


数据库名: studentassignment


文档版本: V1.0.0


文档描述: 毕业设计选题管理系统数据库表设计描述

image.png


表名: account


说明:


数据列:

image.png


表名: student


说明:


数据列:

image.png


表名: studentnototopicno


说明:


数据列:

image.png


表名: teacher


说明:


数据列:

image.png


表名: topic


说明:


数据列:

image.png


jdbc实现

public class DBHelper {
    private static final String url = "jdbc:mysql://127.0.0.1/studentassignment?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTC";
    private static final String name = "com.mysql.cj.jdbc.Driver";
    private static final String user = "root";
    private static final String password = "root";
    private Connection conn = null;
    public PreparedStatement pst = null;
    public DBHelper(String sql) {
        try {
            Class.forName(name);//指定连接类型
            conn = DriverManager.getConnection(url, user, password);//获取连接
            pst = conn.prepareStatement(sql);//准备执行语句
        } catch (Exception e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, "数据库连接错误", "提示", JOptionPane.ERROR_MESSAGE);
        }
    }
    public void close() {
        try {
            this.pst.close();
            this.conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

三、项目功能介绍及实现代码

1、java项目结构

使用的mysql8,然后使用Swing+JDBC+mysql实现


2、项目具体实现及源码

(1)登录页面


public class Login extends JFrame implements ActionListener {
    private JTextField usernameField;//文本框
    private JPasswordField passwordField;//密码框
    private JRadioButton teacherRadioButton;
    private JRadioButton studentRadioButton;
    private JRadioButton adminRadioButton;
    public Login() {
        JPanel jp1 = new JPanel();
        JPanel jp2 = new JPanel();
        JPanel jp3 = new JPanel();
        JPanel jp4 = new JPanel();
        JPanel jp5 = new JPanel();
        JLabel titleLabel = new JLabel("毕设学生分配系统");
        titleLabel.setFont(new Font("楷体", Font.BOLD, 30));
        titleLabel.setForeground(Color.BLUE);
        JLabel usernameLabel = new JLabel("用户名");
        usernameLabel.setFont(new Font("楷体", Font.BOLD, 15));
        usernameLabel.setForeground(Color.BLUE);
        JLabel passwordLabel = new JLabel("密码 ");
        passwordLabel.setFont(new Font("楷体", Font.BOLD, 15));
        passwordLabel.setForeground(Color.BLUE);
        JButton loginButton = new JButton("login");
        loginButton.setForeground(Color.BLUE);
        JButton cancelButton = new JButton("cancel");
        cancelButton.setForeground(Color.BLUE);
        usernameField = new JTextField(15);
        passwordField = new JPasswordField(15);
        adminRadioButton = new JRadioButton("管理员");
        adminRadioButton.setFont(new Font("楷体", Font.BOLD, 15));
        adminRadioButton.setForeground(Color.BLUE);
        teacherRadioButton = new JRadioButton("教师");
        teacherRadioButton.setFont(new Font("楷体", Font.BOLD, 15));
        teacherRadioButton.setForeground(Color.BLUE);
        studentRadioButton = new JRadioButton("学生");
        studentRadioButton.setFont(new Font("楷体", Font.BOLD, 15));
        studentRadioButton.setForeground(Color.BLUE);
        ButtonGroup buttonGroup = new ButtonGroup();
        buttonGroup.add(teacherRadioButton);
        buttonGroup.add(studentRadioButton);
        this.setLayout(new GridLayout(5, 1));
        jp1.add(titleLabel);
        jp2.add(usernameLabel);
        jp2.add(usernameField);
        jp3.add(passwordLabel);
        jp3.add(passwordField);
        jp4.add(teacherRadioButton);
        jp4.add(studentRadioButton);
        jp4.add(adminRadioButton);
        jp5.add(loginButton);
        jp5.add(cancelButton);
        this.add(jp1);
        this.add(jp2);
        Component add = this.add(jp3);
        this.add(jp4);
        this.add(jp5);
        this.setBackground(Color.gray);
        this.setTitle("欢迎进入毕设学生分配系统");
        this.setSize(400, 250);
        this.setLocation(400, 300);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        this.setVisible(true);
        this.setResizable(false);
        loginButton.addActionListener(this);//事件监听
        loginButton.setActionCommand("login");//命令
        cancelButton.addActionListener(this);
        cancelButton.setActionCommand("close");
    }

(2)老师登录系统

  • 登录首页

  • 可以发布论文题目

发布的选题


老师可以修改个人信息


(3)学生登录后


可以修改个人信息


可以选题


public class ChooseTopicModel extends AbstractTableModel {
    private Vector<Vector<String>> rowData;
    private Vector<String> columnNames;
    private DBHelper dbHelper;
    private ResultSet resultSet;
    void init() {
        initTable();
    }
    private void initTable(){
        columnNames = new Vector<>();
        columnNames.add("课题号");
        columnNames.add("课题名");
        columnNames.add("内容");
        columnNames.add("教师号");
        columnNames.add("教师姓名");
        columnNames.add("学生数");
        rowData = new Vector<>();
        String sql = "select * from topic";
        try {
            dbHelper = new DBHelper(sql);
            resultSet = dbHelper.pst.executeQuery();
            while (resultSet.next()) {
                Vector<String> row = new Vector<>();
                row.add(resultSet.getString(2));
                row.add(resultSet.getString(3));
                row.add(resultSet.getString(4));
                row.add(resultSet.getString(5));
                row.add(resultSet.getString(6));
                row.add(resultSet.getString(7));
                rowData.add(row);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                resultSet.close();
                dbHelper.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }


如果选题之后,有人选了,就提示


如果选择了一门再选择就提示,不要多选


 

    //学生选了某一门课程设计(使课程待选人数-1 并且一个人只能选一门)
    boolean isChoose(String topicNo, String studentNo){
        boolean success=false;
        String sql="select * from topic where topicNo=?";
        try {
            dbHelper=new DBHelper(sql);
            dbHelper.pst.setString(1,topicNo);
            resultSet = dbHelper.pst.executeQuery();
            while (resultSet.next()){
                String studentCount=resultSet.getString(7);
                if (Integer.parseInt(studentCount)>0){
                    sql="select * from studentNoToTopicNo where studentNo=?";
                    dbHelper=new DBHelper(sql);
                    dbHelper.pst.setString(1,studentNo);
                    resultSet=dbHelper.pst.executeQuery();
                    if (!resultSet.next()){
                        sql="update topic set studentCount=studentCount-1 where topicNo=?";
                        try {
                            dbHelper=new DBHelper(sql);
                            dbHelper.pst.setString(1,topicNo);
                            dbHelper.pst.executeUpdate();
                            success=true;
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }finally {
                            dbHelper.close();
                        }
                    }else {
                        JOptionPane.showMessageDialog(null,"你已经选过一门课程设计,请勿选择多门");
                    }
                }else {
                    JOptionPane.showMessageDialog(null,"该门课程已被选完,请重新选课");
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            dbHelper.close();
        }
        return success;
    }

之后查看自己的毕业选题


选题目之后,那个老师发布的题目,就相当于选了那个老师


 
         

(4)管理员登录

  • 添加学生信息


void init(String teacherNo) {
        columnNames = new Vector<>();
        columnNames.add("课题号");
        columnNames.add("课题名");
        columnNames.add("内容");
        columnNames.add("教师号");
        columnNames.add("教师姓名");
        columnNames.add("学生数");
        rowData = new Vector<>();
        String sql;
        try {
            if (teacherNo.equals("all")) {
                sql = "select * from topic";
                dbHelper = new DBHelper(sql);
            } else {
                sql = "select * from topic where teacherNo=?";
                dbHelper = new DBHelper(sql);
                dbHelper.pst.setString(1, teacherNo);
            }
            resultSet = dbHelper.pst.executeQuery();
            while (resultSet.next()) {
                Vector<String> row = new Vector<>();
                row.add(resultSet.getString(2));
                row.add(resultSet.getString(3));
                row.add(resultSet.getString(4));
                row.add(resultSet.getString(5));
                row.add(resultSet.getString(6));
                row.add(resultSet.getString(7));
                rowData.add(row);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                resultSet.close();
                dbHelper.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

添加删除老师信息


删除老师信息

 public boolean deleteStudentInfo(String teacherNo) {
        boolean success = false;
        String sql = "delete from teacher where teacherNo=?";
        DBHelper dbHelper = new DBHelper(sql);
        try {
            dbHelper.pst.setString(1, teacherNo);
            dbHelper.pst.executeUpdate();
            success = true;
        } catch (SQLException e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, "删除教师信息失败");
        } finally {
            dbHelper.close();
        }
        return success;
    }

更新老师信息

  boolean updateTeacherInfo(String name, int age, String sex, String birthday) {
        boolean success = false;
        String sql = "update teacher set name=?,age=?,sex=?,birthday=? where teacherNo=?";
        DBHelper dbHelper1 = new DBHelper(sql);
        try {
            dbHelper1.pst.setString(1, name);
            dbHelper1.pst.setInt(2, age);
            dbHelper1.pst.setString(3, sex);
            dbHelper1.pst.setString(4, birthday);
            dbHelper1.pst.setString(5, this.teacherNo);
            dbHelper1.pst.executeUpdate();
            success = true;
        } catch (SQLException e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, "更新失败请重试");
        } finally {
            dbHelper1.close();
        }
        init(teacherNo);
        return success;
    }

查看选题列表及那我同学选了那个毕业设计


四、总结

以上就是毕业分配吸引的全部功能和部分代码了,大家可以参考一下,或者直接模拟创建一个项目,然后代码复制进去。然后源代码实在太多,并且各个结构也比较乱,如有需求可与我联系

🧐 微信公众号:搜索《程序员小王》

📒原创不易,如果觉得不错请给我一个,三连、收藏、加关注,需要资料的同学可以私聊我!

😉 有问题可以点击下方私信交流 😆

如果我的博客对您有帮助 再次希望大家点赞 👍 收藏 ⭐留言 📝 啦 、感谢大家对我支持,让我有了更多的创作动力,希望我的博客能帮助到你

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
关系型数据库 MySQL Java
【MySQL+java+jpa】MySQL数据返回项目的感悟
【MySQL+java+jpa】MySQL数据返回项目的感悟
43 1
|
14天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。通过具体案例,读者可以了解如何准备环境、下载源码、编译安装、配置服务及登录 MySQL。编译源码安装虽然复杂,但提供了更高的定制性和灵活性,适用于需要高度定制的场景。
49 3
|
17天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
59 2
|
21天前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
|
28天前
|
Java 关系型数据库 MySQL
mysql5.7 jdbc驱动
遵循上述步骤,即可在Java项目中高效地集成MySQL 5.7 JDBC驱动,实现数据库的访问与管理。
106 1
|
1月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置服务等,并与使用 RPM 包安装进行了对比,帮助读者根据需求选择合适的方法。编译源码安装虽然复杂,但提供了更高的定制性和灵活性。
222 2
|
1月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤
【10月更文挑战第7天】本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据自身需求选择合适的方法。
58 3
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
84 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
37 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
46 0