高校学籍管理系统
**
一、课程设计的教学目的
**
1、使学生掌握数据库的基本概念,结合实际的操作和设计,巩固课堂教学内容;
2、使学生掌握数据库系统的基本概念、原理和技术,将理论与实际相结合,应用现有的数据建模工具和数据库管理系统软件,规范、科学地完成一个小型数据库的设计与实现
3、把理论课与实验课所学内容做一综合,并在此基础上强化学生的实践意识、提高其实际动手能力。
基本功能要求:
实现学生信息、班级、院系、专业等的管理;
实现课程、学生成绩信息管理;
实现学生的奖惩信息管理;
创建规则用于限制性别项只能输入“男”或“女”;
创建视图查询各个学生的学号、姓名、班级、专业、院系;
创建存储过程查询指定学生的成绩单;
创建触发器当增加、删除学生和修改学生班级信息时自动修改相应班级学生人数;
建立数据库相关表之间的参照完整性约束。
1.1:需求分析
随着信息化时代的到来,人们的生活发生了巨大的变化,信息化时代带给了人们更多的处理数据的方式。学生学籍管理是一个非常繁琐且复杂的工作,其中的原因就是涉及到大量的学生学籍数据信息,这样庞大的一个数据群管理起来就想当麻烦,在传统的数据信息管理模式下,工作效率不仅低下,而且数据在存储、更新、删改等操作上会出现错误。基于以上出现的问题,开发一个学籍管理系统就显得很重要。
1.2:功能要求
该高校学籍管理系统主要是实现对大学在校生的学籍信息的系统化管理,具体的功能涉及实现对学生的基本信息、班级、专业、院系等的查询、修改和删除等功能,同时也会实现课程、学生成绩信息管理、实现学生的奖惩信息管理。
同时该高校学籍管理系统要创建学生信息视图,具体实现如下:
1.2.1创建学生基本信息视图,实现查询各个学生的学号、姓名、班级、专业、院系。
1.2.2该高校学籍管理系统要创建触发器当增加、删除学生和修改学生班级信息时自动修改相应班级学生人数。
1.2.3该高校学籍管理系统要创建存储过程查询指定学生的成绩单
1.2.4创建存储过程查询指定学生的成绩单;
该学籍管理系统会对学生信息进行系统化管理,在数据和数据之间实现关联性,较大程度的满足用户需求。
1.3:系统功能解决的问题
1.3.1提高管理人员的工作效率。
1.3.2对大量的数据信息进行统筹规划
1.3.3降低处理数据信息时出现的错误率。
1.3.4方便系统的后期维护。
**
二:数据库概念结构设计(E-R图)
**
根据需求分析结果,学生、教师、课程、题目、班级、专业、课程成绩、奖惩可建模为基本实体集。
2.1:关系数据模式
各基本实体集的属性定义如下:
(1)学生实体集。其属性有:(学号,姓名,性别,班级编号,院系编号,民族,年龄,出生日期,家庭地址,入学时间)
(2)班级实体集。其属性有:(班级编号,专业编号,班级名称,人数)
(3)专业实体集。其属性有:(专业编号,院系编号,专业名称)
(4)院系实体集。其属性有:(院系编号,院系名称)
(5)课程实体集。其属性有:(课程号,课程名,学分,学时)
(6)课程成绩实体集。其属性有:(课程号,学号,成绩)
(7)奖惩实体集。其属性有:(奖惩号,学号,奖惩名称,奖惩方案)
2.2:定义联系集及属性:
- 选课联系集:它是学生实体集与课程实体集的多对多联系集,其描述属性有:成绩,课程编号,学生编号
- 获得联系集:它是学生实体集与奖惩实体集的一对多联系集,没有联系属性。
- 共有联系集:它是院系实体集与学生实体集的一对多联系集,没有联系属性。
- 隶属联系集:它是班级实体集与学生实体集的一对多联系集,没有联系属性。
- 含有联系集:它是专业实体集和班级实体集的一对多联系集,没有联系属性。
- 包含联系集:它是院系实体集与专业实体集的一对多联系集,没有联系属性。
2.3:E-R图
**
三:数据库逻辑结构设计
**
(下划线加粗代表主码,斜体加粗代表外码 )
(1)学生Student表:由学生关系实体集转化而来。
学生(学号,姓名,性别,班级编号,院系编号,民族,年龄,出生日期,家庭地址,入学时间;)
属性名称数据类型属性描述约束条件Snochar(16)学号primary keySnamevarchar(16)姓名not nullSsexchar(2)性别not nullSageint年龄not nullSbirthDatet出生日期not nullSlocationvarchar(50)籍贯not nullSnationvarchar(10)民族not nullSadmissionDate入学日期not nullCnochar(8)班级编号foreign keyDnochar(8)院系编号foreign key
(2)院系(Depart)表:由院系实体集转化而来。
院系(院系编号,院系名称)
属性名称数据类型属性描述约束条件Dnochar(8)院系编号not nullDnamevarchar(30)院系名称not null
(3)班级Class表:由班级实体集转化而来。
班级(班级编号,院系编号,班级名称,人数)
属性名称数据类型属性描述约束条件Cnochar(8)班级编号primary keyCnamevarchar(50)班级名称not nullCnumberInt班级人数not nullMnochar(8)专业编号foreign key
(4)专业Major表:由专业实体集转化而来。
专业(专业编号,院系编号,专业名称);
属性名称数据类型属性描述约束条件Mnochar(8)专业编号primary keyMnamevarchar(30)专业名称not nullDnochar(8)院系编号foreign key
(5)课程Course表:由课程实体集转化而来。
课程(课程号,课程名,学分,学时)
属性名称数据类型属性描述约束条件Knochar(8)课程编号primary keyKnamechar(20) 课程名称not nullKperiodsmallint 学时not nullKcreditsmallint 学分not null
(6)成绩Grade表:由成绩实体集转化而来。
课程成绩(课程号,学号,成绩)
属性名称数据类型属性描述约束条件Knochar(8)课程编号primary key(foreign key)Snochar(16)学号primary key(foreign key)Ggradeint成绩
(7)奖惩(Award_punish) 表: 奖惩实体集转化的关系模式。
奖惩(奖惩号,学号,等级,奖惩名称,奖惩方案)
属性名称数据类型属性描述约束条件APnochar(16)学号foreign keyAPlevelvarchar(30)等级not nullAPnamevarchar(30)奖惩名not nullAPprojectvarchar(100)奖惩方案not null
四:模式求解
(1)学生(学号,姓名,性别,班级编号,专业编号,院系编号,民族,年龄,出生日期,家庭地址,入学时间)
分析Student关系模式得函数依赖关系为:
学号–>{姓名,性别,班级编号,专业编号,院系编号,民族,年龄,出生日期,家庭地址,入学时间}
满足BCNF范式。
(2)班级(班级编号,专业编号,院系编号,班级名称,人数)
分析班级关系模式得函数依赖关系为:
班级编号–>{专业编号,院系编号,班级名称,人数}
满足BCNF范式。
(3)课程(课程号,课程名,学分,学时)
分析课程关系模式得函数依赖关系为:
课程号–>{课程名,学分,学时}
满足BCNF范式。
(4)专业(专业编号,院系编号,专业名称)
分析专业关系模式得函数依赖关系为:
专业编号–>{院系编号,专业名称}
满足BCNF范式。
(5)院系(院系编号,院系名称)
分析院系关系模式得函数依赖关系为:
院系编号–>{院系名称}
满足BCNF范式。
(6) 课程成绩(课程号,学号,成绩)
分析课程成绩关系模式得函数依赖关系为:
(课程号,学号)–>{ 成绩}
满足BCNF范式。
(7)奖惩(奖惩号,学号,等级,奖惩名称,奖惩方案)
分析奖惩关系模式得函数依赖关系为:
奖惩号–>{学号,等级,奖惩名称,奖惩方案}
满足BCNF范式。
五:表的设计
(1) 学生实体集。其属性有:(学号,姓名,性别,班级编号,院系编号,民族,年龄,出生日期,家庭地址,入学时间)
createtable Student(
Sno char(16)primarykey,
Sname varchar(16)notnull,
Ssex char(2)notnull,check(Ssex='男'or Ssex='女'),
Sage intnotnull,
Snation varchar(20)notnull,
Sbirth datenotnull,
Slocation varchar(50)notnull,
Sadmission datenotnull,
Dno char(8)notnull,
Cno char(8)notnull,foreignkey(Dno)references Major(Dno),foreignkey(Cno)references Class(Cno));
(2) 班级实体集。其属性有:(班级编号,专业编号,班级名称,人数)
createtable Class(
Cno char(8)notnullprimarykey,
Cname varchar(50)notnull,
Cnumber intnotnull,
Mno char(8)notnull,foreignkey(Mno)references Major(Mno));
(3)专业实体集。其属性有:(专业编号,院系编号,专业名称)
createtable Major(
Mno char(8)primarykey,
Mname varchar(30)notnull,
Dno char(8)notnull,foreignkey(Dno)references Depart(Dno));
(4)院系实体集。其属性有:(院系编号,院系名称)
createtable Depart(
Dno char(8)notnullprimarykey,
Dname varchar(30)notnull);
(5) 课程实体集。其属性有:(课程号,课程名,学分,学时)
createtable Course(
Kno char(8)notnullprimarykey,
Kname varchar(20)notnull,
Kperiod smallintnotnull,
Kcredit smallintnotnull);
(6)课程成绩实体集。其属性有:(课程号,学号,成绩)
createtable Grade(
Kno char(8)notnull,
Sno char(16)notnull,
Ggrade int,primarykey(Sno,Kno),foreignkey(Sno)references Student(Sno),foreignkey(Kno)references Course(Kno));
(7)奖惩实体集。其属性有:(奖惩号,学号,奖惩名称,奖惩方案)
createtable Award_Punish(
APno char(8)notnullprimarykey,
APname varchar(30)notnull,
APproject varchar(100)notnull,
APlevel varchar(30)notnull,
Sno char(16)notnull,foreignkey(Sno)references Student(Sno));
六:功能设计
1、 创建视图查询各个学生的学号、姓名、班级、专业、院系;
createview A_Student(Sno,Sname,Cname,Mname,Dname)asselect Sno,Sname,Cname,Mname,Dname
from Student,Class,Major,Depart
where Class.Cno=Student.Cno
and Class.Mno=Major.Mno
and Student.Dno = Depart.Dno;
2、 创建存储过程查询指定学生的成绩单;
createprocedure pro_Ggrade
@Snochar(16)=null,@Snamevarchar(16)=nullasif(@Snoisnullor@Snameisnull)beginprint'请输入学号与姓名!'endelseif((select Sname from Student where Sno =@Sno)!=@Snameor(select Sno from Student where Sname =@Sname)!=@Sno)beginprint'输入有误!'endelsebeginselect Student.Sno,Sname,Kname,Ggrade
from Student,Grade,Course
where Student.Sno = Grade.Sno
and Grade.Kno = Course.Kno
and Sname =@Snameend
go
检验
use StudentManagement
exec pro_Ggrade '20204091102','内马尔'
3、 创建触发器当增加、删除学生和修改学生班级信息时自动修改相应班级学生人数;
a.创建触发器,当增加学生班级信息时自动修改相应班级学生人数
createtrigger insert_stu
on Student forinsertasbegindeclare@cnochar(8)select@cno=Cno from inserted
update Class set Cnumber = Cnumber +1where Cno =@cnoend
在Student表中插入一条数据:
insertinto Student values('20204091106','灏川','男',20,'汉族','2001-02-03','河南安阳','2020-09-30','2020401','01')
b.创建触发器,当删除学生班级信息时自动修改相应班级学生人数
createtrigger delete_stu
on Student fordeleteasbegindeclare@cnochar(8)select@cno=Cno from deleted
update Class set Cnumber = Cnumber -1where Cno =@cnoend
在Student表中删除一条数据
deletefrom Student where Sname ='灏川'
c.创建触发器,当修改学生班级信息时自动修改相应班级学生人数
createtrigger update_stu
on Student forupdateasbegindeclare@cno1char(8)declare@cno2char(8)
–存放更新前的数据
select@cno1=Cno from deleted
–存放更新后的数据
select@cno2=Cno from inserted
update Class set Cnumber = Cnumber -1where Cno =@cno1update Class set Cnumber = Cnumber +1where Cno =@cno2end
在Student表中更改一条数据,将灏川的班级“01”更改为“02”
update Student set Cno ='02'where Sname ='灏川'
4、 用户创建不同的登录名,对应不同的用户名,给予不同的权限
登陆名密码用户权限Teacher111T1查看,插入,修改student111S1查看
a.创建老师登录名,对应T1用户及授予的权限
create login teacher with password ='111'
createuser T1 for login teacher
use StudentManagement
grantselect,update,insertOn class
to T1
grantselect,update,insertOn Depart
to T1
grantselect,update,insertOn Award_Punish
to T1
grantselect,update,insertOn Major
to T1
grantselect,update,insertOn Grade
to T1
b. 创建学生登录名,对应S1用户及授予的权限
create login student with password ='111'
createuser S1 for login student
use StudentManagement
grantselectOn class
to S1
grantselectOn Depart
to S1
grantselectOn Award_Punish
to S1
grantselectOn Major
to S1
grantselectOn Grade
to S1
grantselectOn course
to S1
5、 完成如下功能
(1)查看某位学生的基本信息
select*from student where Sno='20204010116';
(2)查询年龄小于20的学生的基本信息,SQL语句如下:
select*from Student where Sage <20
(3)查询选修了“数据库系统”课程的学生的学号、姓名、成绩,其中按照成绩从大到小的顺序排列
select Student.Sno,Sname,Ggrade
from Student,Grade
where Student.Sno = Grade.Sno and Grade.Kno ='L01'orderby Ggrade desc
(4).查询选修“数据库系统”课程所有学生的平均成绩
select Course.Kname 课程名称,avg(Ggrade) 平均成绩
from Grade,Course
where Grade.Kno = Course.Kno
and Course.Kname ='数据库系统'GROUPBY Course.Kname
(5)将家庭地址为“河南”的学生的家庭地址更改为“江苏”
update Student set Slocation ='江苏'where Slocation ='河南'
(6) 删除学号为“”学生的奖惩信息
deletefrom Award_punish where Sno ='20204092106'
七:总结
经过一周的课程设计,我学到了很多知识,个人的能力有了很大的提高,
通过此次课程设计,使我更加扎实的掌握了有关数据库方面的知识,在设计过程中虽然遇到了一些问题,但经过不断的思考和检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。这次的课程设计使我学习到很多课堂上没有学习到的知识。也使我对常用画图软件、文档编辑等知识掌握得更加熟练。虽然课设已经完成,但是本系统还存在着不足,如系统十分简单,安全性问题没有很好的解决等。所以在今后的学习中我会继续努力完善自我,同学的帮助、指导老师的用心辅导和学校的精心安排使这个课题能够顺利进行。但是,由于时间仓促以及本人水平有限,本系统还有很多不完善之处,希望在此后的学习中可以不断将其优化。
版权归原作者 灏~川 所有, 如有侵权,请联系我们删除。