SQLSEVER课程设计报告.docx
《SQLSEVER课程设计报告.docx》由会员分享,可在线阅读,更多相关《SQLSEVER课程设计报告.docx(22页珍藏版)》请在冰豆网上搜索。
SQLSEVER课程设计报告
数据库设计与管理
课程设计报告
题目:
教师监考管理系统
专业:
信息管理与信息系统
班级:
120506
姓名:
王学勇
学号:
20122553
指导教师:
赵春艳
学期:
2014-2015-1
教师监考管理系统
一、概述
题目:
教师监考管理系统
背景:
随着计算机技术的飞速发展,办公自动化已经渗透到社会行业的方方面面,高校教育采取的计算机辅助的范围越来越大,在这一过程中,高校考试监考安排一直是一个迫在眉睫的问题,为了使管理者摒弃手工安排教师,我用SQLServer2005设计了教师监考管理系统,实现办公自动化,减轻管理者负担
任务:
教师人员管理,监考日程管理,监考教师分配管理,教师课表登记等几大模块,并提供了对各个功能模块的查询、更新、统计等功能。
该系统可以满足程序自动生成教师的前期准备,从而减轻管理者的工作负担,提升工作效率.
二、需求分析
1.教师人员管理
在教师表中对教师等的信息进行增删改查,同时关联教师课表信息,对安排监考信息进行约束.
为此,我在教师表中设置了教研室外键,在课程表中关联了教师表,来方便处理.
2.监考日程管理
可以实现对监考日程的增删改查,以存储过程封装的方法方便管理者使用.
3.安排监考
此项为程序生成的前期准备,并可以进行手工进行生成监考信息,主要利用触发器进行操作,在增加一条
4.职工工资管理
此项为职工工资的最终统计,根据不同监考类型将职工工资最终统计出来
三、数据库概念结构设计
E-R图
图3-1
四、数据库逻辑结构设计
1.数据库名称:
ins
2.包含的数据文件名为ins_data.mdf,存储位置为“F:
\yog_db”日志文件名为ins_log.ldf,存储位置为“F:
\yog_db”。
3.E-R图转为5个表,都符合三范式要求,具体表结构的列表如下表所示:
表4-1classes
属性名
数据类型
说明
是否为空
主键/外键
取值范围
c_bh
char(5)
课程编号
否
主键
c_date
char(20)
课程日期
否
c_tch
char(8)
任课教师
外键
c_name
char(10)
课程名称
表4-2exam_lx
属性名
数据类型
说明
是否为空
主键/外键
取值范围
exam_lx
int
监考类型
否
主键
exam_name
char(10)
类型名
否
exam_money
int
监考工资
>0
表4-3office
属性名
数据类型
说明
是否为空
主键/外键
取值范围
o_bh
char(5)
教研室编号
否
主键
o_name
char(20)
教研室名
否
表4-4schedule
属性名
数据类型
说明
是否为空
主键/外键
取值范围
s_bh
char(5)
日程编号
否
主键
s_name
char(5)
考试科目
否
sch_lx
Int
监考类型
s_num
int
教师数量
否
>0
s_date
Char(4)
监考日期
否
s_noon
Varchar(50)
上/下午
s_place
Varchar(50)
地点
s_classes
Varchar(50)
参与班级
s_tch
Varchar(50)
参与教师
表4-5teacher
属性名
数据类型
说明
是否为空
主键/外键
取值范围
t_bh
char(5)
教师编号
否
主键
t_name
char(5)
教师名称
否
t_office
int
所在教研室
否
外键
t_times0
Int
类型0次数
>0
t_times1
Int
类型1次数
>0
t_times2
Int
类型2次数
>0
t_times3
Int
类型3次数
>0
t_times4
Int
类型4次数
>0
t_salary
Int
监考工资
>0
t_times_all
Int
总次数
>0
五、数据库物理实现
1.数据库建立
(1)创建数据库ins,同步设置数据文件和数据日志,如图5-1所示:
图5-1
2.数据表建立
(1)创建教师信息表,如图5-2,数据表设计表窗口图如5-3,表浏览窗口图如图5-4所示:
图5-2
图5-3
图5-4
(2)创建监考日程表schedule,数据表设计表窗口图如5-5,表浏览窗口图如图5-6所示:
图5-5
图5-6
(3)创建教研室表office,考试类型表exam_lx数据表设计表窗口图如5-7,5-8表浏览窗口图如图5-9,5-10所示:
图5-7
图5-8
图5-9图5-10
(4)创建课程表classes,数据表设计表窗口图如5-11,表浏览窗口图如图5-12所示:
图5-11
图5-12
3.数据库安全完整性实现
(1)在创建教研室表office时,就已经将编号列o_bh声明为主键。
相关的语句如下:
[o_bh][varchar](50)primarykeynotNULL
验证结果截图如5-13:
图5-13
(2)创建teacher表t_times_all列大于0的规则,并将这个规则绑定到teacher表的t_times_all字段,创建过程如图5-14
图5-14
验证结果截图如5-15:
图5-15
(3)创建教师信息teacher表时,已经将相应的字段设置了默认值,所以在对教师表进行增加操作的时候,对应字段会自动为默认值
数据插入前的界面如图5-16:
图5-16
使用语句insertintoteacher(t_bh,t_name,t_office)values('007','008','009')向teacher表中的t_bh赋值007,t_name赋值008,t_office赋值009,数据插入后的界面如图5-17
图5-17
(3)创建教研室表office删除数据触发器,当删除一个教研室的时候,相关的教研室下的教师清空
触发器的创建如图5-18
图5-18
触发器操作前的数据如图5-19
图5-19
删除数据的语句为:
deletefromofficewhereo_bh=’007’
删除数据后的结果如图5-20,5-21所示
图5-20
图5-21
4.数据操作实现
(1)建立存储过程,用于向教师表插入数据,插入数据前,如图5-22:
图5-22
插入数据后,教师信息表teacher的数据如图5-23:
图5-23
(2)建立存储过程,用于向监考日程中更新教师信息,本次过程中向
'2014-12-10','上午','数学的考试中将'陈守则'加入,之后的操作为向对应的监考日程参与教师列增加'陈守则'的教师编号,同时根据当前监考日程的类型更新教师表'陈守则'的对应类型监考次数的信息,本次监考类型为0,所以对应教师表'陈守则'的t_times0对应增加1;总监考次数增加1;职工工资对应的从监考类型表中找到相对应类型0的工资20,更新到教师表'陈守则'的总监考工资列上
运行前日程表,教师表如图5-24,5-25所示:
图5-24
图5-25
本次存储过程的语句如下:
createprocedureadd_task2
@tch_namevarchar(50),@sch_datavarchar(50),@sch_noonvarchar(50),@sch_kmvarchar(50)
as
declare@bhchar(6),@sch_bhvarchar(50),@lxvarchar(50),@svarchar(50),@times0varchar(50),@times1varchar(50),@times2varchar(50),@times3varchar(50),@times4varchar(50),@salavarchar(50)
set@times0='0'
set@times1='0'
set@times2='0'
set@times3='0'
set@times4='0'
select@bh=t_bhfromdbo.teacherwheret_name=@tch_name
select@lx=sch_lx,@sch_bh=s_bhfromdbo.schedulewheres_date=@sch_dataands_noon=@sch_noonands_name=@sch_km
select@sala=exam_moneyfromdbo.exam_lxwhereexam_lx=@lx
if@lx='0'
set@times0='1'
elseif@lx='1'
set@times1='1'
elseif@lx='2'
set@times2='1'
elseif@lx='3'
set@times3='1'
elseif@lx='4'
set@times4='1'
updatedbo.teacher
sett_times0=t_times0+@times0
wheret_bh=@bh
updatedbo.teacher
sett_times1=t_times1+@times1
wheret_bh=@bh
updatedbo.teacher
sett_times2=t_times2+@times2
wheret_bh=@bh
updatedbo.teacher
sett_times3=t_times3+@times3
wheret_bh=@bh
updatedbo.teacher
sett_times4=t_times4+@times4
wheret_bh=@bh
updatedbo.teacher
sett_times_all=t_times_all+1
wheret_bh=@bh
updatedbo.teachersett_salary=t_salary+@salawheret_bh=@bh
updatedbo.schedulesets_tch=s_tch+','+@bhwheres_bh=@sch_bh
go
execadd_task2'陈守则','2014-12-10','上午','数学
执行该存储过程监考日程表,教师表结果如图5-26,5-27
图5-26
图5-27
(3)建立存储过程,用于教师,将编号为“001700”的教师删除
删除数据前,教师信息表中的数据如图5-28:
图5-28
删除数据后,教师信息表中的数据如图5-29:
图5-29
(4)建立存储过程,教师表中查询监考次数小于20教师列表
操作过程如图5-30:
图5-30
(4)建立存储过程查找某个教师的的各类工资汇总和
使用的语句为:
createprocedureinq_pronfa@p_idvarchar(50),@msgaachar(500)output
as
declare@all_sint,@t0int,@t1int,@t2int,@t3int,@t4int,@ts0int,@ts1int,@ts2int,@ts3int,@ts4int
set
@all_s=0
select@t0=t_times0fromdbo.teacherwheret_name=@p_id
set@all_s=10
select@t0=t_times0fromdbo.teacherwheret_name=@p_id
select@ts0=exam_moneyfromdbo.exam_lxwhereexam_lx='0'
set@all_s=@all_s+@ts0*@t0
select@t2=t_times2fromdbo.teacherwheret_name=@p_id
select@ts2=exam_moneyfromdbo.exam_lxwhereexam_lx='2'
set@all_s=@all_s+@ts2*@t2
select@t3=t_times3fromdbo.teacherwheret_name=@p_id
select@ts3=exam_moneyfromdbo.exam_lxwhereexam_lx='3'
set@all_s=@all_s+@ts3*@t3
select@t4=t_times4fromdbo.teacherwheret_name=@p_id
select@ts4=exam_moneyfromdbo.exam_lxwhereexam_lx='4'
set@all_s=@all_s+@ts4*@t4
select@msgaa=@all_s
go
/*执行存储过程*/
declare@msgaachar(500)
execinq_pronfa'陈守则',@msgaaoutput
select@msgaa
执行过程及最终结果如图5-31所示
图5-31
六、心得体会
本次课程设计自己感觉时间很紧迫,期末一大堆的事情都压在一起,但这并没有妨碍我去认真思考琢磨数据库中的精华内容.
从选题开始,感觉自己找了一个重担,几经多次想要放弃,但还是本着能够多学点知识的目的去做的本次课程设计,本次设计中,我学会的数据库中很重要的东西就是利用数据库的本身的强大功能去实现相对应的丰富多彩的功能,这样一来,可以大大减轻数据程序设计端的压力,并且数据库本身的完整性约束,也会为程序的执行带来很大的便捷.
本次设计中,最感到难处理的就是ER图的处理,这个是最重要的也是最难的,如果设计一开始就把ER图搞错了,以后的设计就无从谈起了,相反,如果将ER图从源头归正,那么下面的工作就会顺水行舟.
值得注意的是,我们不能过多的去依赖数据库的内置函数方法,过多的以来只会导致我们程序上的慵懒,依我看来数据库在程序设计中的角色应该单纯的就是一个存储数据的容器,在这个容器上进行的丰富多彩的操作基本上应该在程序上实现,而不是依赖数据库的存储过程和函数.
此外,我们都会遗忘sqlsever系列优秀的功能,备份还原.本次课程设计中,好多次因为数据误操作导致数据全部丢失,但因为之前听老师上课所讲,事先将有数据的数据库分离打包备份,在遇到数据丢失的情况下可以很快的进行恢复.
最后,感谢老师,感谢数据库课程设计,让我能在这个浮躁的社会中静下心去琢磨明白一些实用的技术,让这些技术在日后的工作学习中发挥能量!