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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 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;
    }

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


四、总结

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

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

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

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

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

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
安全 关系型数据库 MySQL
如何将数据从MySQL同步到其他系统
【10月更文挑战第17天】如何将数据从MySQL同步到其他系统
309 0
|
17天前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
89 26
|
20天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
1月前
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
34 2
|
1月前
|
监控 前端开发 Java
【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。
|
1月前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
121 3
|
2月前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
188 6
|
2月前
|
Java 关系型数据库 MySQL
mysql5.7 jdbc驱动
遵循上述步骤,即可在Java项目中高效地集成MySQL 5.7 JDBC驱动,实现数据库的访问与管理。
488 1
|
安全 Java
Java并发编程笔记之CopyOnWriteArrayList源码分析
并发包中并发List只有CopyOnWriteArrayList这一个,CopyOnWriteArrayList是一个线程安全的ArrayList,对其进行修改操作和元素迭代操作都是在底层创建一个拷贝数组(快照)上进行的,也就是写时拷贝策略。
19556 0
|
Java 安全
Java并发编程笔记之读写锁 ReentrantReadWriteLock 源码分析
我们知道在解决线程安全问题上使用 ReentrantLock 就可以,但是 ReentrantLock 是独占锁,同时只有一个线程可以获取该锁,而实际情况下会有写少读多的场景,显然 ReentrantLock 满足不了需求,所以 ReentrantReadWriteLock 应运而生,ReentrantReadWriteLock 采用读写分离,多个线程可以同时获取读锁。
3140 0