资源描述
学生成绩管理系统课程设计
设计报告
题 目:学生成绩管理系统数据库
学 号: 2014221119200100
学生姓名: 张坤
学 号: 2014221119200138
学生姓名: 张豪
学 号: 2014221119200057
学生姓名: 王潜
指导教师: 王雷春
提交时间: 2016/12/24
目录
第1章 需求分析 1
1.1 需求调查 1
1.2 系统功能分析 2
1.3 面对用户需求分析 3
第2章 数据库概念模型设计 4
第3章 逻辑结构设计 8
3.1 类和对象向关系模式转换 10
3.2 关系模式优化 11
第4章 数据库物理结构设计 11
4.1 存取方法设计 11
4.2 存储结构设计 11
4.3 物理设计 12
第5章 数据库完整性设计 15
5.1 主键及唯一性索引 15
5.2 参照完整性设计 16
5.3 Check约束 17
5.4 Default约束 17
5.5 触发器设计 17
第6章 数据库视图设计 19
第7章 数据库存储过程设计 20
第8章 权限设计 22
总结 22
参考文献: 23
教务管理系统后台数据库
第1章 需求分析
1.1 需求调查
通过对各个用户的调查,该学生成绩管理系统有如下需求:
1) 系统管理:实现系统管理人员对系统的管理,包括添加删除用户,更改密码, 数据备份,数据还原,注销,系统开关等功能。
2) 成绩管理:实现教师对学生选修课程打分,成绩审核,学生查看成绩。
3) 信息维护:学生,管理员和老师以及课程的基本信息(包括学生学籍信息和学生所修课程信息,教师基本信息,课程基本信息,密码基本信息)查看以及修改。
4) 选课:学生选择课程,老师选课。
5) 查询:包括实现学生查询,老师查询。学生查询包括自己的基本信息,自己的课程,课表,成绩等,老师查询包括查询自己的信息,自己所带课程的学生,自己的课表以及学生成绩等。
6) 服务器配置:对它进行配置可以使得在其他电脑上也照常使用。这样不必每次都到数据库中去更改。
7) 帮助系统:帮助系统为用户指明方向。
1.2 系统功能分析
学生成绩管理系统
系统管理
学籍管理
选课管理
教师管理
课程管理
成绩管理
管理员管理
数据备份
即时事务管理
1) 系统管理:主要用于系统开关,教师选课开关,学生选课开关等。
2) 学籍管理:用于对学生学籍基本信息的录入、查询、修改、维护、删除等常用功能,并提供学号编排、学生照片输入显示、学籍变动(留级、休学、跳级、转班、转学、退学等)、奖惩登记、毕业情况等功能。
3) 选课管理:用于对课程的排布和选择。对于选课课程、采用教师选课方式,教师先选课,学生再选课。
4) 教师管理:用于管理教师的基本信息,其所在院系、所授课程,所带的班级,教师平时上课的时数,并记录教师的考评情况。
5) 成绩管理:用于发布学生一个学期所修课程所获得的成绩,是否挂科、参加补考,补考的成绩等。
6) 课程管理:用于管理课程的基本信息,包括添加,删除,修改课程。
7) 管理员管理:用于对管理员的权限进行修改,以及添加,删除管理员,更新管理员信息等。
8) 数据备份:用于保存删除或更新之前的数据,防止管理员误操作,以及数据找回等。
9) 即时事务管理:用于发布和管理学校及学院的相关通知,便于相关人员了解学校及学院的近期动态。
1.3 面对用户需求分析
在学生选课系统中,最主要的功能就是进行一系列的查询和各类数据的管理。因此,可以将学生选课系统分为管理系统(有数据变化)和查询系统两个子系统。而在所设计的学生选课系统中,主要有四类用户,即学生用户,老师用户,教务管理员和系统管理员。各类用户在该系统中的需求不同,权限也不同。因此,为了更明确,更系统的了解用户需求,我们还可以将管理系统再细分为学生管理系统,老师管理系统,教务管理员管理系统,系统管理员管理系统。同样,将查询系统也按用户职能进行细分,即学生查询系统,老师查询系统,教务管理员查询系统,系统管理员查询系统。这样细分后,看似把系统需求繁杂化了。其实不然,细分后使各用户需求更加明确了,并且能更好的把握系统需求。
下面从细分后的各个子系统分析子系统的需求:
教务管理系统
学生管理子系统
学生查询子系统
教师管理子系统
教师查询子系统
教务管理员管理子系统
教务管理员查询子系统
系统管理员管理子系统
系统管理员查询子系统
1) 学生管理系统。学生用户在使用该系统时,首先必须通过账号和密码登录系统。因此,对密码的设置和修改是最基本的需求。由于所有用户在使用该系统时都需要账号和密码,所以在后面的用户需求分析时不再重复对此需求进行描述。在登录系统后,学生用户的最主要的需求就是通过该系统进行选课、退课。其次,学生用户还要求可以通过系统进行个人信息的维护(包括添加、删除、修改信息)以及学生评教和各类报名。
2) 学生查询系统。学生用户在该系统中是最低级的用户,所以可以查询的数据也是有限的,主要有个人信息查询,成绩查询(个人成绩),即时事物查看,学业预警查看。在进行选课的时候还要对课程信息进行查询,课程选完后要查询课表。
3) 老师管理系统。该系统中,老师用户当然也有维护个人信息的需求。除此之外,更重要的一个需求是要进行学生成绩的录入。
4) 老师查询系统。老师用户不仅要有查询自己的个人信息的功能,还要有查询学生信息的功能。当学生用户进行选课完毕后,老师用户有对选课、任课信息、课表的查询以及花名册的查看的需求。当课程结束后,老师在录入学生成绩的时候,也要对课程信息、学生信息进行查询。老师用户的另一个需求是对学生成绩的查询,这个成绩查询不仅可以查询学生用户的个人成绩,还可以查询所带课程的成绩和所有学生的成绩。
5) 教务管理员管理系统。首先当然个人信息的维护。对于教务管理员来说,该系统应该可以帮助他进行开课信息的维护,人才培养方案管理;在学生由于种种原因而有选课异常时,教务管理员还有重选、补选、退选的需求;课程结束老师录入学生成绩后,教务管理员还有利用系统进行成绩的审核,有时还要对某些学生的成绩进行修改。
6) 教务管理员查询系统。教务管理员首先要具有学生查询系统,老师查询系统的所有需求。除了这些需求外,教务管理员还应该可以查询开课信息,学生评教查询和学生成绩查询(包括学生个人成绩,班级成绩,某课程成绩以及全院学生的成绩)。
7) 系统管理员管理系统。作为系统挂了管理员,是该系统中最高级的用户,因此该用户的需求相对比较的多。第一,要通过系统对院系进行管理:院系的设置,院系的调整以及院系的总体规划。第二,进行专业的设置,专业的添加、删除、修改,专业的调整。第三,要对学期进行设置和教室的管理。第四,对各学院的教师管理,其中就包括了老师在系统中的权限设置。第五,学生的学籍的管理(学籍的异动)。第六,通过各学院上报的课程信息进行全面的排课以及课程的停开和增开,这也是学生选课系统中很重要的一个需求。最后,系统管理员管理系统还应该可以利用该系统进行用户的管理和维护,包括用户的添加、删除,修改等。
8) 系统管理员查询系统。该子系统的需求首先要包括前三类用户查询系统中的所有需求,即可以查询前三类用户能进行的所有查询。其次,要包括院系的查询,专业的查询,教室的查询。第三,通过系统查询学生、教师的基本信息,查询老师的任课情况以及教学情况(评教情况)。第四,在对学生学籍管理时要对学生学籍的查询。第五,对课程信息及选课信息的查询。此外,还有对该系统中所有学生用户的学生成绩查询和该系统中所有老师用户的评教结果查询的需求。
第2章 数据库概念模型设计
2.1数据库实体以及关系设计
本系统主要有9个实体:
A. 学生实体
B. 教师实体
C. 管理员实体
D. 课程实体
E. 职称实体
F. 政治面貌实体
G. 院系实体
H. 专业实体
I. 新闻公告实体
实体关系图:
图2.1院系专业实体关系图
图2.2教师课程实体关系图
图2.3学生课程实体关系图
图2.4学生政治面貌实体关系图
图2.5教师职称实体关系图
图2.6管理员新闻公告实体关系图
图2.7学生专业实体关系图
图2.7总实体关系图
2.2面向类和对象分析设计
类和对象设计如下:
学生
姓名:string
学号:string
性别: char
出生年月:data
政治面貌:string
专业名称:string
籍贯:string
家庭地址:string
联系电话:string
添加()
删除()
查询()
修改()
教师
教师姓名:string
教职工号:string
性别:char
出生年月:data
职称:string
所属学院:string
籍贯:string
民族:string
家庭地址:string
邮政编码:string
联系电话:string
查询()
添加()
修改()
删除()
管理员
姓名:string
编号:string
性别: char
出生年月:data
政治面貌:string
学院:string
专业名称:string
籍贯:string
民族:string
家庭地址:string
联系电话:string
添加()
删除()
查询()
修改()
课程
课程名:string
课程号:int
学时:全部课程
学分:全部课程
开课年度:string
开课学期:string
开课学院:部门单位
任课教师:教师
上课地点:char
上课时间:char
上课人数:int
最大上课人数:int
查询()
添加()
修改()
选课()
专业
专业名称:string
专业编号:string
所属学院:string
查询()
修改()
添加()
删除()
院系
院系名称:string
院系编号:string
查询()
修改()
添加()
删除()
学生课程
学号:int
课程号:int
分数:float
挂科情况:boolen
添加()
修改()
删除()
查询()
教师课程
工号:int
课程号:int
添加()
修改()
删除()
查询()
登陆
用户名:int
密码:string
级别:string
添加()
修改()
删除()
查询()
新闻公告
通知标题:string
通知内容:string
发布单位:string
发布时间:data
有效期限:data
查询()
添加()
修改()
删除()
政治面貌
编号:int
名称:string
添加()
修改()
查询()
职称
编号:int
名称:string
添加()
修改()
查询()
第3章 数据库逻辑结构设计
3.1 E-R图
局部E-R图
3.1职称编号E-R图
3.2政治面貌E-R图
3.3新闻公告E-R图
3.4学生E-R图
3.5教师E-R图
3.6管理员E-R图
3.7课程E-R图
3.8专业E-R图
3.9院系E-R图
全局E-R图:
图3.10全局E-R图
3.2 类和对象向关系模式转换
学生信息(姓名、学号、性别、出生年月、政治面貌、、学院、专业名称、培养层次、籍贯、民族、家庭地址、、联系电话、)
成绩信息(学生姓名、学号、专业名称、课程名、课程号、分数、绩点、学分、所获学分、)
课程(课程名、课程号、任课老师、选课班级、学时、学分、开课年度、开课学期、学院、上课地点、上课时间、限制人数)
选课信息(学生姓名、学号、学院、教学班号、课程名、课程号、任课老师、上课地点、上课时间)
专业信息(专业名称、专业编号、所授学位、培养方案、所属学院)
教师信息(教师姓名、教职工号、性别、出生年月、学历、职称、所属学院、籍贯、民族、家庭地址、邮政编码、联系电话、身份证号码)
新闻公告(通知标题、通知内容、发布单位、发布时间、有效期限)
开关表(系统开关,选课开关)
3.3 关系模式优化
通过对用户需求和实体之间的关系的分析,结合范式考虑,本系统建立以下表
1).院系表
名称
数据类型
是否主键
院系代号
int
是
院系名称
varchar(50)
预留字段
varchar(50)
2).专业表
名称
数据类型
是否主键
专业代号
int
是
专业名称
varchar(50)
所属学院代号
Int
预留字段
varchar(50)
3).学生表
名称
数据类型
是否主键
学号
int
是
姓名
varchar(50)
性别
Char(2)
年龄
int
政治面貌代号
Int
专业代号
int
联系方式
Varchar(50)
入学年份
Int
预留字段
Varchar(50)
4).教师表
名称
数据类型
是否主键
工号
int
是
姓名
varchar(50)
性别
char(2)
年龄
int
职称代号
Int
院系代号
Int
联系方式
Varchar(50)
教龄
Int
预留字段
varchar(50)
5).管理员表
名称
数据类型
是否主键
管理号
int
是
姓名
varchar(50)
性别
Char(2)
职务
Varchar(50)
联系方式
Varchar(50)
地址
varchar(50)
预留字段
varchar(50)
6).登录表
名称
数据类型
是否主键
账号
int
是
密码
varchar(50)
级别
Char(4)
预留字段
varchar(50)
7).新闻公告表
名称
数据类型
是否主键
编号
int
是
标题
varchar(50)
内容
varchar(100)
类别
Varchar(50)
发布人
In
预留字段
varchar(50)
8).课程表
名称
数据类型
是否主键
课程号
int
是
课程名
varchar(50)
任课教师
int
学分
int
上课时间
datetime
限选人数
int
已选人数
int
开课学院代号
Int
预留字段
Varchar(50)
9).教师课程表
名称
数据类型
是否主键
工号
int
是
课程号
int
是
预留字段
varchar(50)
10).学生课程表
名称
数据类型
是否主键
学号
int
是
课程号
Int
是
分数
Float
预留字段
varchar(50)
11).职称表
名称
数据类型
是否主键
职称代号
int
是
职称
varchar(50)
预留字段
varchar(50)
12).政治面貌表
名称
数据类型
是否主键
政治面貌代号
int
是
政治面貌
varchar(50)
预留字段
varchar(50)
13).开关表
名称
数据类型
是否主键
开关类型
varchar(50)
是
状态
char(2)
预留字段
varchar(50)
14).登录日志表
名称
数据类型
是否主键
编号
Int
是
操作类型
varchar(50)
操作人
varchar(50)
操作时间
Datetime
被操作账户
Int
预留字段
varchar(50)
第4章 数据库物理结构设计
4.1 存取方法设计
数据库系统是多用户共享的系统,对同一个关系要建立多条存储路径才能满足多用户的多种应用要求。对于教务管理系统来说,为了提高某些属性(如:学生学号,教职工号,课程号,学生成绩,选课信息等)的查询速度,可以选择聚簇存取的方法,即把这些属性上具有相同值的元组集中放在连续的物理块上。这样在查询某个学院或是查询某个专业或某学年等的学生成绩或选课等时就会大大提高查询速度。因此,该系统中选择聚簇存取方法。
4.2 存储结构设计
教务管理系统是一个大型复杂的计算机网络信息系统,采用基于浏览器/服务器(B/S),客户端/服务器(C/S)混合的应用体系结构来建设教务管理系统。数据库管理系统采用Microsoft 公司推出的SQL Server 2014,并用SQL进行数据库的建立和数据库中数据的维护和查询。
4.3 物理设计
实现该设计的环境为Windows 10+ MS SQL Server2014 或以上版本。
1、 建立学生成绩管理系统数据库
use master
create database 学生成绩管理系统数据库
on (
name='学生成绩管理系统数据库主文件',
filename='D:\student system of grades\student system of grades.mdf',
size=5,
maxsize=50,
filegrowth=10%
)
log on (
name='学生成绩管理系统数据库日志文件',
filename='D:\student system of grades\student system of grades.ldf',
size=2mb,
maxsize=10mb,
filegrowth=1mb
)
Go
2.建立职称表
create table 职称(
职称代号 int primary key,
职称 varchar(50),
预留字段 varchar(50)
)
3.建立政治面貌表
create table 职称(
职称代号 int primary key,
职称 varchar(50),
预留字段 varchar(50)
)
4.建立院系表
create table 院系(
院系代号 int primary key,
名称 varchar(50),
预留字段 varchar(50)
)
5.建立专业表
create table 专业(
专业代号 int primary key,
名称 varchar(50),
所属院系代号 int,
预留字段 varchar(50)
)
6.建立专业表
create table 新闻公告(
编号 int primary key,
标题 varchar(50),
内容 varchar(100),
类别 varchar(50),
发布人 int,
预留字段 varchar(50)
)
7.建立学生表
create table 学生(
学号 int primary key,
姓名 varchar(50),
性别 char(2) default '男' check (性别 = '男' or 性别 = '女')),
年龄 int,
政治面貌代号 int,
专业代号 int,
联系方式 varchar(50),
入学年份 int,
预留字段 varchar(50)
)
8.建立教师表
create table 教师(
工号 int primary key,
姓名 varchar(50),
性别 char(2) default '男' check(性别='男' or 性别='女'),
年龄 int,
职称代号 int ,
院系代号 int,
联系方式 varchar(50),
教龄 int,
预留字段 varchar(50)
)
9.建立管理员表
create table 管理员(
管理号 int primary key,
姓名 varchar(50),
性别 char(2) default '男' CHECK (性别 ='男' or 性别 ='女'),
职务 varchar(50),
联系方式 varchar(50),
地址 varchar(50),
预留字段 varchar(50)
)
10.建立课程表
create table 课程(
课程号 int primary key,
课程名 varchar(50),
任课教师 int,
学分 int,
上课时间 char(5) default '1-18' check(上课时间 ='1-16' or 上课时间 ='1-14' or 上课时间 ='1-12' or 上课时间 ='1-6' or 上课时间 ='1-18'),
考试时间 datetime,
限选人数 int,
已选人数 int,
开课学院代号 int,
预留字段 varchar(50)
)
11.建立学生课程表
create table 学生课程(
学号 int,
课程号 int,
分数 float default'0',
预留字段 varchar(50),
primary key(学号,课程号)
)
12.建立教师课程表
create table 教师课程(
工号 int,
课程号 int,
预留字段 varchar(50)
)
13.建立登录表
create table 登录(
账号 int primary key,
密码 varchar(50),
级别 char(6) default '学生' check(级别 ='学生'or 级别 ='教师' or 级别 ='管理员'),
预留字段 varchar(50)
)
第5章 数据库完整性设计
5.1 主键及唯一性索引
表名
主键
建立唯一性索引
学生
(学号)
create unique index 学生
on 学生 (学号)
学生课程
(学号,课程号)
create unique index 学生课程
on 学生课程 (学号,课程号)
课程
(课程号)
create unique index课程
on课程(课程号)
教师课程
(工号,课程号)
create unique index 教师课程
on 教师课程 (工号,课程号)
教师
(工号)
create unique index 教师
on教师 (工号)
管理员
(管理号)
create unique index 管理员
on管理员 (管理号)
专业
(专业编号)
create unique index 专业
on 专业 (专业编号)
院系
(院系编号)
create unique index 院系
on 院系(院系编号)
登录
(帐号)
create unique index 登录
on 登录(账号)
新闻公告
(编号)
create unique index 新闻公告
on 新闻公告(编号)
职称
(职称代号)
create unique index 职称
on 职称(职称代号)
政治面貌
(政治面貌代号)
create unique index 政治面貌 on
政治面貌(政治面貌代号)
5.2 参照完整性设计
--1、新闻公告表中将属性发布人设计为外键
alter table 新闻公告 add foreign key (发布人) references 管理员(管理号)
--2、教师表中将属性职称代号和院系代号设计为外键
alter table 教师 add foreign key (职称代号) references 职称(职称代号)
alter table 教师 add foreign key (院系代号) references 院系(院系代号)
--3、学生表中将属性政治面貌代号属性和专业代号设计为外键
alter table 学生 add foreign key (政治面貌代号) references 政治面貌(政治面貌代号)
alter table 学生 add foreign key (专业代号) references 专业(专业代号)
--4、专业表中将属性所属院系代号设计为外键
alter table 专业 add foreign key (所属院系代号) references 院系(院系代号)
--5、学生课程表中将属性课程号和学号设计为外键
alter table 学生课程 add foreign key (学号) references 学生 (学号)
alter table 学生课程 add foreign key (课程号) references 课程 (课程号)
--6、教师课程表中将属性工号和课程号计为外键
alter table 教师课程 add foreign key (工号) references 教师 (工号)
alter table 教师课程 add foreign key (课程号) references 课程 (课程号)
--7、课程表中将属性任课教师和开课学院代号计为外键
alter table 课程 add foreign key (任课教师) references 教师 (工号)
alter table 课程 add foreign key (开课学院代号) references 院系 (院系代号)
5.3 Check约束
1、学生,教师表和管理员表中将性别进行check约束:
check (性别='男' or性别='女')
2、课程表中将上课时间进行check约束:
check (上课时间='1-18' or 上课时间='1-16' or 上课时间='1-14' or 上课时间='1-12' or '1-16')
3、登录表中将开课学期进行check约束:
check (级别=’管理员’ or 级别= ‘学生’ or 级别= ‘教师’)
4、学生表中将分数check约束:
check (分数>0 and 分数<100)
5.登录日志表将操作类型check约束
check (操作类型=’删除数据’ or 操作类型= ‘修改数据’ or 操作类型= ‘添加数据’)
5.4 Default约束
1、教师表和学生表中性别默认值设为:男。Default '男'
2、教师信息表和学生信息表中民族默认值设为:汉族。Default '汉族'
3、登录表中级别默认值设为:学生。Default '学生'
4、学生课程表中分数默认值设为:0。Default '0'
5、课程表中开课时间默认值设为:1-18。Default '1-18'
5.5 触发器设计
1、在政治面貌表中建立删除修改更新政治面貌触发器
create trigger 删除修改更新政治面貌
on 政治面貌
with encryption
instead of
update,insert,delete
as
begin
--print'政治面貌表不允许修改,删除,更新等操作!'
RAISERROR('政治面貌表不允许修改,删除,更新等操作!',18,18)
End
2、在职称表中建立删除更新插入职称触发器
create trigger 删除修改更新职称
on 职称
with encryption
instead of
update,insert,delete
as
begin
--print'政治面貌表不允许修改,删除,更新等操作!'
RAISERROR('职称表不允许修改,删除,更新等操作!',18,18)
End
3、在新闻公告表建立删除成功提示触发器
create trigger 删除新闻公告提示成功
on 新闻公告
with encryption
after
update,insert,delete
as
begin
--print'政治面貌表不允许修改,删除,更新等操作!'
RAISERROR('操作成功',10,1)
End
4、在登录表中建立删除数据触发器
a.建立日志表
create table 登录表日志
(操作编号 int primary key identity(1,1),
登录账号 varchar(50) default 'admin',
数据库登录名 varchar(50) default 'sa',
操作类型 char(8) check( 操作类型='插入记录' or 操作类型='修改数据' or 操作类型='删除数据'),
操作时间 datetime default getdate(),
被操作账户 int
)
b.建立触发器
create trigger 删除登录表日志
on 登录
with encryption
for
delete
as
begin
declare @被操作账户 int
select @被操作账户=账号
from deleted
insert into 登录表日志(操作类型,被操作账户)
values('删除数据',@被操作账户)
end
5、在登录表中建立修改数据触发器
a.建立日志表
create table 登录表日志
(操作编号 int primary key identity(1,1),
登录账号 varchar(50) default 'admin',
数据库登录名 varchar(50) default 'sa',
操作类型 char(8) check( 操作类型='插入记录' or 操作类型='修改数据' or 操作类型='删除数据'),
操作时间 datetime default getdate(),
被操作账户 int
)
b.建立触发器
create trigger 修改登录表日志
on 登录
with encryption
for
update
as
begin
declare @被操作账户 int
select @被操作账户=账号
from deleted
insert into 登录表日志(操作类型,被操作账户)
values('修改数据',@被操作账户)
end
6、在登录表中建立插入数据触发器
a.建立日志表
create table 登录表日志
(操作编号 int primary key identity(1,1),
登录账号 varchar(50) default 'admin',
数据库登录名 varchar(50) default 'sa',
操作类型 char(8) check( 操作类型='插入记录' or 操作类型='修改数据' or 操作类型='删除数据'),
操作时间 datetime default getdate(),
被操作账户 int
)
b.建立触发器
create trigger 插入登录表日志
on 登录
with encryption
for
insert
as
begin
declare @被操作账户 int
select @被操作账户=账号
from deleted
insert into 登录表日志(操作类型,被操作账户)
values('插入记录',@被操作账户)
end
7、在学生表中建立修改学号触发器
create trigger 修改学号
on 学生
with encryption
for
update
as
begin
declare @修改后学号 int
declare @修改前学号 int
select @修改前学号=学号
from deleted
select @修改后学号=学号
from inserted
if(@修改后学号!=@修改前学号)
RAISERROR('学号不允许修改哦!',18,18)
End
8、在教师表中建立修改工号触发器
create trigger 修改工号
on 教师
with encryption
for
update
as
begin
declare @修改后工号 int
declare @修改前工号 int
select @修改前工号=工号
from deleted
select @修改后工号=工号
from inserted
if(@修改后工号!=@修改前工号)
RAISERROR('学号不允许修改哦!',18,18)
End
9、在管理员表中建立修改管理号触发器
create trigger 修改管理号
on 管理员
with encryption
for
update
as
begin
declare @修改后管理号 int
declare @修改前管理号 int
select @修改前管理号=管理号
from deleted
select @修改后
展开阅读全文