高校学籍管理系统
**
一、课程设计的教学目的
**
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表:由学生关系实体集转化而来。
学生(学号,姓名,性别,班级编号,院系编号,民族,年龄,出生日期,家庭地址,入学时间;)
(2)院系(Depart)表:由院系实体集转化而来。
院系(院系编号,院系名称)
(3)班级Class表:由班级实体集转化而来。
班级(班级编号,院系编号,班级名称,人数)
(4)专业Major表:由专业实体集转化而来。
专业(专业编号,院系编号,专业名称);
(5)课程Course表:由课程实体集转化而来。
课程(课程号,课程名,学分,学时)
(6)成绩Grade表:由成绩实体集转化而来。
课程成绩(课程号,学号,成绩)
(7)奖惩(Award_punish) 表: 奖惩实体集转化的关系模式。
奖惩(奖惩号,学号,等级,奖惩名称,奖惩方案)
四:模式求解
(1)学生(学号,姓名,性别,班级编号,专业编号,院系编号,民族,年龄,出生日期,家庭地址,入学时间)
分析Student关系模式得函数依赖关系为:
学号–>{姓名,性别,班级编号,专业编号,院系编号,民族,年龄,出生日期,家庭地址,入学时间}
满足BCNF范式。
(2)班级(班级编号,专业编号,院系编号,班级名称,人数)
分析班级关系模式得函数依赖关系为:
班级编号–>{专业编号,院系编号,班级名称,人数}
满足BCNF范式。
(3)课程(课程号,课程名,学分,学时)
分析课程关系模式得函数依赖关系为:
课程号–>{课程名,学分,学时}
满足BCNF范式。
(4)专业(专业编号,院系编号,专业名称)
分析专业关系模式得函数依赖关系为:
专业编号–>{院系编号,专业名称}
满足BCNF范式。
(5)院系(院系编号,院系名称)
分析院系关系模式得函数依赖关系为:
院系编号–>{院系名称}
满足BCNF范式。
(6) 课程成绩(课程号,学号,成绩)
分析课程成绩关系模式得函数依赖关系为:
(课程号,学号)–>{ 成绩}
满足BCNF范式。
(7)奖惩(奖惩号,学号,等级,奖惩名称,奖惩方案)
分析奖惩关系模式得函数依赖关系为:
奖惩号–>{学号,等级,奖惩名称,奖惩方案}
满足BCNF范式。
五:表的设计
(1) 学生实体集。其属性有:(学号,姓名,性别,班级编号,院系编号,民族,年龄,出生日期,家庭地址,入学时间)
create table Student(Sno char(16) primary key,Sname varchar(16) not null,Ssex char(2) not null,check(Ssex='男' or Ssex='女'),Sage int not null, Snation varchar(20) not null,Sbirth date not null,Slocation varchar(50) not null,Sadmission date not null,Dno char(8) not null, Cno char(8) not null, foreign key (Dno) references Major(Dno),foreign key (Cno) references Class(Cno));
(2) 班级实体集。其属性有:(班级编号,专业编号,班级名称,人数)
create table Class(Cno char(8) not null primary key,Cname varchar(50) not null,Cnumber int not null,Mno char(8) not null,foreign key (Mno) references Major(Mno));
(3)专业实体集。其属性有:(专业编号,院系编号,专业名称)
create table Major(Mno char(8) primary key,Mname varchar(30) not null,Dno char(8) not null, foreign key (Dno) references Depart(Dno));
(4)院系实体集。其属性有:(院系编号,院系名称)
create table Depart(Dno char(8) not null primary key, Dname varchar(30) not null);
(5) 课程实体集。其属性有:(课程号,课程名,学分,学时)
create table Course(Kno char(8) not null primary key,Kname varchar(20) not null, Kperiod smallint not null,Kcredit smallint not null);
(6)课程成绩实体集。其属性有:(课程号,学号,成绩)
create table Grade(Kno char(8) not null,Sno char(16) not null,Ggrade int,primary key(Sno,Kno),foreign key(Sno) references Student(Sno),foreign key(Kno) references Course(Kno));
(7)奖惩实体集。其属性有:(奖惩号,学号,奖惩名称,奖惩方案)
create table Award_Punish(APno char(8) not null primary key,APname varchar(30) not null,APproject varchar(100) not null,APlevel varchar(30) not null,Sno char(16) not null, foreign key (Sno) references Student(Sno));
六:功能设计
1、 创建视图查询各个学生的学号、姓名、班级、专业、院系;
create view A_Student(Sno,Sname,Cname,Mname,Dname)asselect Sno,Sname,Cname,Mname,Dnamefrom Student,Class,Major,Departwhere o=oand Class.Mno=Major.Mnoand Student.Dno = Depart.Dno;
2、 创建存储过程查询指定学生的成绩单;
create procedure pro_Ggrade@Sno char(16)=null,@Sname varchar(16)=nullasif(@Sno is null or @Sname is null )begin print '请输入学号与姓名!'endelse if((select Sname from Student where Sno = @Sno) != @Sname or (select Sno from Student where Sname = @Sname) != @Sno )beginprint '输入有误!'endelsebeginselect Student.Sno,Sname,Kname,Ggradefrom Student,Grade,Coursewhere Student.Sno = Grade.Snoand Grade.Kno = Course.Knoand Sname = @Snameendgo
检验
use StudentManagementexec pro_Ggrade '4091102','内马尔'
3、 创建触发器当增加、删除学生和修改学生班级信息时自动修改相应班级学生人数;
a.创建触发器,当增加学生班级信息时自动修改相应班级学生人数
create trigger insert_stuon Student for insertasbegindeclare @cno char(8)select @cno=Cno from insertedupdate Class set Cnumber = Cnumber + 1 where Cno = @cnoend
在Student表中插入一条数据:
insert into Student values('4091106','灏川','男',20,'汉族','2001-02-03','河南安阳','-09-30','401','01' )
b.创建触发器,当删除学生班级信息时自动修改相应班级学生人数
create trigger delete_stuon Student for deleteasbegindeclare @cno char(8)select @cno=Cno from deletedupdate Class set Cnumber = Cnumber - 1 where Cno = @cnoend
在Student表中删除一条数据
delete from Student where Sname = '灏川'c.创建触发器,当修改学生班级信息时自动修改相应班级学生人数create trigger update_stuon Student for updateasbegindeclare @cno1 char(8)declare @cno2 char(8)
–存放更新前的数据
select @cno1=Cno from deleted
–存放更新后的数据
select @cno2=Cno from insertedupdate Class set Cnumber = Cnumber - 1 where Cno = @cno1update Class set Cnumber = Cnumber + 1 where Cno = @cno2end
在Student表中更改一条数据,将灏川的班级“01”更改为“02”
update Student set Cno = '02' where Sname = '灏川'
4、 用户创建不同的登录名,对应不同的用户名,给予不同的权限
a.创建老师登录名,对应T1用户及授予的权限
create login teacher with password = '111'
create user T1 for login teacher
use StudentManagementgrant select,update,insertOn classto T1 grant select,update,insertOn Departto T1 grant select,update,insertOn Award_Punishto T1 grant select,update,insertOn Majorto T1 grant select,update,insertOn Gradeto T1
b. 创建学生登录名,对应S1用户及授予的权限
create login student with password = '111'
create user S1 for login student
use StudentManagementgrant select On classto S1 grant select On Departto S1 grant selectOn Award_Punishto S1 grant selectOn Majorto S1grant selectOn Gradeto S1 grant selectOn courseto S1
5、 完成如下功能
(1)查看某位学生的基本信息
select * from student where Sno='4010116';
(2)查询年龄小于20的学生的基本信息,SQL语句如下:
select * from Student where Sage < 20
(3)查询选修了“数据库系统”课程的学生的学号、姓名、成绩,其中按照成绩从大到小的顺序排列
select Student.Sno,Sname,Ggrade from Student,Gradewhere Student.Sno = Grade.Sno and Grade.Kno = 'L01' order by Ggrade desc
(4).查询选修“数据库系统”课程所有学生的平均成绩
select Course.Kname 课程名称,avg(Ggrade) 平均成绩 from Grade,Course where Grade.Kno = Course.Kno and Course.Kname = '数据库系统'GROUP BY Course.Kname
(5)将家庭地址为“河南”的学生的家庭地址更改为“江苏”
update Student set Slocation = '江苏' where Slocation = '河南'
(6) 删除学号为“”学生的奖惩信息
delete from Award_punish where Sno = '4092106'
七:总结
经过一周的课程设计,我学到了很多知识,个人的能力有了很大的提高,
通过此次课程设计,使我更加扎实的掌握了有关数据库方面的知识,在设计过程中虽然遇到了一些问题,但经过不断的思考和检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。这次的课程设计使我学习到很多课堂上没有学习到的知识。也使我对常用画图软件、文档编辑等知识掌握得更加熟练。虽然课设已经完成,但是本系统还存在着不足,如系统十分简单,安全性问题没有很好的解决等。所以在今后的学习中我会继续努力完善自我,同学的帮助、指导老师的用心辅导和学校的精心安排使这个课题能够顺利进行。但是,由于时间仓促以及本人水平有限,本系统还有很多不完善之处,希望在此后的学习中可以不断将其优化。