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

简介: 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;
    }

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


四、总结

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

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

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

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

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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
基于JavaWeb的销售管理系统设计系统
本系统基于Java、MySQL、Spring Boot与Vue.js技术,构建高效、可扩展的销售管理平台,实现客户、订单、数据可视化等全流程自动化管理,提升企业运营效率与决策能力。
|
移动开发 监控 小程序
java家政平台源码,家政上门清洁系统源码,数据多端互通,可直接搭建使用
一款基于Java+SpringBoot+Vue+UniApp开发的家政上门系统,支持小程序、APP、H5、公众号多端互通。涵盖用户端、技工端与管理后台,支持多城市、服务分类、在线预约、微信支付、抢单派单、技能认证、钱包提现等功能,源码开源,可直接部署使用。
926 24
|
设计模式 消息中间件 传感器
Java 设计模式之观察者模式:构建松耦合的事件响应系统
观察者模式是Java中常用的行为型设计模式,用于构建松耦合的事件响应系统。当一个对象状态改变时,所有依赖它的观察者将自动收到通知并更新。该模式通过抽象耦合实现发布-订阅机制,广泛应用于GUI事件处理、消息通知、数据监控等场景,具有良好的可扩展性和维护性。
877 8
|
安全 前端开发 Java
使用Java编写UDP协议的简易群聊系统
通过这个基础框架,你可以进一步增加更多的功能,例如用户认证、消息格式化、更复杂的客户端界面等,来丰富你的群聊系统。
426 11
|
机器学习/深度学习 人工智能 自然语言处理
Java与生成式AI:构建内容生成与创意辅助系统
生成式AI正在重塑内容创作、软件开发和创意设计的方式。本文深入探讨如何在Java生态中构建支持文本、图像、代码等多种生成任务的创意辅助系统。我们将完整展示集成大型生成模型(如GPT、Stable Diffusion)、处理生成任务队列、优化生成结果以及构建企业级生成式AI应用的全流程,为Java开发者提供构建下一代创意辅助系统的完整技术方案。
574 10
|
人工智能 监控 Java
Java与AI智能体:构建自主决策与工具调用的智能系统
随着AI智能体技术的快速发展,构建能够自主理解任务、制定计划并执行复杂操作的智能系统已成为新的技术前沿。本文深入探讨如何在Java生态中构建具备工具调用、记忆管理和自主决策能力的AI智能体系统。我们将完整展示从智能体架构设计、工具生态系统、记忆机制到多智能体协作的全流程,为Java开发者提供构建下一代自主智能系统的完整技术方案。
1274 4
|
机器学习/深度学习 分布式计算 Java
Java与图神经网络:构建企业级知识图谱与智能推理系统
图神经网络(GNN)作为处理非欧几里得数据的前沿技术,正成为企业知识管理和智能推理的核心引擎。本文深入探讨如何在Java生态中构建基于GNN的知识图谱系统,涵盖从图数据建模、GNN模型集成、分布式图计算到实时推理的全流程。通过具体的代码实现和架构设计,展示如何将先进的图神经网络技术融入传统Java企业应用,为构建下一代智能决策系统提供完整解决方案。
910 0
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
728 158
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1924 152

推荐镜像

更多