高校学籍管理系统

**

一、课程设计的教学目的

**
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:定义联系集及属性:

  1. 选课联系集:它是学生实体集与课程实体集的多对多联系集,其描述属性有:成绩,课程编号,学生编号
  2. 获得联系集:它是学生实体集与奖惩实体集的一对多联系集,没有联系属性。
  3. 共有联系集:它是院系实体集与学生实体集的一对多联系集,没有联系属性。
  4. 隶属联系集:它是班级实体集与学生实体集的一对多联系集,没有联系属性。
  5. 含有联系集:它是专业实体集和班级实体集的一对多联系集,没有联系属性。
  6. 包含联系集:它是院系实体集与专业实体集的一对多联系集,没有联系属性。

2.3:E-R图


**

三:数据库逻辑结构设计

**
(下划线加粗代表主码,斜体加粗代表外码 )

(1)学生Student表:由学生关系实体集转化而来。
学生(学号,姓名,性别,班级编号,院系编号,民族,年龄,出生日期,家庭地址,入学时间;)

属性名称数据类型属性描述约束条件
Snochar(16)学号primary key
Snamevarchar(16)姓名not null
Ssexchar(2)性别not null
Sageint年龄not null
SbirthDatet出生日期not null
Slocationvarchar(50)籍贯not null
Snationvarchar(10)民族not null
SadmissionDate入学日期not null
Cnochar(8)班级编号foreign key
Dnochar(8)院系编号foreign key

(2)院系(Depart)表:由院系实体集转化而来。
院系(院系编号,院系名称)

属性名称数据类型属性描述约束条件
Dnochar(8)院系编号not null
Dnamevarchar(30)院系名称not null

(3)班级Class表:由班级实体集转化而来。
班级(班级编号,院系编号,班级名称,人数)

属性名称数据类型属性描述约束条件
Cnochar(8)班级编号primary key
Cnamevarchar(50)班级名称not null
CnumberInt班级人数not null
Mnochar(8)专业编号foreign key

(4)专业Major表:由专业实体集转化而来。
专业(专业编号,院系编号,专业名称);

属性名称数据类型属性描述约束条件
Mnochar(8)专业编号primary key
Mnamevarchar(30)专业名称not null
Dnochar(8)院系编号foreign key

(5)课程Course表:由课程实体集转化而来。
课程(课程号,课程名,学分,学时)

属性名称数据类型属性描述约束条件
Knochar(8)课程编号primary key
Knamechar(20) 课程名称not null
Kperiodsmallint 学时not null
Kcreditsmallint 学分not null

(6)成绩Grade表:由成绩实体集转化而来。
课程成绩(课程号,学号,成绩)

属性名称数据类型属性描述约束条件
Knochar(8)课程编号primary key(foreign key)
Snochar(16)学号primary key(foreign key)
Ggradeint成绩

(7)奖惩(Award_punish) 表: 奖惩实体集转化的关系模式。
奖惩(奖惩号,学号,等级,奖惩名称,奖惩方案)

属性名称数据类型属性描述约束条件
APnochar(16)学号foreign key
APlevelvarchar(30)等级not null
APnamevarchar(30)奖惩名not null
APprojectvarchar(100)奖惩方案not null

四:模式求解

(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(Knochar(8) not null,Snochar(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 nullprimary key,APnamevarchar(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 Class.Cno=Student.Cnoand Class.Mno=Major.Mnoand Student.Dno = Depart.Dno;

2、 创建存储过程查询指定学生的成绩单;

create procedure pro_Ggrade@Sno char(16)=null,@Sname varchar(16)=null asif(@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 = @Snameend go

检验

use StudentManagementexec pro_Ggrade '20204091102','内马尔'

3、 创建触发器当增加、删除学生和修改学生班级信息时自动修改相应班级学生人数;

a.创建触发器,当增加学生班级信息时自动修改相应班级学生人数

create trigger insert_stuon Student for insertas begindeclare @cno char(8)select @cno=Cno from insertedupdate Class set Cnumber = Cnumber + 1 where Cno = @cnoend

在Student表中插入一条数据:

insert into Student values('20204091106','灏川','男',20,'汉族','2001-02-03','河南安阳','2020-09-30','2020401','01' )

b.创建触发器,当删除学生班级信息时自动修改相应班级学生人数

create trigger delete_stuon Student for deleteas begindeclare @cno char(8)select @cno=Cno from deletedupdate Class set Cnumber = Cnumber - 1 where Cno = @cno end

在Student表中删除一条数据

delete from Student where Sname = '灏川'c.创建触发器,当修改学生班级信息时自动修改相应班级学生人数create trigger update_stuon Student for updateas begindeclare @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 = @cno2 end

在Student表中更改一条数据,将灏川的班级“01”更改为“02”

update Student set Cno = '02' where Sname = '灏川'

4、 用户创建不同的登录名,对应不同的用户名,给予不同的权限

登陆名密码用户权限
Teacher111T1查看,插入,修改
student111S1查看

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 select On Majorto S1grant select On Gradeto S1 grant select On courseto 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,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 = '20204092106'

七:总结

经过一周的课程设计,我学到了很多知识,个人的能力有了很大的提高,
通过此次课程设计,使我更加扎实的掌握了有关数据库方面的知识,在设计过程中虽然遇到了一些问题,但经过不断的思考和检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。这次的课程设计使我学习到很多课堂上没有学习到的知识。也使我对常用画图软件、文档编辑等知识掌握得更加熟练。虽然课设已经完成,但是本系统还存在着不足,如系统十分简单,安全性问题没有很好的解决等。所以在今后的学习中我会继续努力完善自我,同学的帮助、指导老师的用心辅导和学校的精心安排使这个课题能够顺利进行。但是,由于时间仓促以及本人水平有限,本系统还有很多不完善之处,希望在此后的学习中可以不断将其优化。