1 项目介绍

1.1 概述

学生成绩管理系统是广泛使用的一种信息管理系统,在学生成绩管理系统中,需要能处理各班信息、各班下属学生的个人信息及每个学生学习成绩信息。班级信息包括班级编号、班级名称,学生信息包括学号、姓名、性别、所属班级、联系方式等,及各门课程的成绩。与班级相关的操作是查看已有班级、新增班级、修改班级名称、删除班级、录入新生信息等;与学生相关的操作是查看已有学生、修改学生基本信息、删除学生、录入成绩、修改成绩、根据姓名、学号、班级、课程等多条件查询学生成绩,并可以依据多种条件进行排序。

1.2 平台、语言和工具

  • 程序编写语言:Java、SQL

  • 开发平台:Eclipse Mars.2、Navicat 11.0.17

  • 使用工具:C3P0、Log4j

  • 运行环境:jre1.7_80、MySql 5.7

1.3 技术细节

1.3.1 图形

  • 本程序的UI使用Java原生的GUI界面,按钮在下排

  • 统一使用JOptionPane类的信息提示窗口

  • 子窗口弹出时父窗口无法点击

  • 所有的窗口在关闭时使用dispose();而不是setvisible,保证在窗口关闭时释放该窗口的资源

  • 去除窗口对象实例化时的引用,利用JVM的垃圾销毁机制节省内存

1.3.2 Java编程

  • 内部类:所有的监听器类都用内部类实现,可以使外部无法访问这个内部类,也方便了对其外部类的监听

  • 后台架构:程序使用仿MVC架构实现,为view、model(po)、service、util、dao五层。使得变成风格更加清晰、模块化,便于抽离和拓展

  • 模板方法模式:所有的dao类继承一个IOToSQL类作为baseDao,baseDao是一个抽象类,里面有增删查改四个基本的未实现方法和一些封装的实现方法,具体类dao继承并实现具体的抽象方法

  • 反射:模板方法遍历数据库使用反射原理,传入resaultSet,用newinstance()获取某个po相应的对象,再获取其get、set方法,最后返回需要的po类对象的Map集,再转换成List

  • 泛型编程:dao抽象类使用了Java泛型,提高父类整体的抽象程度

  • JDBC连接池:池化数据库连接,提高连接的利用率和程序运行的效率。

2 程序结构

2.1 后台架构

程序使用仿MVC架构实现,整个程序分为view、model(po)、service、util、dao五层:

  • Dao层:和数据库交互的层次,由于使用未封装的JDBC,所以本程序的dao层也是持久层

  • Service:业务逻辑处理层,负责对dao层异常处理、view层数据校验、业务流程控制、业务逻辑处理

  • Model:实体类层,所有的业务实体类都会存放在这里。比如老师、管理员

  • View:显示层,所有有关GUI的类,以及窗口跳转处理都在这里

  • Util:工具类层,所有使用到的一些工具方法,例如数据库连接的获取、关闭,字符串的正则判断、长度判断、空判断、字符拼接,view层表格处理等都在此封装。由于是工具方法,所以这里的方法都用static字段修饰

其中,dao为数据层,util/po/service为业务逻辑层,view为显示层。

图形层通过业务逻辑层获取数据层的数据,降低了耦合,实现模块化编程

整体架构如下图所示:

29edfe7191094ae39bdb9451da855380.png

3 数据库表结构

3.1 数据库ER图表

b7bc897a58cc42138c5e1082e7b051f5.png

  • Course:课程表,有课程id(主键)、课程名、学分三个字段

  • Score:分数表,有分数id(student表外键)、课程表主键id的关联外键、分数、学分

  • Student:学生表,学生学号id(主键)、学生名、学生年级、学生班级、手机号、邮箱

  • user:用户id(主键)、用户名、密码、身份(管理员还是老师)

3.2 数据库表的外键

  • 多对多:Student和course有多对多的关系,使用中间表score作为关联实现这种多对多的关系

  • 一对多:student和score、course和score都是一对多的关系,由于这个程序的特殊性,可以将多对多的映射表作为score表实现

  • 所有的外键都是级联删除属性,删除一条主数据时,有关联外键的数据也会一同删除。比如删除一个学生时,会将其所有的分数信息删除

3 程序功能展示

3.1 整体结构

a0964f808b5049acbe52c2fff4d31900.png

3.2 支持两种身份的用户注册、登录

39f44007773f45faa337ada3fd2e622e.png

对所有的输入都有进行正则校验,用户名有2-6位中文和6-18位英文或数字限制,且不能输入特殊符号;密码有6-18位英文或数字限制。

58b29516dd2344bca18ad49a17ae92e0.png

3.3 修改密码

对原有密码进行更改,对密码同样有正则判断。

15eec926ed0042298fe48d88042284d1.png

3.4 对学生的增删查改

可以对学生的信息进行修改、学生查询、增加删除。所有输入操作均有防暴力输入和正则判断。

3.4.1 增加学生

已存在的学号不能重复添加。

830b41ab3b5d46898a3433b8ffe2cce8.png

3.4.2 姓名输入过长、有特殊符号、非纯中英文、含有数字

8d42590e433e4fc881f9eeefc642d0b3.png

3.4.3 班级数字过大、非数字

ed71e36fb3174f9e97b950adb2523d7c.png

3.4.4 可以对学生删除操作

94b3b512b9594cefb3ddd63f7522d360.png

3.4.5 模糊查询学生信息

d12db13e403245b688ca1a1457f946ff.png

3.4.6 成绩管理和查询

80b0cec8d64844f184b8d65499f5247d.png

4bd9d97907e847fca53c8e7ffe5c3ff1.png

3.4.7 查询成绩

53f6f4d26c164440824a3ef62f77be53.png

3.4.8 课程更改

422035e900524d939cd1d6b013a54a7f.png

3.5 权限管理

老师可以增删学生、查看修改成绩、升级成管理员账户;管理员可以修改学生课程、学分和老师账户的管理。

45b4b731b6524e9ea664bf1280729bb3.png

3.6 删除普通老师用户

高级用户模式

aee4b1f54bdc418ca12b3d3576b8b8a5.png

删除确认,此时数据库还有这个用户

1f5b78df271a4fa2abada746e98bc22e.png

 

删除成功后,用户消失

b96c6a86c4e54a8eb029dcb1fc477ecc.png

老师账户登录,没有高级权限

04f9885fcdbc4b94b2627aa4be352939.png

 

 

权限升级

40819f6e8232427480dcdf810d01c9b4.png

对于高级用户

97262ab13e1f4893a0e1ba9261a99d4f.png 

4 业务流程

b369d8bac9fa41e69bf2003270860dfb.png

 

5 文件结构

520f61c301b14a0a8d2f3b4b6870e946.png

 

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐