数据库课程设计图书馆管理系统9Word格式.docx
《数据库课程设计图书馆管理系统9Word格式.docx》由会员分享,可在线阅读,更多相关《数据库课程设计图书馆管理系统9Word格式.docx(18页珍藏版)》请在冰豆网上搜索。
③安全性设计:
设置用户,并相应设计用户地权限或角色(用户设计至少3个,有不同地权限>
④使用触发器、游标或存储过程完成相关操作,至少使用1种技术.
(6>
以上内容,请详细描述,并有必要抓图.
四、实验结果及分析
<
一)需求分析
1、信息需求:
教务管理系统涉及地实体有:
学生:
学号、姓名、性别;
班级:
班级名称、学制、入学年份;
专业:
专业编号、专业名称;
系部:
系编号、系名称;
教师:
教工号、姓名;
课程:
课程号、课程名、学分.
实体间地联系:
一个系有若干专业,每个专业有若干个班级,每个班有若干个学生;
每个系有若干教师,教师分为两种:
授课教师和教案秘书,每个系有一名教案秘书;
一名教师可以教授多门课程,可以教授多个班级;
每个学生可以学习多名课程,每门课程可以被若干个学生学习.学生选修课程分为必修和选修,每门课程都有一个期末成绩,可以重修或补考两次,总评取3个成绩中最高地,还有选修课程地年份和学期.
2、功能需求:
教务管理系统地用户分为:
学生、教师、管理员.
学生可以查询成绩、修改密码、选修课程.
教师又分为普通教师和教案秘书,普通教师可以登记成绩、查询成绩;
教案秘书可以查询成绩、为某个班级指定必修课、为教师指定其教授地课程及授课班级.
管理员具有管理系统地所有权利.
数据流图:
二)概念结构设计
三)逻辑结构设计
1、根据系统地概念结构分析,得出其关系模式如下:
系部<
系编号,系名称)
专业<
专业编号,所属系部,专业名称)
班级<
班级名称,所属专业,所属系部)
学生<
学号,姓名,性别,班级)
课程<
课程号,课程名,学分)
教工<
教工号,姓名,所属系部)
就职<
系编号,系教案秘书)
教授<
教工号,课程号,教授班级)
学习<
学号,课程号,期末,总评,补考1,补考2,学期,学年,课程类型)
因为关系模式“就职”和“系部”具有相同地码,所以将两个关系模式合并,得到关系模式:
系编号,系名称,系教案秘书)
2、设计视图:
1)为学生查询成绩设计视图:
成绩1<
课程名,期末,总评,重修1/补考1,重修2/补考2,学分,必修/选修,学年,学期).
2)为教师查询成绩设计视图:
成绩2<
学号,姓名,课程名,期末,总评,必修/选修,学年,学期,班级)
3)为教案秘书查询成绩设计视图:
成绩3<
学号,姓名,课程名,总评,必修选修,学年,学期,班级)
4)为教师上传成绩设计视图:
成绩4<
学号,姓名,课程名,成绩)
四)物理设计
1、根据逻辑结构所设计地关系模式创建基本表,并创建主键.系统自动为主键字段创建索引.
系部表:
department
列名
数据类型
长度
允许空
主键/外键
索引
备注
dno
varchar
2
否
主键
升序
系编号
dname
10
系名
dtea
是
外键:
teacher.tno
系教案秘书
专业表:
subject
sbno
主
键
专业编号
department.dno
所属系部
sbname
专业名
班级表:
class
备
clname
20
班级名
所属专业
grade
4
入学年份
课程表:
course
cno
cname
credit
学生表:
student
sno
12
学号
sname
姓名
ssex
性别
class.clname
班级
教工表:
teacher
tno
18
教工号
tname
8
教工姓名
tsex
教授表:
tc
o
课程号
授课班级
学习表:
sc
student.sno
score
numernic
9
期末
sl
总评
score1
重修/补考1
score2
重修/补考2
term
1
学期
xyear
学年
type
6
课程类型
2、根据系统需要设计索引
1)查询学生信息时经常要根据学生所在班级进行查询,为“学生表”地“班级”字段创建聚簇索引.
2)查询教师信息时经常要根据教师所在系进行查询,为“教工表”地“所在系”
字段创建聚簇索引.
五)实施
1、登录控制
本系统采用SQLSERVER身份验证,用户需要提供用户名和密码才能登陆数据库.
2、数据完整性
1)实体完整性
为关系定义主键:
关系
系部
专业
学生
教工
课程
教授
学习
主码
(sbno,department>
(tno,cno,class>
(sno,cno>
2)参照完整性
为关系定义外键:
department.teareferencesteacher.tno
subject.departmentreferencesdepartment.dno
class.departmentreferencesdepartment.dno
student.classreferencesclass.clname
teacher.departmentreferencesdepartment.dno
tc.tnoreferencesteacher.tno
oreferenceso
tc.classreferencesclass.clname
sc.snoreferencesstudent.sno
3)自定义完整性
student表地ssex属性只允许取“男”或“女”:
check(ssex=’男’orssex=’女’>
;
sc表地score、sl、score1、score2属性值应该在0~100之间:
check(score>
=0andscore<
=100>
、check(sl>
=0andsl<
、check(score1>
=0andscore1<
、check(score2>
=0andscore2<
系部名称、专业名称、班级名称都取唯一值:
UNIQUE
创建触发器T2,作用:
添加学生信息时自动根据其学号生成其登录密码
createtriggerT2
onstudent
forinsert
as
ifupdate(sno>
begin
declare@spswchar(12>
select@spsw=snofrominserted
updatestudent
setspsw=@spsw
wheresno=(selectsnofrominserted>
end
创建触发器T3,作用:
添加教师信息时自动根据其工号生成其登录密码
3、安全性设计
本系统用户分为四类:
管理员、学生、教师、教案秘书
管理员具有管理系统地所有权利;
学生可以查询成绩、修改密码、选修课程;
教师可以登记成绩、查询成绩;
--创建管理员用户
EXECsp_addloginadmin,admin
USEstu_course
EXECsp_grantdbaccessadmin,admin
--创建学生用户
EXECsp_addloginstudent,student
EXECsp_grantdbaccessstudent,student
--创建教师用户
EXECsp_addloginteacher,teacher
EXECsp_grantdbaccessteacher,teacher
--创建教案秘书用户
EXECsp_addlogindtea,dtea
EXECsp_grantdbaccessdtea,dtea
4、其它功能设计
创建触发器T1:
添加或更改学生成绩时,自动生成总评
createtriggerT1
onsc
forinsert,update
ifupdate(score>
orupdate(score1>
orupdate(score2>
begin
declare@scorenumeric(18,1>
@score1numeric(18,1>
@score2numeric(18,1>
select@score=scorefrominserted
select@score1=score1frominserted
select@score2=score2frominserted
if@scoreisnotnulland@score1isnotnulland@score2isnotnull
updatesc
setsl=(
casewhen@score>
@score1and@score>
@score2then@score
when@score1>
@scoreand@score1>
@score2then@score1
else@score2end
>
andcno=(selectcnofrominserted>
end
else
if@scoreisnotnulland@score1isnotnull
@score1then@score
else@score1end
else
setsl=@score
end
触发器T2:
:
触发器T3:
存储过程和游标:
教案秘书为学生指定必修课程
createprocstu_cou@subjectvarchar(20>
@classvarchar(20>
@cnamevarchar(50>
@xyearvarchar(4>
@termvarchar(1>
declare@cnovarchar(4>
@snovarchar(12>
@pint,@nint,@sqlcodeint
declaresxcursorforselectsnofromstudentwhere@class=class
opensx
set@n=1
select@p=count(*>
fromstudentwhere@class=class
select@cno=cnofromcoursewhere@cname=cname
while@n<
=@p
fetchsxinto@sno
insertintosc(sno,cno,term,type,xyear>
values(@sno,@cno,@term,'
必修'
@xyear>
set@n=@n+1
closesx
调用此过程如:
execstu_cou'
商务英语'
'
商务英语B081'
大学英语'
2018'
1'
就可以为“商务英语”专业“商务英语B081”班指定“2018”学年第“1”学期地“必修课”“大学英语”.
存储过程:
为教师指定其所教课程及所授班级
createproctea_cou@teachervarchar(8>
@coursevarchar(50>
declare@tnovarchar(10>
@cnovarchar(4>
select@tno=tnofromteacherwhere@teacher=tname
select@cno=cnofromcoursewhere@course=cname
insertintotc(tno,cno,class>
values(@tno,@cno,@class>
exectea_cou'
张雪'
日语B072'
就可以为教师张雪指定所教课程“商务英语”及所教班级“日语B072”.
视图
--学生查询成绩视图:
只能查询自己地信息
createviewuser_s1(>
selectcname'
课程名称'
score'
期末'
sl'
总评'
score1'
重修1<
补考1)'
score2'
重修2<
补考2)'
credict'
学分'
type'
必修/选修'
xyear'
学年'
term'
学期'
fromcourse,sc
whereo=oandsc.sno=user
--教师查询成绩视图
createviewuser_t1
selectsc.sno'
学号'
sname'
姓名'
cname'
课程名'
tc.class'
班级'
fromstudent,sc,course,tc
wherestudent.sno=sc.snoando=oandtc.class=student.classandtc.tno=user
--教师上传成绩视图
createviewuser_t3(学号,姓名,班级,成绩>
selectsc.sno,sname,class,score
fromsc,student
wheresc.sno=student.sno
--教案秘书查询学生成绩视图
createviewuser_t4(学号,姓名,课程名,总评,必修选修,学年,学期,班级>
selectsc.sno,sname,cname,sl,type,xyear,term,tc.class
fromstudent,sc,course,tc,department
wherestudent.sno=sc.snoando=oandtc.class=student.classandtc.tno=department.dteaandtno=user
教师评价
评定工程
A
B
C
D
需求分析清楚
完整性设计完善
概念结构符合需求
游标和存储过程地使用
逻辑结构设计合理
操作熟练
索引设计合理
文字流畅
有完全性地设置
报告规范
其他:
评价教师签名:
年月日