目录
1.概述1.1数据库设计选题背景1.2功能要求1.3系统功能解决的问题2.需求分析3.概念结构设计3.1抽象出系统的实体3.2设计实体属性图3.3全局E-R图4.逻辑结构设计5.数据库物理设计与实施5.1数据库关系图5.2表的创建6.数据操作要求及实现6.1数据查询6.2视图6.3触发器6.4存储过程说明:本博客为本人期末课程设计,可供学习、借鉴和参考,不可转载。文章最后有百度网盘链接。
1.概述
1.1数据库设计选题背景
随着信息化时代的到来,人们的生活发生了巨大的变化,信息化时代带给了人们更多的处理数据的方式。学生学籍管理是一个非常繁琐且复杂的工作,其中的原因就是涉及到大量的学生学籍数据信息,这样庞大的一个数据群管理起来就想当麻烦,在传统的数据信息管理模式下,工作效率不仅低下,而且数据在存储、更新、删改等操作上会出现错误。基于以上出现的问题,开发一个学籍管理系统就显得很重要。
1.2功能要求
一:实现学生信息、班级、院系、专业等的管理;
二:实现课程、学生成绩信息管理;
三:实现学生的奖惩信息管理;
四:建立数据库相关表之间的参照完整性约束。
五:创建规则用于限制性别项只能输入“男”或“女”;
六:创建视图查询各个学生的学号、姓名、班级、专业、院系;
七:创建触发器当增加、删除学生和修改学生班级信息时自动修改相应班级学生人数;
八:创建存储过程查询指定学生的成绩单;
1.3系统功能解决的问题
一:提高管理人员的工作效率。
二:对大量的数据信息进行统筹规划
三:降低处理数据信息时出现的错误率。
四:方便系统的后期维护。
2.需求分析
该高校学籍管理系统主要是实现对大学在校生的学籍信息的系统化管理,具体的功能涉及实现对学生的基本信息、班级、专业、院系等的查询、修改和删除等功能,同时也会实现课程、学生成绩信息管理、实现学生的奖惩信息管理。
同时该高校学籍管理系统要创建学生信息视图,具体实现如下:
一:创建学生基本信息视图,实现查询各个学生的学号、姓名、班级、专业、院系。
二:创建学生成绩视图,实现查询各个学生的学号、姓名、课程、成绩。
三:创建学生奖惩视图,实现查询各个学生的学号、姓名、班级、专业、院系、奖惩号、奖惩名、奖惩方案。
该高校学籍管理系统要创建触发器当增加、删除学生和修改学生班级信息时自动修改相应班级学生人数。
最后,该高校学籍管理系统要创建存储过程查询指定学生的成绩单
该学籍管理系统会对学生信息进行系统化管理,在数据和数据之间实现关联性,较大程度的满足用户需求。
3.概念结构设计
3.1抽象出系统的实体
根据设计学生管理系统的需要,可以抽象出以下实体:
(1)学生信息
(2)班级信息
(3)专业信息
(4)院系信息
(5)课程信息
(6)课程成绩信息
(7)奖惩信息
3.2设计实体属性图
(1).学生实体属性图
(2).班级实体属性图
(3).专业实体属性图
(4).院系实体属性图
(5).课程实体属性图
(6).课程成绩实体属性图
(7).奖惩实体属性图
3.3全局E-R图
4.逻辑结构设计
关系数据模式
(1)学生(学号,姓名,性别,班级编号,专业编号,院系编号,民族,年龄,出生日期,家庭地址,入学时间)
(2)班级(班级编号,专业编号,院系编号,班级名称,人数)
(3)专业(专业编号,院系编号,专业名称)
(4)院系(院系编号,院系名称)
(5)课程(课程号,课程名,学分,学时)
(6)课程成绩(课程号,学号,成绩)
(7)奖惩(奖惩号,学号,专业编号,院系编号,奖惩名称,奖惩方案)
5.数据库物理设计与实施
5.1数据库关系图
根据概念结构设计和逻辑结构的内容,可以将此学籍管理系统设计出7个表,分别为“Student表”、“Class表”、“Major表”、“Department表”、“Course表”、“Grader表”和“Award_punish表”。具体如下:
这7张表的数据库关系图如下:
5.2表的创建
1.Department表 (院系表)
2.Major表 (专业表)
3.Class表 (班级表)
4.Student表 (学生表)
5.Course表 (课程表)
6.Grade表 (课程成绩表)
7.Award_punish表 (奖惩表)
6.数据操作要求及实现
6.1数据查询
1.查询年龄小于20的学生的基本信息,SQL语句如下:
select * from Student where age < 20
查询结果如下图所示。
2.查询班级为“软工一班”,且家庭住址的省会为“河南”的学生基本信息,SQL语句如下:
select * from Student where Cid = 'RG1' and location like '河南%'
查询结果如下图所示。
3.查询选修了“SJK3”课程的学生的学号、姓名、成绩,其中按照成绩从大到小的顺序排列,SQL语句如下:
select Student.id,name,Ggrade from Student,Gradewhere Student.id = Grade.id and Grade.Kid = 'SJK3' order by Ggrade desc
查询结果如下图所示。
4.查询选修“大学英语”课程所有学生的平均成绩,SQL语句如下:
select avg(Ggrade) 平均成绩 from Grade,Course where Grade.Kid = Course.Kid and Course.Kname = '大学英语'
查询结果如下图所示。
5.查询获得“三好学生”称号的学生的学号、姓名、专业编号、院系编号,SQL语句如下:
select Student.id 学号,name 姓名,Mname 专业名称,Dname 院系名称from Student,Major,Department,Award_punish where Student.id = Award_punish.idand Major.Mid = Award_punish.Midand Department.Did = Award_punish.Did and Aname = '三好学生'
查询结果如下图所示。
6.将家庭地址为“江苏南京”的学生的家庭地址更改为“河南郑州”,SQL语句如下:
update Student set location = '河南郑州' where location = '江苏南京'
更改结果如下图所示。
更改前:
更改后:
7.将课程“大学英语"的学时更改为68,SQL语句如下:
update Course set Kperiod = 68 where Kname = '大学英语'
更改结果如下图所示。
更改前:
更改后:
8.删除学号为“”学生的奖惩信息,SQL语句如下:
delete from Award_punish where id = '30321'
删除结果如下图所示。
删除前:
删除后:
6.2视图
1:创建学生基本信息视图,实现查询各个学生的学号、姓名、班级编号、专业编号、院系编号,SQL语句如下:
create view A_Student(id,name,Cname,Mname,Dname)asselect id,name,Cname,Mname,Dnamefrom Student,Class,Major,Departmentwhere Class.Did = Department.Didand Class.Mid = Major.Midand Student.Did = Department.Didand Student.Mid = Major.Midwith check option
视图的执行结果如下:
2:创建学生成绩视图,实现查询各个学生的学号、姓名、课程、成绩,SQL语句如下:
create view B_Grade(id,name,Kname,Ggrade)asselect Student.id,name,Kname,Ggradefrom Student,Grade,Coursewhere Student.id = Grade.idand Grade.Kid = Course.Kidwith check option
视图的执行结果如下:
3:创建学生奖惩视图,实现查询各个学生的学号、姓名、班级、专业、院系、奖惩号、奖惩名、奖惩方案,SQL语句如下:
create view C_Award_punish(id,name,Cname,Mname,Dname,Aid,Aname,Aproject)asselect Student.id,name,Cname,Mname,Dname,Aid,Aname,Aprojectfrom Student,Class,Major,Department,Award_punishwhere Student.id = Award_punish.idand Award_punish.Mid = Major.Midand Award_punish.Did = Department.Didand Class.Did = Department.Didand Class.Mid = Major.Midwith check option
视图的执行结果如下:
6.3触发器
1.创建触发器,当增加学生班级信息时自动修改相应班级学生人数,SQL语句如下:
create trigger insert_stuon Student for insertasbegindeclare @cid varchar(30)select @cid=Cid from insertedupdate Class set Cnumber = Cnumber + 1 where Cid = @cidend
在Student表中插入一条数据:
insert into Student values('30332','陈思宇','男','RG1','RJ11','RJ111','汉族',20,'2001-02-03','海南文昌','-09-30')
执行结果如下:
2.创建触发器,当删除学生班级信息时自动修改相应班级学生人数,SQL语句如下:
create trigger delete_stuon Student for deleteasbegindeclare @cid varchar(30)select @cid=Cid from deletedupdate Class set Cnumber = Cnumber - 1 where Cid = @cidend
在Student表中删除一条数据:
delete from Student where name = '陈思宇'
执行结果如下:
3.创建触发器,当修改学生班级信息时自动修改相应班级学生人数,SQL语句如下:
create trigger update_stuon Student for updateasbegindeclare @cid1 varchar(30)declare @cid2 varchar(30)--存放更新前的数据select @cid1=Cid from deleted--存放更新后的数据select @cid2=Cid from insertedupdate Class set Cnumber = Cnumber - 1 where Cid = @cid1update Class set Cnumber = Cnumber + 1 where Cid = @cid2end
在Student表中更改一条数据,将王小虎的班级“RG1”更改为“YY1”
update Student set Cid = 'YY1' where name = '王小虎'
执行结果如下:
更改前:
更改后:
6.4存储过程
1.创建存储过程查询指定学生的成绩单,SQL语句如下:
create procedure pro_grade@id varchar(30)=null,@name varchar(30)=nullasif(@id is null or @name is null )begin print '请输入学号与姓名!'endelse if((select name from Student where id = @id) != @name or (select id from Student where name = @name) != @id )beginprint '输入有误!'endelsebeginselect Student.id,name,Kname,Ggradefrom Student,Grade,Coursewhere Student.id = Grade.idand Grade.Kid = Course.Kidand name = @nameendgo
执行结果如下:
1.当未输入学号或姓名时,提示“请输入学号与姓名!”
2.当输入信息有误时,提示“输入有误!”
3.当输入正确的学号和姓名时,打印出该学生的成绩单。
完整数据库课程设计和源码文件:
链接:/s/1dzVXTMfNUcJblV81xb3g8g
提取码:xha8
原创不易,希望大家能给文章点个赞,再关注我一下,有了你的鼓励,优质文章不断更新哦。