高校学籍管理系统
高校学籍管理系统
高校学籍管理系统
功能要求:
实现学生信息 、班级、院系、专业等的管理;
实现课程、学生成绩信息管理;
实现学生的奖惩信息管理;
创建规则用于限制性别项只能输入“男”或“女”;
创建视图查询各个学生的学号、姓名、班级、专业、院系;
创建存储过程查询指定学生的成绩单;
创建触发器当增加、删除学生和修改学生班级信息时自动修改相应班级学生人数;
建立数据库相关表之间的参照完整性约束。
er图
长方形90x40
椭圆80x50
菱形 55x50
思路
根据管理系统功能要求需要创建对应的表
考虑到以后以后数据量会变得庞大,达到表存储瓶颈使用分表方式
创建数据库并指定默认字符集
1 | create database yyt default character set utf8mb4; |
创建学校院系表,专业表,班级表,学生表,课程表,成绩表。
当中设置对应的主键外键关系,并设置了所有表中id字段为表的主键,唯一且自增,学生表中性别选用enum数据类型只允许选男,女,每个表都有对应的字段与别的表存在外键关系并添加级联删除和级连更新,指定表的默认字符集为utf8mb4(MySQL官方推荐)。
表的结构设计如下:
院系表结构:id-name
- 分别对应:院系id-院系名称
1 | create table yuanxi(id int primary key auto_increment,name varchar(30) not null) default charset=utf8mb4 comment='院系表'; |
专业表结构(major):id-name-y_id
- 分别对应专业id-专业名称-院系id
1 | create table major(id int primary key auto_increment,name varchar(30) not null,y_id int,constraint yuanxi_major_id foreign key(y_id) references yuanxi(id) on update cascade on delete cascade) default charset=utf8mb4 comment='专业表'; |
**班级表结构(class)**:id-name-su-z_id
- 分别对应:班级id-班级名称-总人数-专业id
1 | create table class(id int primary key auto_increment,name varchar(20) not null,su int,z_id int,constraint major_class_id foreign key(z_id) references major(id) on update cascade on delete cascade)default charset=utf8mb4 comment='班级表'; |
**学生表结构(student)**:id-name-sex-c_id
- 分别对应:学生id-学生名称-性别-班级id
1 | create table student(id int primary key auto_increment,name varchar(20) not null,sex enum('男','女'),c_id int,constraint class_student_id foreign key(c_id) references class(id) on update cascade on delete cascade)default charset=utf8mb4 comment='学生表'; |
课程表结构(lesson): id-name
- 分别对应:课程号-课程名
1 | create table lesson(id int primary key auto_increment,name varchar(20) not null)default charset=utf8mb4 comment='课程表'; |
成绩表构(score): student_id-lesson_id-score
- 分别对应:学生id-课程号-成绩
1 | create table score(student_id int,lesson_id int,score int(3),constraint student_score_id foreign key(student_id) references student(id) on update cascade on delete cascade,constraint lesson_score_id foreign key(lesson_id) references lesson(id) on update cascade on delete cascade)default charset=utf8mb4 comment='成绩表'; |
学籍信息表(sl):stud_id-sta-yea
- 分别对应:学号-学籍状态-年制
1 | create table sl(stud_id int,sta enum('注册','毕业','保留') not null,yea enum('二','三','五') not null,constraint sl_stud_id foreign key(stud_id) references student(id) on update cascade on delete cascade)default charset=utf8mb4 comment='学籍信息表'; |
学籍日志表(sl_log): set_id-set_time-set_type-set_c
- 分别对应:操作id(对应学生id)-操作时间-操作类型-操作内容
创建表
1 | create table sl_log(set_id int,set_time datetime not null,set_type varchar(20) not null comment 'update\delete',set_c varchar(500)) default charset=utf8mb4 comment='学籍日志表'; |
奖惩信息表(re):id-re_id-re_jname-re_cname
- 分别对应:id-学号-奖励信息-惩罚信息
1 | create table re(id int primary key auto_increment,re_id int,re_jname varchar(300),re_cname varchar(300),constraint student_re_id foreign key(re_id) references student(id) on update cascade on delete cascade)default charset=utf8mb4 comment='奖惩信息表'; |
添加模拟数据
1 | insert into yuanxi(name) values('电子信息工程'),('机电工程'); |
功能
实现学生信息 、班级、院系、专业等的管理
管理基本就是增删改的操作,这个跟之前创表的表结构相关,id字段设计表的时候已经是自增,方便管理,所以id不支持修改,添加字段时也不需要填写字段的id
根据表结构班级信息,表内包含这个班级学生的总人数,后面创建的有对应的触发器,会实时更新班级人数信息,所以不建议对班级总人数字段进行修改,所以在对班级信息的管理,新增时不能提前设定和修改时不能修改总人数字段,新增时字段默认为null,插入数据后会自动更新数据
增加
1 | create procedure y1(in b int,in b1 varchar(30),in b2 int,in b3 int) |
删除
注意:创建表的时候每个表之间都有相应的外键关系,并添加了级联删除和级连更新,谨慎操作!
1 | create procedure y2(in c int,in c2 int) |
修改
1 | create procedure y3(in a int,in a1 int,in a2 varchar(30),in a3 int) |
实现课程、学生成绩信息管理
- 此存储过程包含对两个表的增删改操作
1 | create procedure y6(y int,y1 int,y2 int,y3 int,y4 int,y5 varchar(30)) |
实现学生的奖惩信息管理
1 | create procedure y7(y int,y1 int,y2 int,y3 varchar(300),y4 varchar(300)) |
通过学生id查询学生的所有奖惩信息
1 | create procedure y8(y int) |
创建视图查询各个学生的学号、姓名、班级、专业、院系
1 | create view zong as select a.id 学生id,a.name 学生姓名,b.name 班级名称,c.name 专业名称,d.name 院系名称 from student a,class b,major c,yuanxi d where a.c_id=b.id&&b.z_id=c.id&&c.y_id=d.id; |
select a.name 学生姓名,b.name 班级名,c.name 课程名,d.score 成绩from student a,class b,lseeon c,score d where d.student_id=a.id && d.class_id=b.id && d.lesson_id=c.id && a.c_id=b.id;
select e.name,f.name,a.name,b.name,c.name,d.score from class a,student b,lesson c,score d,yuanxi e,major f where b.c_id=a.id && d.student_id=b.id && d.lesson_id=c.id &&a.z_id=f.id && f.y_id=e.id;
创建存储过程查询指定学生的成绩单
- 根据学生的id查询学生所参加的所有考试的成绩
1 | create procedure y5(in s int) |
创建触发器当增加、删除学生和修改学生班级信息时自动修改相应班级学生人数
添加,自动修改各相应班级总人数
1 | 方法1: |
删除,自动修改各相应班级总人数
1 | 方法1: |
修改,自动修改各相应班级总人数
1 | 方法1: |
学籍管理,保留日志
学籍信息表(sl)结构:stu_id-学籍状态-年制
创建视图,查询所有学生的学籍状态
1 | create or replace view sl_st as select a.name 院系,b.name 专业,c.name 班级,d.id 学号,d.name 姓名,e.sta 学籍,e.yea 年制 from yuanxi a,major b,class c,student d,sl e where e.stud_id=d.id && d.c_id=c.id && c.z_id=b.id && b.y_id=a.id; |
管理学籍信息
1 | create procedure y9(y int,y1 int,y2 varchar(10),y3 varchar(10),y4 int) |
根据对学籍信息表的管理,其中学籍的修改和删除属于高危操作。创建触发器,当对表进行修改或删除时,自动触发并记录操作信息到日志表
修改操作时触发
1 | create trigger update_sl |
删除操作时触发
1 | create trigger delete_sl |
实现效果演示图: