基于Java和MySQL实现的大学生学籍管理系统

person 匿名

发布日期: 2021-06-13 11:53:01 浏览量: 771
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

一、设计任务、要求与分工

进入 21 世纪后,计算机的重要性以为人们所广泛的认识,其强大地功能在社会的各个层面已经全面的展现出来。随着我国教育的迅速发展,各类院校招生规模逐步扩大,学籍管理负担对于学校来说越来越重。采用传统的学籍信息管理模式,必然会浪费大量的人力,物力和财力。如何提高院校学生信息管理的水平,建立适合高校学生信息管理系统的过程中,信息化建设已成为学校的一个重要问题亟待解决。特别是使用计算机进行学籍管理后,相比较老的手工管理方法在保密性和可靠性等方面的优势逐步体现出来,利用计算机技术和数据库技术设计开发学生学籍管理系统可以大大提高学生管理的效率,所以说设计出这样一套软件成为学生管理部门的迫切需要。这也是我们组选择高校学籍管理系统的目的及意义。

本课题下的功能要求有:

  • 实现学生信息、班级、院系、专业等的管理

  • 实现课程、学生成绩信息管理

  • 实现学生的奖惩信息管理

  • 创建规则用于限制性别项只能输入“男”或“女”

  • 创建视图查询各个学生的学号、姓名、班级、专业、院系

  • 创建存储过程查询指定学生的成绩单

  • 创建触发器当增加、删除学生和修改学生班级信息时自动修改相应班级、学生人数

  • 建立数据库相关表之间的参照完整性约束

其中我主要负责设计存储过程,创建用于修改学生班级信息时自动修改相应班级的学生人数的触发器,选课管理模块(选课、退课及查课),成绩管理模块(增、删、改、查成绩),奖惩管理模块(增、删、改、查奖惩信息)。

其余模块有 ×× 负责设计表结构,设计主页面,院系管理模块(增、删、查院系信息),专业管理模块(增、删、查专业信息),班级管理模块(增、删班级信息,班级人数查询);××× 负责设计视图,检查数据库各表参照完整性,数据库 JDBC 连接,学生管理模块(增、删、改、查学生信息),课程管理模块(增、删、改、查课程信息)。

1.1 需求分析

1.2 功能需求

  • 学生管理模块:创建学生信息表(stu_inf)可以实现对学生信息的添加、查询、修改、删除操作

  • 课程管理模块:创建课程信息表(course)可以实现对课程信息的添加、查询、修改、删除操作

  • 院系管理模块:创建院系信息表(department)可以实现对院系信息的添加、查询、删除操作

  • 专业管理模块:创建专业信息表(major)可以实现对专业信息的添加、查询、删除操作

  • 班级管理模块:创建班级信息表(class)可以实现对班级信息的添加、删除、查询班级人数操作

  • 选课管理模块:创建选课信息表(stu_cou)可以实现对选课信息的添加、查询、删除操作

  • 成绩管理模块:对选课信息表(stu_cou)可以实现对成绩信息的添加、查询、修改、删除操作

  • 奖惩管理模块:创建奖惩信息表(stu_san)可以实现对奖惩信息的添加、查询、修改、删除操作

1.3 性能需求

  • 数据的完整性,准确性:录入数据采用表格方式,限制录入数据类型及取值范围以保证数据的完整性及准确性,系统具有部分反悔功能,系统备有的修改功能均可反悔

  • 数据完成的时间性:如成绩的录入,仅当选课料录资入后方可录入成绩

1.4 数据需求

  • 院系表(departname(Varchar))

  • 专业表(majorname(Varchar),departname(Varchar))专业信息的院系必须是院系表的院系

  • 班级表(majorname(Varchar),classnum(Int),classsum(Smallint))班级信息的专业必须是专业表的专业

  • 学生表(Sno(Varchar),Sname(Varchar),Ssex(Enum),Sbirth(Date),Snative(Varchar),Sclass(Int),Smajor(Varchar))学生信息的班级必须是班级表的班级

  • 课程表(Cno(Varchar),Cname(Varchar),Ccredit(Smallint),Cteacher(Varchar))

  • 选课表(Cno(Varchar),Sno(Varchar),GradeSmallint))选课信息的学号必须为学生表的学号,课程号必须为课程表的课程号

  • 奖惩信息表(id(Int),Sno(Varchar),Sname(Varchar),Reward(Varchar),Punish(Varchar))奖惩信息的学号、姓名必须为学生表的学号、姓名

  • 用户表(username(Varchar),password(Varchar))

1.5 运行需求

  • 用户界面:要求简单实用,操作方便

  • 软件接口:使用 JDBC 来连接 Java 和 MySQL 数据库

二、系统设计

总体功能框架

模块的详细设计

  • 选课:输入已有的学号和课程号,然后执行 insert 语句添加此信息到数据库 stu_cou 表中

  • 退课:输入已有的学号,先执行 select 语句查询出相应选课信息,选中想退的课的对应信息,然后执行 delete 语句在数据库 stu_cou 表中删除此信息;

  • 选课信息查询:输入已有学生的学号,然后执行 select 语句查询出此学生所有课程,或输入已有课程的课程号,然后执行 select 语句查询出此课程下的所有学生

  • 成绩添加及修改:输入已有课程号,先执行 select 语句查询出此课程所有学生,选中添加成绩的学生并输入此课程的成绩,然后执行 update 语句更新此信息到数据库 stu_cou 表中

  • 成绩删除:输入已有课程号,先执行 select 语句查询出此课程所有学生,选中该学生,然后执行 update 语句在数据库 stu_cou 表中删除此学生、此课程对应成绩

  • 成绩查询

    • 按学号查询:输入已有学生的学号,然后执行 select 语句查询出此学生所有成绩,并列出该生总课程数、总学分、挂科课程数、已修学分和平均分
    • 按课程号查询:输入已有课程的课程号,然后执行 select 语句查询出此课程下已有成绩学生的成绩信息,并自动统计总人数、及格人数、不及格人数及此课程平均成绩
    • 奖惩信息添加:输入已有学生的学号和姓名,再输入奖惩信息,然后执行 insert 语句添加此信息到数据库 stu_san 表中
    • 奖惩信息删除:输入已添加过奖惩信息学生的学号,然后执行 delete 语句在数据库 stu_san 表中删除此信息
    • 奖惩信息修改:输入已添加过奖惩信息学生的学号,先执行 select 语句查询出所有奖惩信息,然后选中要修改的信息并输入修改后的奖惩信息,最后执行 update 语句在数据库 stu_san 表中修改此信息
    • 奖惩信息查询:输入已有学生的学号,然后执行 select 语句查询出所有奖惩信息

三、数据库设计

概念结构设计

逻辑结构设计

  • 院系(院系名) 主键=院系名

  • 专业(院系名,专业名) 主键=专业名 外键=院系名

  • 班级(专业名,班级号,班级人数) 主键=专业名、班级号 外键=专业名

  • 学生(学号,姓名,性别,出生年月,籍贯,专业名,班级号)

  • 主键=学号 外键=专业名、班级号

  • 课程(课程号,课程名,学分,执教教师) 主键=课程号

  • 选课(学号,课程号,分数) 主键=学号、课程号 外键=学号、课程号

  • 奖惩信息(id,学号,姓名,奖励信息,惩罚信息) 主键=id 外键=学号、姓名

  • 用户(用户名,密码) 主键=用户名

物理结构设计

学生信息表(stu_inf)

字段名 字段类型 小数点 是否主键 是否为空 是否外键 备注
Sno Varchar(6) 学号
Sname Varchar(10) 姓名
Ssex Enum 性别
Sbirth Date 出生年月
Snative Varchar(10) 籍贯
Sclass Int 班级
Smajor Varchar(10) 专业

外键

字段 被引用的模式 被引用的表(父) 被引用的字段 删除时 更新时
inf-class Sclass, Smajor meimaobingle class classnum, majorname RESTRICT RESTRICT

课程信息表(course)

字段名 字段类型 小数点 是否主键 是否为空 是否外键 备注
Cno Varchar(4) 课程号
Cname Varchar(40) 课程名
Ccredit Smallint 学分
Cteacher Varchar(10) 执教教师

院系信息表(department)

字段名 字段类型 小数点 是否主键 是否为空 是否外键 备注
departname Varchar(10) 院系名

专业信息表(major)

字段名 字段类型 小数点 是否主键 是否为空 是否外键 备注
majorname Varchar(10) 专业名
departname Varchar(10) 院系名

外键

字段 被引用的模式 被引用的表(父) 被引用的字段 删除时 更新时
major-depart departname meimaobingle department departname CASCADE CASCADE

班级信息表(class)

字段名 字段类型 小数点 是否主键 是否为空 是否外键 备注
majorname Varchar(10) 专业名
classnum Int 班级号
classsum Smallint 班级人数

外键

字段 被引用的模式 被引用的表(父) 被引用的字段 删除时 更新时
class-major majorname meimaobingle major majorname CASCADE CASCADE

选课信息表(stu_cou)

字段名 字段类型 小数点 是否主键 是否为空 是否外键 备注
Cno Varchar(4) 课程号
Sno Varchar(6) 学号
Grade Smallint 成绩

外键

字段 被引用的模式 被引用的表(父) 被引用的字段 删除时 更新时
cou_course Cname, Cno meimaobingle course Cname, Cno CASCADE CASCADE
cou_inf Sno meimaobingle stu_inf Sno CASCADE CASCADE

奖惩信息表(stu_san)

字段名 字段类型 小数点 是否主键 是否为空 是否外键 备注
id int 奖惩 ID
Sno Varchar(6) 学号
Sname Varchar(10) 姓名
Reward Varchar(100) 奖励信息
Punish Varchar(100) 惩罚信息

外键

字段 被引用的模式 被引用的表(父) 被引用的字段 删除时 更新时
san-inf Sno, Sname meimaobingle stu_inf Sno, Sname CASCADE CASCADE

用户信息表(login)

字段名 字段类型 小数点 是否主键 是否为空 是否外键 备注
username Varchar(10) 用户名
password Varchar(10) 密码

学生信息视图

  1. CREATE ALGORITHM = UNDEFINED DEFINER = `root` @`localhost` SQL SECURITY DEFINER VIEW `studentview` AS SELECT
  2. `stu_inf`.`Sno` AS `Sno`,
  3. `stu_inf`.`Sname` AS `Sname`,
  4. `stu_inf`.`Sclass` AS `Sclass`,
  5. `stu_inf`.`Smajor` AS `Smajor`
  6. FROM `stu_inf`

查询指定学生成绩单存储过程

  1. CREATE DEFINER=`root`@`localhost` PROCEDURE `pd_select_stu_cou_by_Sno`(S_no varchar(6))
  2. BEGIN
  3. select Sno,Cno,Grade from stu_cou where Sno=S_no;
  4. END

触发器

·添加学生时班级人数自动 +1

  1. CREATE DEFINER = `root` @`localhost` TRIGGER `stu_jia` AFTER INSERT ON `stu_inf` FOR EACH ROW
  2. UPDATE class SET classsum = classsum + 1
  3. WHERE new.Smajor = majorname AND new.sclass = classnum;

删除学生时班级人数自动-1

  1. CREATE DEFINER = `root` @`localhost` TRIGGER `stu_shan` BEFORE DELETE ON `stu_inf` FOR EACH ROW
  2. UPDATE class SET classsum = classsum - 1
  3. WHERE old.Smajor = majorname AND old.sclass = classnum;;

修改学生班级时旧班级自动-1,新班级自动 +1

  1. CREATE DEFINER = `root` @`localhost` TRIGGER `stu_geng` AFTER UPDATE ON `stu_inf` FOR EACH ROW
  2. BEGIN
  3. UPDATE class SET classsum = classsum + 1
  4. WHERE new.Smajor = majorname AND new.sclass = classnum;
  5. UPDATE class SET classsum = classsum - 1
  6. WHERE old.Smajor = majorname AND old.sclass = classnum;
  7. END;

四、运行结果和测试

运行界面及其效果图

对在调试中发现的问题进行说明

前期数据库设计时部分数据库用户自定义约束缺失,导致一些不符合逻辑,不正确的数据也能被写进数据库中;后来在程序中增加了相关的约束判断条件保证数据的正确性和一致性。

五、课程设计总结

两个星期的时间非常快就过去了,这两个星期不敢说自己有多大的进步,获得了多少知

识,但起码是了解了项目开发的部分过程。虽说上过数据库上过 Java 等相关的课程,但是没有亲身经历过相关的设计工作细节。这次实习证实提供了一个很好的机会。

通过这次课程设计发现这其中需要的很多知识我们没有接触过,去图书馆查资料的时候,发现我们前边所学到的仅仅是皮毛,还有很多需要我们掌握的东西我们根本不知道。同时也发现有很多已经学过的东西我们没有理解到位,不能灵活运用于实际,不能很好的用来解决问题,这就需要我们不断的大量的实践,通过不断的自学,不断地发现问题,思考问题,进而解决问题。在这个过程中我们将深刻理解所学知识,同时也可以学到不少很实用的东西。

从各种文档的阅读到开始的需求分析、概念结构设计、逻辑结构设计、物理结构设计。

亲身体验了一回系统的设计开发过程。很多东西书上写的很清楚,貌似看着也很简单,思路非常清晰。但真正需要自己想办法去设计一个系统的时候才发现其中的难度。经常做到后面突然就发现自己一开始的设计有问题,然后又回去翻工,在各种反复中不断完善自己的想法。

我想有这样的问题不止我一个,事后想想是一开始着手做的时候下手过于轻快,或者说

是根本不了解自己要做的这个系统是给谁用的。因为没有事先做过仔细的用户调查,不知道整个业务的流程,也不知道用户需要什么功能就忙着开发,这是作为设计开发人员需要特别警惕避免的,不然会给后来的工作带来很大的麻烦,甚至可能会需要全盘推倒重来。所以以后的课程设计要特别注意这一块的设计。

上传的附件 cloud_download 大学生学籍管理.zip ( 1.25mb, 18次下载 ) cloud_download 《数据库原理与应用》课程设计报告.doc ( 925.18kb, 14次下载 )
error_outline 下载需要10点积分
eject