本课题下的功能要求有:
实现学生信息、班级、院系、专业等的管理
实现课程、学生成绩信息管理
实现学生的奖惩信息管理
创建规则用于限制性别项只能输入“男”或“女”
创建视图查询各个学生的学号、姓名、班级、专业、院系
创建存储过程查询指定学生的成绩单
创建触发器当增加、删除学生和修改学生班级信息时自动修改相应班级、学生人数
建立数据库相关表之间的参照完整性约束
其中我主要负责设计存储过程,创建用于修改学生班级信息时自动修改相应班级的学生人数的触发器,选课管理模块(选课、退课及查课),成绩管理模块(增、删、改、查成绩),奖惩管理模块(增、删、改、查奖惩信息)。
其余模块有 ×× 负责设计表结构,设计主页面,院系管理模块(增、删、查院系信息),专业管理模块(增、删、查专业信息),班级管理模块(增、删班级信息,班级人数查询);××× 负责设计视图,检查数据库各表参照完整性,数据库 JDBC 连接,学生管理模块(增、删、改、查学生信息),课程管理模块(增、删、改、查课程信息)。
学生管理模块:创建学生信息表(stu_inf)可以实现对学生信息的添加、查询、修改、删除操作
课程管理模块:创建课程信息表(course)可以实现对课程信息的添加、查询、修改、删除操作
院系管理模块:创建院系信息表(department)可以实现对院系信息的添加、查询、删除操作
专业管理模块:创建专业信息表(major)可以实现对专业信息的添加、查询、删除操作
班级管理模块:创建班级信息表(class)可以实现对班级信息的添加、删除、查询班级人数操作
选课管理模块:创建选课信息表(stu_cou)可以实现对选课信息的添加、查询、删除操作
成绩管理模块:对选课信息表(stu_cou)可以实现对成绩信息的添加、查询、修改、删除操作
奖惩管理模块:创建奖惩信息表(stu_san)可以实现对奖惩信息的添加、查询、修改、删除操作
数据的完整性,准确性:录入数据采用表格方式,限制录入数据类型及取值范围以保证数据的完整性及准确性,系统具有部分反悔功能,系统备有的修改功能均可反悔
数据完成的时间性:如成绩的录入,仅当选课料录资入后方可录入成绩
院系表(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))
用户界面:要求简单实用,操作方便
软件接口:使用 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