java Swing+mysql+JDBC实现教务系统(源码+数据库+UML图+数据库分析)

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

文章目录


一、前言

前几天有一名大一的学弟说他想实现简易教务系统,看到我原来开源了一个使用Struts2+mybatis+mysql实现的学生教务系统(地址如下:http://t.csdn.cn/qfU7F),但是他才大一没学过Struts2+mybatis,他想用java Swing+mysql+JDBC,当我听到使用swing时我都惊呆了,怎么还有学校教这个技术,但想到我读大一时也使用swing嘛,然后经过商量就帮他开发一个swing的教务系统,我自己也复习一下swing,不然我都不记得有这个技术了!并且也画了ER图,用例图,序列图,协作图等,还做了数据库设计文档和需求文档!



二、需求分析

1、引言

信息社会的高科技,商品经济化的高效益,使计算机的应用已普及到经济和社会生活的各个领域。计算机虽然与人类的关系愈来愈密切,但是还有人由于计算机操作不方便继续用手工劳动。为了适应现代社会人们高度强烈的时间观念,随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。管理信息系统是一个不断发展的新型学科,任何一个单位要生存、要发展、要高效率地把内部活动有机地组织起来,就必须建立与自身特点相适应的管理信息系统。这对于正在迅速发展的各大高校而言,同样有着重要意义。


现如今高校为适应社会的需求以及自身办学的需要,扩建、扩招已在寻常不过。自然就会有更多的学生信息需要处理。如果只靠人力来完成,必然是一项非常繁琐、复杂的工作,而且还会出现很多意想不到的错误,这不仅会给教学及管理带来了很大的不便,也不益于学校全面快速发展的需要。


众所周知,作为高校日常教学中的主要管理工作之一的教务管理,它涉及到院校、专业、师生等诸多方面。特别是目前国家的教育体制也正处在不断改革、创新的阶段,教育部门充分吸取国外优秀的教学模式,结合国内多年的办学经验,逐步探索出了适合中国特色的教学形式,国家教育部面向各级各类学校开展了全面学分制改革。同时,随着选课制的展开和深入,教务日常管理工作也日趋繁重、复杂,如何把教务工作信息化、模块化、便捷化便成为了现代高校发展的重点。所以总的来说,教务管理软件应实现教务信息的集中管理,使传统的教务管理朝数字化、无纸化、智能化、综合化的方向发展,并为进一步实现完善的计算机教务管理系统和全校信息系统打下良好的基础。在高校中,教务管理工作具有举足轻重的地位,教学质量直接取决十教务管理水平。现如今教务管理信息系统的开发与实施可谓日新月异。


在数字校园理论逐步应用的过程中,各高校一方面不断投资购建各种硬件、系统软件和网络,另一方面也不断开发实施了各类教学、科研、办公管理等应用系统,形成了一定规模的信息化建设体系。


教务管理系统是一个庞大而复杂的系统,它包括对学生信息的注册、修改,学生选课及课程管理和学生的四六级考试及计算机等级考试的管理;对教师课程的管理以及对选课学生评分的管理;和管理员对教师、各类考试的综合管理等主要的功能。教务管理系统运行的状况将直接影响到学校里的主要工作,一旦此系统出错,不仅学校的教学进度安排会受到一定程度的影响,而且还会危及到每一个在校学生的切身利益。所以设计一个功能相对完整、操作简单以及界面友好的教务管理系统变得非常重要。


为了提高教务管理的工作效率和服务质量,降低出错率,精简人力、物力的投入,各个高校均建立了自己的教务管理信息系统,为学校的动态管理和分析决策带来了极大的便利。现在的学校的教务管理也逐步从手工转到计算机自动化信息处理阶段。通过这个系统,用户可以方便的对教师信息以及学生信息和学生成绩资料进行添加、修改和删除操作,还可以对学生资料和成绩进行查询操作。除此之外,对用户的添加和删除操作也很方便。


教务管理系统是典型的信息管理系统(MIS),它能够实现整体规划教学资源(学生,教师,教室),评估教学质量,制定教学计划,检查教学进度,给学校的教务人员管理教务工作提供了极大的方便


2、使用技术及软件

image.png


3、用例图

教务管理信息系统由教学培养计划管理子系统、学籍管理子系统、排课及教学资源管理系统、教务信息发布传递提交系统和事务处理系统等组成。涉及人员友学生、教师、教务员等。

(1)系统用例图

(2)学生用例图

(3)教师用例图

(4)教务人员用例图


4、序列图

(1)学生登录序列图:

  • 学生登录序列图:

  • 学生选课序列图:

  • 学生查询成绩序列图:

  • 学生查询课程序列图:

(2)教师序列图

  • 教师登录成绩序列图:

  • 教师登录序列图:


  • 教务人员更新数据序列图:



5、协作图

(1)学生协作图

  • 学生登录协作图:


  • 学生查询成绩协作图:


  • 学生选课协作图:


(2)教师协作图

  • 教师录入成绩协作图:

  • 教师查询评估结果协作图:

6、类图

教务管理信息系统的总体类图如下:


7、状态图

教务管理信息系统的用户状态图:


8、ER图


三、Swing教务系统实现

1、系统介绍

教务管理是高校教学系统中重要的部分。本教务系统主要满足两类用户的要求,这两类用户分别是系统管理员、教师和学生,他们所具有的功能和权限是不同的。具体要求如下:


系统管理员:查看和修改自己个人信息(工号不能修改);可以对学生、教师、课程与授课信息的增加、删除、修改、查询。


教师:查看和修改自己个人信息(工号不能修改);按课程录入和查询成绩。


学生:查看和修改自己个人信息(学号不能修改);查询已选课程成绩及总学分;根据授课信息进行选课操作。


教工信息包括工号,姓名,性别,出生日期,电话,密码等(系统管理员属于教工)。


学生信息包括学号,姓名,性别,出生日期,电话,密码等。


课程信息包括课程号,课程名,学分等。


一名教师可以讲授若干门课程,一门课程只能被一名教师讲授。


一名学生可以选修若干门课,一门课程可以被若干名学生选修。



要求按照MVC模式设计并实现系统

MVC是一种将应用程序的逻辑层和表现层进行分离的方法。MVC 式的出现不仅实现了功能模块和显示模块的分离,同时它还提高了应用系统的可维护性、可扩展性、可移植性和组件的可复用性。


2.1模型(Model):模型是应用程序的主体部分。模型表示业务数据。通常来说,你的模型类将包含取出、插入、更新、删除你的数据库信息的功能。 ·


2.2视图(View):视图是应用程序中用户界面相关的部分,是用户看到并与之交互的界面。


2.3控制器(Controller):控制器工作就是根据用户的输入,控制用户界面数据显示和更新model对象状态。控制器是模型、视图以及其它任何处理请求所必须的资源之间的中介。


由于运用MVC的应用程序的三个部件是相互对立,改变其中一个不会影响其它两个,所以依据这种设计思想你能构造良好的松耦合的构件。


2、教务系统源码+文档+uml地址

java Swing+mysql+JDBC实现教务系统我没有开源,制作不易,如果觉得不错请给我一个,三连、收藏、加关注,需要源码+mysql数据库+word需求文档+数据库表设计文档资料的同学可以去https://download.csdn.net/download/weixin_44385486/85567002这里下载相关资料,感谢对我支持,让我有了更多的创作动力,希望我的博客能帮助到你 !



3、运行结果和源码展示

(1)登录页面

登录可以老师,学生,系统管理员登录




启动部份源代码

public class Login extends JFrame {
  private final Action action = new SwingAction();
  private JTextField textField;
  private final ButtonGroup buttonGroup = new ButtonGroup();
  private JPasswordField passwordField;
  private JRadioButton rdbtnNewRadioButton = null;
  private JRadioButton rdbtnNewRadioButton_1 = null;
  private JRadioButton rdbtnNewRadioButton_2 = null;
  public Login() {
    setResizable(false);
    getContentPane().setBackground(SystemColor.menu);
    setSize(new Dimension(341, 410));
    setTitle("简易教务管理系统");
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JMenuBar menuBar = new JMenuBar();
    setJMenuBar(menuBar);
    JMenu mnFile = new JMenu("菜单");
    mnFile.setFont(new Font("微软雅黑", Font.PLAIN, 16));
    menuBar.add(mnFile);
    JMenuItem mntmNewMenuItem = new JMenuItem("退出");
    mntmNewMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 16));
    mntmNewMenuItem.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        System.exit(0);
      }
    });
    mntmNewMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_STOP, 0));
    mnFile.add(mntmNewMenuItem);
    JMenu mnHelp = new JMenu("帮助");
    mnHelp.setFont(new Font("微软雅黑", Font.PLAIN, 16));
    menuBar.add(mnHelp);
    JMenuItem mntmNewMenuItem_1 = new JMenuItem("关于");
    mntmNewMenuItem_1.setFont(new Font("微软雅黑", Font.PLAIN, 16));
    mntmNewMenuItem_1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        mntmNewMenuItem_1actionPerformed(e);
      }
    });
    mnHelp.add(mntmNewMenuItem_1);
    JLabel lblNewLabel = new JLabel("New label");
    lblNewLabel.setIcon(new ImageIcon(Login.class.getResource("/images/login1.jpg")));
    JLabel lblNewLabel_1 = new JLabel("账号");
    JLabel lblNewLabel_2 = new JLabel("密码");
    textField = new JTextField();
    textField.setColumns(0);
    rdbtnNewRadioButton = new JRadioButton("学生");
    rdbtnNewRadioButton.setSelected(true);
    buttonGroup.add(rdbtnNewRadioButton);
    rdbtnNewRadioButton_1 = new JRadioButton("教师");
    buttonGroup.add(rdbtnNewRadioButton_1);
    rdbtnNewRadioButton_2 = new JRadioButton("教务人员");
    buttonGroup.add(rdbtnNewRadioButton_2);
    JButton btnNewButton = new JButton("登录");
    btnNewButton.setDoubleBuffered(true);
    btnNewButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        btnNewButtonactionPerformed(event);
      }
    });
    JButton btnNewButton_1 = new JButton("取消");
    btnNewButton_1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        System.exit(0);
      }
    });
  }


(2)系统管理员

系统管理员:查看和修改自己个人信息(工号不能修改);可以对学生、教师、课程与授课信息的增加、删除、修改、查询。


查看和修改自己个人信息


对成绩进行管理


可以对学生,老师进行管理


学生信息管理


老师信息管理


课程与授课信息的增加、删除、修改、查询。


添加课程


系统管理员系统部份实现源码

public ManagerAdmin() {
    setResizable(false);
    user = GlobalUser.LOGIN_USER;
    setSize(new Dimension(349, 447));
    setLocationRelativeTo(null);
    setTitle("教务人员信息管理");
    JLabel label = new JLabel("当前用户");
    JLabel lblNewLabel = new JLabel(user.getNickName());
    JLabel lblNewLabel_1 = new JLabel(user.getUserName());
    JLabel label_1 = new JLabel("账号");
    textField = new JTextField();
    textField.setColumns(10);
    JLabel label_2 = new JLabel("密码");
    textField_1 = new JTextField();
    textField_1.setColumns(10);
    JLabel label_3 = new JLabel("昵称");
    textField_2 = new JTextField();
    textField_2.setColumns(10);
    JLabel label_4 = new JLabel("权限");
    textField_3 = new JTextField();
    textField_3.setEnabled(false);
    textField_3.setText("教务人员");
    textField_3.setColumns(10);
    JButton button = new JButton("确定");
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        buttonactionPerformed(e);
      }
    });
    JLabel label_5 = new JLabel("删除用户---------------------------------");
    JLabel label_6 = new JLabel("账号");
    textField_4 = new JTextField();
    textField_4.setColumns(10);
    JLabel label_7 = new JLabel("新建用户----------------------------------");
    JButton btnNewButton = new JButton("删除");
    btnNewButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        btnNewButtonactionPerformed(e);
      }
    });
  public void initTextFiled() {
    textField.setText("");
    textField_1.setText("");
    textField_2.setText("");
    textField_4.setText("");
  }

(4)教师

查看和修改自己个人信息(工号不能修改);按课程录入和查询成绩。

  • 个人信息




录入成绩



教师系统部份实现源码

(5)学生

学生:查看和修改自己个人信息(学号不能修改);查询已选课程成绩及总学分;根据授课信息进行选课操作。



查看和修改自己个人信息(学号不能修改)


修改密码


查询已选课程成绩及总学分


已经选修课程


学生系统部份实现源码

protected void button_3actionPerformed(ActionEvent e) {
    // 删除
    int stuId = Integer.parseInt(textField_10.getText());
    try {
      int n = JOptionPane.showConfirmDialog(null, "学号为:" + stuId, "提示", 0);
      if (n == 0) {
        DAOFactory.getStudentDAOInstance().doDelete(stuId);
        DAOFactory.getIUserDAOInstance().doDelete(stuId + "");
      }
    } catch (Exception e1) {
      e1.printStackTrace();
    }
    showAllMessage();
    textField_10.setText("");
  }

四、系统源码+数据库+文档

1、源码获取

java Swing+mysql+JDBC实现教务系统我没有开源,制作不易,如果觉得不错请给我一个,三连、收藏、加关注,需要源码+数据库+word/PDF需求文档资料的同学可以去下载相关资料,感谢对我支持,让我有了更多的创作动力,希望我的博客能帮助到你 !


点击以下链接获取源码+数据库+文档+数据库需求文档:实现教务系统(源码+数据库+Uml图文档)



2、联系

如果你也想开发一个java相关的项目,比如springboot,spring,springmvc,struts,springJPA,SpringCloud的项目,可以联系我哟!


3、往期已经开发的开源项目

SSM实战项目:人事管理系统(蓝色版)【附源代码】


SpringBoot+jsp实现水果商城系统(含源码+数据库+文档)


基于SSM+jsp+echarts的疫情地图系统系统(已经开源)


DBSwitch阉割版实现异构数据库表结构同步


SpringBoot+VUE+ MyBatis实现人事管理系统(已开源)


SpringBoot+Mybatis整合jsp项目之EMS


学生教务系统(java实现版)【附全部源码】


4、后续陆续开源的项目


ssm+vue实现依伴汉服网


ssm+jsp企业报销管理系统,


ssm+vue实现垃圾回收系统,


ssm+jsp物业管理系统,


ssm+jsp住院管理系统


ssm+jsp图书商城系统


ssm+jsp疫情线上考试系统


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
XML Java 数据库连接
性能提升秘籍:如何高效使用Java连接池管理数据库连接
在Java应用中,数据库连接管理至关重要。随着访问量增加,频繁创建和关闭连接会影响性能。为此,Java连接池技术应运而生,如HikariCP。本文通过代码示例介绍如何引入HikariCP依赖、配置连接池参数及使用连接池高效管理数据库连接,提升系统性能。
59 5
|
29天前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
41 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
21天前
|
监控 算法 Java
jvm-48-java 变更导致压测应用性能下降,如何分析定位原因?
【11月更文挑战第17天】当JVM相关变更导致压测应用性能下降时,可通过检查变更内容(如JVM参数、Java版本、代码变更)、收集性能监控数据(使用JVM监控工具、应用性能监控工具、系统资源监控)、分析垃圾回收情况(GC日志分析、内存泄漏检查)、分析线程和锁(线程状态分析、锁竞争分析)及分析代码执行路径(使用代码性能分析工具、代码审查)等步骤来定位和解决问题。
|
1月前
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
|
1月前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
53 3
|
1月前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
64 2
|
1月前
|
Java 数据库连接 数据库
如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面
本文介绍了如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面。通过合理配置初始连接数、最大连接数和空闲连接超时时间,确保系统性能和稳定性。文章还探讨了同步阻塞、异步回调和信号量等并发控制策略,并提供了异常处理的最佳实践。最后,给出了一个简单的连接池示例代码,并推荐使用成熟的连接池框架(如HikariCP、C3P0)以简化开发。
51 2
|
1月前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
39 1
|
12天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
81 15
|
6天前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。

推荐镜像

更多
下一篇
DataWorks