数据库课程设计图书馆管理系统.docx
《数据库课程设计图书馆管理系统.docx》由会员分享,可在线阅读,更多相关《数据库课程设计图书馆管理系统.docx(17页珍藏版)》请在冰豆网上搜索。
![数据库课程设计图书馆管理系统.docx](https://file1.bdocx.com/fileroot1/2023-2/3/a9fcb632-43c4-42f7-8a64-36762c37a3c6/a9fcb632-43c4-42f7-8a64-36762c37a3c61.gif)
数据库课程设计图书馆管理系统
数据库原理综合性实验
实验报告
课程名称数据库原理
实验学期2010至2011学年第1学期
学生所在系部国土系
年级专业班级
学生姓名学号
任课教师
实验成绩
国土系
《数据库系统B》课程综合性实验报告
开课实验室:
软件工程实验室2010年12月10日
实验题目
《教务管理系统》数据库设计
一、实验目的
利用一种DBMS作为设计平台,理解并应用课程中关于数据库设计的相关理论,能按照数据库设计步骤完成完整的数据库设计,包括需求分析、概念设计、逻辑设计、物理设计和实施。
同时能够正确应用各个阶段的典型工具进行表示。
二、设备与环境
(1)硬件设备:
PC机一台
(2)软件环境:
安装Windows操作系统,安装数据库管理系统SQLServer2000等。
三、实验内容
完整实践应用数据库设计的工程过程:
需求分析\概念设计\逻辑设计\物理设计和实施:
(1)需求分析:
选定“教务管理系统”,对所设计的数据库系统进行调研分析,其结果应该准确表达出选定应用的功能需求;
(2)概念分析:
使用E-R图作为描述工具.必要时描述出局部和全局的E-R图;
(3)逻辑设计:
将上述绘制的E-R图转化为相应的关系模式,并根据范式理论进行优化分析。
要求的关系模式不少于3个,并根据实际应用的需要设计必要的视图;
(4)物理设计:
根据设计的结构,说明系统已经有的索引,并根据需要设计必要的索引;
(5)实施:
以SQLSERVER为平台创建出完整的数据库.在数据库中要表现出的知识点包括
①登录控制(标准登录和混合登录)
②数据完整性:
参照完整性、实体完整性、自定义完整性(包括触发器)
③安全性设计:
设置用户,并相应设计用户的权限或角色(用户设计至少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
varchar
10
否
否
系名
dtea
varchar
10
是
外键:
teacher.tno
系教学秘书
专业表:
subject
列名
数据类型
长度
允许空
主键/外键
索引
备注
sbno
varchar
2
否
主
键
升序
专业编号
department
varchar
2
否
外键:
department.dno
升序
所属系部
sbname
varchar
10
否
否
专业名
班级表:
class
列名
数据类型
长度
允许空
主键/外键
索引
备
clname
varchar
20
否
主键
升序
班级名
subject
varchar
2
否
否
升序
所属专业
department
varchar
2
否
外键:
department.dno
所属系部
grade
varchar
4
否
否
入学年份
课程表:
course
列名
数据类型
长度
允许空
主键/外键
索引
备注
cno
varchar
20
否
主键
升序
班级名
cname
varchar
2
否
否
所属专业
credit
varchar
2
否
否
所属系部
学生表:
student
列名
数据类型
长度
允许空
主键/外键
索引
备注
sno
varchar
12
否
主键
升序
学号
sname
varchar
10
否
否
姓名
ssex
varchar
2
否
否
性别
class
varchar
20
否
外键:
class.clname
班级
教工表:
teacher
列名
数据类型
长度
允许空
主键/外键
索引
备注
tno
varchar
18
否
主键
升序
教工号
tname
varchar
8
否
否
教工姓名
tsex
varchar
2
否
否
性别
department
varchar
2
否
外键:
department.dno
所属系部
教授表:
tc
列名
数据类型
长度
允许空
主键/外键
索引
备注
tno
varchar
10
否
主
键
外键:
teacher.tno
升序
教工号
cno
varchar
4
否
外键:
o
升序
课程号
class
varchar
20
否
外键:
class.clname
升序
授课班级
学习表:
sc
列名
数据类型
长度
允许空
主键/外键
索引
备注
sno
varchar
12
否
主
键
外键:
student.sno
升序
学号
cno
varchar
4
否
外键:
o
升序
课程号
score
numernic
9
否
否
期末
sl
numernic
9
否
否
总评
score1
numernic
9
否
否
重修/补考1
score2
numernic
9
否
否
重修/补考2
term
varchar
1
否
否
学期
xyear
varchar
4
否
否
学年
type
varchar
6
否
否
课程类型
2、根据系统需要设计索引
(1)查询学生信息时经常要根据学生所在班级进行查询,为“学生表”的“班级”字段创建聚簇索引。
(2)查询教师信息时经常要根据教师所在系进行查询,为“教工表”的“所在系”
字段创建聚簇索引。
(五)实施
1、登录控制
本系统采用SQLSERVER身份验证,用户需要提供用户名和密码才能登陆数据库。
2、数据完整性
(1)实体完整性
为关系定义主键:
关系
系部
专业
班级
学生
教工
课程
教授
学习
主码
dno
(sbno,department)
clname
sno
tno
cno
(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
oreferenceso
(3)自定义完整性
①student表的ssex属性只允许取“男”或“女”:
check(ssex=’男’orssex=’女’);
②sc表的score、sl、score1、score2属性值应该在0~100之间:
check(score>=0andscore<=100)、check(sl>=0andsl<=100)、check(score1>=0andscore1<=100)
、check(score2>=0andscore2<=100)
③系部名称、专业名称、班级名称都取唯一值:
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
USEstu_course
EXECsp_grantdbaccessstudent,student
--创建教师用户
EXECsp_addloginteacher,teacher
USEstu_course
EXECsp_grantdbaccessteacher,teacher
--创建教学秘书用户
EXECsp_addlogindtea,dtea
USEstu_course
EXECsp_grantdbaccessdtea,dtea
4、其它功能设计
①创建触发器T1:
添加或更改学生成绩时,自动生成总评
createtriggerT1
onsc
forinsert,update
as
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
begin
updatesc
setsl=(
casewhen@score>@score1and@score>@score2then@score
when@score1>@scoreand@score1>@score2then@score1
else@score2end
)
wheresno=(selectsnofrominserted)andcno=(selectcnofrominserted)
end
else
if@scoreisnotnulland@score1isnotnull
begin
updatesc
setsl=(
casewhen@score>@score1then@score
else@score1end
)
wheresno=(selectsnofrominserted)andcno=(selectcnofrominserted)
end
else
begin
updatesc
setsl=@score
wheresno=(selectsnofrominserted)andcno=(selectcnofrominserted)
end
end
触发器T2:
:
添加学生信息时自动根据其学号生成其登录密码
createtriggerT2
onstudent
forinsert
as
ifupdate(sno)
begin
declare@spswchar(12)
select@spsw=snofrominserted
updatestudent
setspsw=@spsw
wheresno=(selectsnofrominserted)
end
触发器T3:
添加教师信息时自动根据其工号生成其登录密码
②存储过程和游标:
教学秘书为学生指定必修课程
createprocstu_cou@subjectvarchar(20),@classvarchar(20),@cnamevarchar(50),@xyearvarchar(4),@termvarchar
(1)
as
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
begin
fetchsxinto@sno
insertintosc(sno,cno,term,type,xyear)values(@sno,@cno,@term,'必修',@xyear)
set@n=@n+1
end
closesx
调用此过程如:
execstu_cou'商务英语','商务英语B081','大学英语','2010','1',就可以为“商务英语”专业“商务英语B081”班指定“2010”学年第“1”学期的“必修课”“大学英语”。
存储过程:
为教师指定其所教课程及所授班级
createproctea_cou@teachervarchar(8),@coursevarchar(50),@classvarchar(20)
as
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()
as
selectcname'课程名称',score'期末',sl'总评',score1'重修1(补考1)',score2'重修2(补考2)',credict'学分',type'必修/选修',xyear'学年',term'学期'
fromcourse,sc
whereo=oandsc.sno=user
--教师查询成绩视图
createviewuser_t1
as
selectsc.sno'学号',sname'姓名',cname'课程名',score'期末',sl'总评',type'必修/选修',xyear'学年',term'学期',tc.class'班级'
fromstudent,sc,course,tc
wherestudent.sno=sc.snoando=oandtc.class=student.classandtc.tno=user
--教师上传成绩视图
createviewuser_t3(学号,姓名,班级,成绩)
as
selectsc.sno,sname,class,score
fromsc,student
wheresc.sno=student.sno
--教学秘书查询学生成绩视图
createviewuser_t4(学号,姓名,课程名,总评,必修选修,学年,学期,班级)
as
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
评定项目
A
B
C
D
需求分析清楚
完整性设计完善
概念结构符合需求
游标和存储过程的使用
逻辑结构设计合理
操作熟练
索引设计合理
文字流畅
有完全性的设置
报告规范
其他:
评价教师签名:
年月日