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表 (院系表)
列名 | 数据类型 | 约束 | 说明 |
---|
Did | varchar(30) | primary key | 院系编号 | Dname | varchar(30) | not null | 院系名称 |
2.Major表 (专业表)
列名 | 数据类型 | 约束 | 说明 |
---|
Mid | varchar(30) | primary key | 专业编号 | Did | varchar(30) | foreign key | 院系编号 | Mname | varchar(30) | not null | 专业名称 |
3.Class表 (班级表)
列名 | 数据类型 | 约束 | 说明 |
---|
Cid | varchar(30) | primary key | 班级编号 | Mid | varchar(30) | foreign key | 专业编号 | Did | varchar(30) | foreign key | 院系编号 | Cname | varchar(30) | not null | 班级名称 | Cnumber | int | not null | 班级人数 | 4.Student表 (学生表)
列名 | 数据类型 | 约束 | 说明 |
---|
id | varchar(30) | primary key | 学号 | name | varchar(30) | not null | 姓名 | sex | char(2) | not null | 性别 | Cid | varchar(30) | foreign key | 班级编号 | Mid | varchar(30) | foreign key | 专业编号 | Did | varchar(30) | foreign key | 院系编号 | nation | varchar(20) | not null | 民族 | age | int | not null | 年龄 | birthday | date | not null | 出生日期 | location | varchar(20) | not null | 家庭地址 | enroll | date | not null | 入学时间 |
5.Course表 (课程表)
列名 | 数据类型 | 约束 | 说明 |
---|
kid | varchar(30) | primary key | 课程编号 | Kname | varchar(30) | not null | 课程名称 | Kcredit | int | not null | 学分 | Kperiod | int | not null | 学时 |
6.Grade表 (课程成绩表)
列名 | 数据类型 | 约束 | 说明 |
---|
Kid | varchar(30) | primary key | 课程编号 | id | varchar(20) | primary key | 学号 | Ggrade | int | not null | 成绩 | 7.Award_punish表 (奖惩表)
列名 | 数据类型 | 约束 | 说明 |
---|
Aid | varchar(20) | primary key | 奖惩号 | id | varchar(20) | foreign key | 学号 | Mid | varchar(30) | foreign key | 专业编号 | Did | varchar(30) | foreign key | 院系编号 | Aname | varchar(30) | not null | 奖惩名 | Aproject | varchar(100) | not null | 奖惩方案 |
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,Grade
where 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.id
and Major.Mid = Award_punish.Mid
and 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 = '201130321'
???????? 删除结果如下图所示。
???????? ???????? 删除前:
???????? ???????? 删除后:
6.2视图
1:创建学生基本信息视图,实现查询各个学生的学号、姓名、班级编号、专业编号、院系编号,SQL语句如下:
create view A_Student(id,name,Cname,Mname,Dname)
as
select id,name,Cname,Mname,Dname
from Student,Class,Major,Department
where Class.Did = Department.Did
and Class.Mid = Major.Mid
and Student.Did = Department.Did
and Student.Mid = Major.Mid
with check option
???????? 视图的执行结果如下:
2:创建学生成绩视图,实现查询各个学生的学号、姓名、课程、成绩,SQL语句如下:
create view B_Grade(id,name,Kname,Ggrade)
as
select Student.id,name,Kname,Ggrade
from Student,Grade,Course
where Student.id = Grade.id
and Grade.Kid = Course.Kid
with check option
???????? 视图的执行结果如下:
3:创建学生奖惩视图,实现查询各个学生的学号、姓名、班级、专业、院系、奖惩号、奖惩名、奖惩方案,SQL语句如下:
create view C_Award_punish
(id,name,Cname,Mname,Dname,Aid,Aname,Aproject)
as
select Student.id,name,Cname,Mname,Dname,Aid,Aname,Aproject
from Student,Class,Major,Department,Award_punish
where Student.id = Award_punish.id
and Award_punish.Mid = Major.Mid
and Award_punish.Did = Department.Did
and Class.Did = Department.Did
and Class.Mid = Major.Mid
with check option
???????? 视图的执行结果如下:
6.3触发器
1.创建触发器,当增加学生班级信息时自动修改相应班级学生人数,SQL语句如下:
create trigger insert_stu
on Student for insert
as
begin
declare @cid varchar(30)
select @cid=Cid from inserted
update Class set Cnumber = Cnumber + 1 where Cid = @cid
end
????????在Student表中插入一条数据:
insert into Student values('201130332','陈思宇','男','RG1','RJ11','RJ111','汉族',20,'2001-02-03','海南文昌','2020-09-30')
????????执行结果如下:
2.创建触发器,当删除学生班级信息时自动修改相应班级学生人数,SQL语句如下:
create trigger delete_stu
on Student for delete
as
begin
declare @cid varchar(30)
select @cid=Cid from deleted
update Class set Cnumber = Cnumber - 1 where Cid = @cid
end
????????在Student表中删除一条数据:
delete from Student where name = '陈思宇'
????????执行结果如下:
3.创建触发器,当修改学生班级信息时自动修改相应班级学生人数,SQL语句如下:
create trigger update_stu
on Student for update
as
begin
declare @cid1 varchar(30)
declare @cid2 varchar(30)
select @cid1=Cid from deleted
select @cid2=Cid from inserted
update Class set Cnumber = Cnumber - 1 where Cid = @cid1
update Class set Cnumber = Cnumber + 1 where Cid = @cid2
end
????????在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)=null
as
if(@id is null or @name is null )
begin
print '请输入学号与姓名!'
end
else if(
(select name from Student where id = @id) != @name
or (select id from Student where name = @name) != @id
)
begin
print '输入有误!'
end
else
begin
select Student.id,name,Kname,Ggrade
from Student,Grade,Course
where Student.id = Grade.id
and Grade.Kid = Course.Kid
and name = @name
end
go
???????? 执行结果如下: ????????1.当未输入学号或姓名时,提示“请输入学号与姓名!”
???????? 2.当输入信息有误时,提示“输入有误!”
????????3.当输入正确的学号和姓名时,打印出该学生的成绩单。 完整课程设计报告可加我Q:2533694604
|