基于Java和MySQL实现的大学生学籍管理系统(毕业设计附完整项目代码)

一、设计任务

本课题下的功能要求有:

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

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

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

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

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

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

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

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

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

其余模块有 ×× 负责设计表结构,设计主页面,院系管理模块(增、删、查院系信息),专业管理模块(增、删、查专业信息),班级管理模块(增、删班级信息,班级人数查询);××× 负责设计视图,检查数据库各表参照完整性,数据库 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)

密码

学生信息视图

CREATE ALGORITHM = UNDEFINED DEFINER = `root` @`localhost` SQL SECURITY DEFINER VIEW `studentview` AS SELECT
    `stu_inf`.`Sno` AS `Sno`,
    `stu_inf`.`Sname` AS `Sname`,
    `stu_inf`.`Sclass` AS `Sclass`,
    `stu_inf`.`Smajor` AS `Smajor`
FROM `stu_inf`

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

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

触发器

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

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

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

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

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

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

四、运行结果和测试


运行界面及其效果图

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

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

完整代码:https://download.csdn.net/download/qq_38735017/87394449

猜你喜欢

转载自blog.csdn.net/pythonyanyan/article/details/128748130#comments_30582284