网络考试系统数据库课设示例.docx
《网络考试系统数据库课设示例.docx》由会员分享,可在线阅读,更多相关《网络考试系统数据库课设示例.docx(21页珍藏版)》请在冰豆网上搜索。
![网络考试系统数据库课设示例.docx](https://file1.bdocx.com/fileroot1/2022-11/21/92b21642-c6cd-4dc6-a5bc-b00f94b5f34f/92b21642-c6cd-4dc6-a5bc-b00f94b5f34f1.gif)
网络考试系统数据库课设示例
目录
第1章绪论1
第2章需求分析2
2.1功能分析2
2.2概念模型3
2.2.1对数据的要求-实体关系图3
2.2.2实体清单5
第3章数据库的设计6
3.1表的设计6
3.1.1表PaperInfo6
3.2数据存储设计14
3.2.1生成试卷编号(getNextID)14
3.2.2输出成绩(outScore)15
3.3自定义函数16
3.3.1格式函数(convStr)16
3.4触发器17
第4章主要代码实现17
附录19
总体数据流程19
总体设计22
第1章
绪论
考试是人员测评过程中不可缺少的一个重要环节。
设计科学的、合理的考试内容,采取公正的、合适的考试形式,可以全面地、客观地、评价人员的综合素质。
第2章
需求分析
功能分析
网络考试系统实施的目的是完全或部分代替现有的传统纸笔式考试或现有的基于计算机的考试系统。
它所提供的功能一定要比现有系统强大,对比现有的考试系统,网络考试系统需要实现的功能有:
题库、自动抽题、网上答题、自动判卷、考试信息归档和系统信息管理等。
下面对系统需要完成的功能进行详细分析。
1)题库
题库是按照一定的教育测量理论,在计算机系统中实现的某个学科题目的集合,是在数学模型基础上建立起来的教育测量工具,题库的核心是试题,二者是考试系统中非常重要的组成部分,其质量的高低直接影响考试系统的水平。
在设计中,对网络题库的模型、基本功能、运行环境以及试题的组织、分布结构、质量要求、参数标注、抽样测试等都有明确的规定。
题库在网络考试系统中是核心子系统,只有建立了题库,并存储了大量的题目,网络考试系统才可以正常进行。
在系统中对题库主要有如下功能需求:
1题目按照类型分类,主要有单项选择题、多项选择题、判断题;
2题目按照业务分类,每一道题都是针对具体的一业务;
3题目区分难度,将题目按照难度区分,在选题时根据难度选择不同的题目;
4添加、修改、打印、浏览题目,这是题库维护的基本功能;
5题目审核,只有经过审核的题目才可以在考试中使用。
审核只能由专家进行;
4试题状态纪录,一道试题要记录出题人、出题时间等信息。
2)自动抽题
网络考试系统要具有自动抽题功能。
在布置考试时,首先定义考试所针对的课程。
然后设置使用的题型,对每种题型选择难度分布后。
系统自动产生考试试卷及每一道题目。
3)网上答题
网络考试系统的考试、维护、管理等所有功能都是基于网络的。
考生在网上答题,在开始答题时服务器将题目以HTML页面的形式发送到客户端浏览器。
答题结束考生将答案以HTML表单的形式发送回服务器。
由服务器将试卷答案保存到数据库中。
4)自动判卷
自动阅卷功能是在考试结束后由系统自动进行客观题的评阅,无需人工干预。
评阅结果可以即时显示出来,也可根据需要设置分级用户管理。
5)考试信息归档
考试的所有信息都要进行归档处理,包括:
试卷、答案、成绩等信息。
这些信息是以后评价考生的依据。
6)系统信息管理
系统信息管理用来维护整个系统的信息,包括考生信息、考试时间、业务信息等等。
这些信息都是围绕着考试系统所设置的。
概念模型
对数据的要求-实体关系图
在分析用户对数据的要求时,使用实体关系图最能表达系统的概念模型。
整个网络考试系统中存在很多实体,而且它们之间的关系也十分复杂。
但是,为了说明用户的需求,并让用户理解系统的功能和他们在系统中所扮演的角色,我将系统抽象为四个概念上的实体,分别是考生、考试、题库和课程,他们之间存在四种关系。
这样既明确地表达了设计思路,又便于与用户进行沟通。
图2.1即为网络考试系统的实体关系图。
考试实体表示系统进行的多次考试,它是联系系统中其他实体的桥梁。
考试与考生是多对多的关系,一名考生可以参加多次考试,同时一次考试有多名考生参加。
而考试成绩就记录在它们之间的关系中。
考试实体具有考试时间这一主要属性。
图2.1网络考试系统实体关系图
考试是面向业务的,这就出现了他们之间的“面向”关系,考试与课程之间是多对一的关系,因为一门课程会进行多次考试。
课程编号作为课程的标识,课程名体现它的名称。
最后,题库是存储所有考试题目的数据仓库,以题目编号作为题目的唯一标识。
考试使用的试题是从题库中得到的,并且试题可以多次的使用。
这样需要有组卷这一关系来建立考试与题库之间的联系,组卷过程中生成的试卷具有编号和状态等属性。
图2.2:
试卷状态图
特别的要说明一下试卷状态这一属性。
图2.2是试卷状态图[2],生成试卷后试卷状态标记为未用状态。
在考生登陆系统进行考试时,首先是从所有标记为未使用的试卷中抽取出一套。
标记为使用状态,并在试卷上填写考生的信息为此考生唯一使用。
此过程是随机的,也就数说从空白卷子中拿出一套来填上学号和姓名。
在考试过程中考生填写的答案也会记入这套试卷,如果考试过程中出现意外,如客户机死机,网络中断等。
待故障解决,考生重新登陆系统,会调用同一套试卷继续作答。
考试结束或考生交卷后,试卷被系统标记为停用状态。
此时的试卷就像被收回一样,不能更改,只有阅卷过程中可以对得分和成绩进行更改。
而阅卷结束后,试卷变成终止状态。
此时的试卷是完全只读的,并且不再发生状态的变化。
作为存档和查阅使用。
还有一个试卷状态是作废状态。
在生成试卷时有可能生成多余的试卷,如果多余的试卷到考试结束时还无人使用,那么系统会自动标记为作废试卷。
同时如果在考试过程中发生违纪现象,考生的试卷同样会被标记为作废状态。
作废后的试卷是只读的,并且没有了应用意义,系统会作为档案保留。
(大的系统含总体数据流程与总体模块划分,见附录)
实体清单
名称
代码
产生
数字
Dbitems
dbitems
TRUE
2462
PaperContents
PaperContents
TRUE
600
PaperInfo
PaperInfo
TRUE
6
PaperSetup
PaperSetup
TRUE
30
Request
Request
TRUE
1
Studentinfo
Studentinfo
TRUE
1
SubjectInfo
SubjectInfo
TRUE
6
第3章
数据库的设计
表的设计
表PaperInfo
表PaperInfo的卡片
名称
PaperInfo
代码
PaperInfo
数据库管理系统
MicrosoftSQLServer2000
表PaperInfo的约束名称
CKT_PAPERINFO
表PaperInfo的代码预览
altertabledbo.PaperInfo
dropconstraintFK_PAPERINF_REFERENCE_STUDENTI
go
altertabledbo.PaperInfo
dropconstraintFK_PAPERINF_REFERENCE_SUBJECTI
go
altertabledbo.PaperContents
dropconstraintFK_PAPERCON_REFERENCE_PAPERINF
go
ifexists(select1
fromsysindexes
whereid=object_id('dbo.PaperInfo')
andname='_WA_Sys_Begins_34C8D9D1'
andindid>0
andindid<255)
dropindexdbo.PaperInfo._WA_Sys_Begins_34C8D9D1
go
ifexists(select1
fromsysindexes
whereid=object_id('dbo.PaperInfo')
andname='_WA_Sys_DeadPaper_34C8D9D1'
andindid>0
andindid<255)
dropindexdbo.PaperInfo._WA_Sys_DeadPaper_34C8D9D1
go
ifexists(select1
fromsysindexes
whereid=object_id('dbo.PaperInfo')
andname='_WA_Sys_MadePaper_34C8D9D1'
andindid>0
andindid<255)
dropindexdbo.PaperInfo._WA_Sys_MadePaper_34C8D9D1
go
ifexists(select1
fromsysindexes
whereid=object_id('dbo.PaperInfo')
andname='_WA_Sys_Score_34C8D9D1'
andindid>0
andindid<255)
dropindexdbo.PaperInfo._WA_Sys_Score_34C8D9D1
go
ifexists(select1
fromsysindexes
whereid=object_id('dbo.PaperInfo')
andname='_WA_Sys_State_34C8D9D1'
andindid>0
andindid<255)
dropindexdbo.PaperInfo._WA_Sys_State_34C8D9D1
go
ifexists(select1
fromsysindexes
whereid=object_id('dbo.PaperInfo')
andname='_WA_Sys_SubjectID_34C8D9D1'
andindid>0
andindid<255)
dropindexdbo.PaperInfo._WA_Sys_SubjectID_34C8D9D1
go
ifexists(select1
fromsysindexes
whereid=object_id('dbo.PaperInfo')
andname='_WA_Sys_TestTimes_34C8D9D1'
andindid>0
andindid<255)
dropindexdbo.PaperInfo._WA_Sys_TestTimes_34C8D9D1
go
ifexists(select1
fromsysindexes
whereid=object_id('dbo.PaperInfo')
andname='_WA_Sys_UniqueID_34C8D9D1'
andindid>0
andindid<255)
dropindexdbo.PaperInfo._WA_Sys_UniqueID_34C8D9D1
go
ifexists(select1
fromsysindexes
whereid=object_id('dbo.PaperInfo')
andname='_WA_Sys_Upload_34C8D9D1'
andindid>0
andindid<255)
dropindexdbo.PaperInfo._WA_Sys_Upload_34C8D9D1
go
ifexists(select1
fromsysobjects
whereid=object_id('dbo.PaperInfo')
andtype='U')
droptabledbo.PaperInfo
go
/*====================================================*/
/*Table:
PaperInfo*/
/*=====================================================*/
createtabledbo.PaperInfo(
PaperIDnvarchar(50)notnull,
SubjectIDnvarchar(10)null,
MadePaperdatetimenull,
DeadPaperdatetimenull,
Statenvarchar
(2)null,
UniqueIDnvarchar(20)null,
Beginsdatetimenull,
TestTimesnvarchar
(2)null,
Scorenvarchar(3)null,
Uploaddatetimenull,
constraintPK_PaperInfoprimarykeyclustered(PaperID)
on"PRIMARY"
)
go
/*===================================================*/
/*Index:
_WA_Sys_Begins_34C8D9D1*/
/*======================================================*/
createindex_WA_Sys_Begins_34C8D9D1ondbo.PaperInfo(
BeginsASC
)
on"PRIMARY"
go
/*======================================================*/
/*Index:
_WA_Sys_DeadPaper_34C8D9D1*/
/*======================================================*/
createindex_WA_Sys_DeadPaper_34C8D9D1ondbo.PaperInfo(
DeadPaperASC
)
on"PRIMARY"
go
/*=====================================================*/
/*Index:
_WA_Sys_MadePaper_34C8D9D1*/
/*=====================================================*/
createindex_WA_Sys_MadePaper_34C8D9D1ondbo.PaperInfo(
MadePaperASC
)
on"PRIMARY"
go
/*===================================================*/
/*Index:
_WA_Sys_Score_34C8D9D1*/
/*====================================================*/
createindex_WA_Sys_Score_34C8D9D1ondbo.PaperInfo(
ScoreASC
)
on"PRIMARY"
go
/*=================================================*/
/*Index:
_WA_Sys_State_34C8D9D1*/
/*=====================================================*/
createindex_WA_Sys_State_34C8D9D1ondbo.PaperInfo(
StateASC
)
on"PRIMARY"
go
/*=====================================================*/
/*Index:
_WA_Sys_SubjectID_34C8D9D1*/
/*=====================================================*/
createindex_WA_Sys_SubjectID_34C8D9D1ondbo.PaperInfo(
SubjectIDASC
)
on"PRIMARY"
go
/*======================================================*/
/*Index:
_WA_Sys_TestTimes_34C8D9D1*/
/*====================================================*/
createindex_WA_Sys_TestTimes_34C8D9D1ondbo.PaperInfo(
TestTimesASC
)
on"PRIMARY"
go
/*===================================================*/
/*Index:
_WA_Sys_UniqueID_34C8D9D1*/
/*======================================================*/
createindex_WA_Sys_UniqueID_34C8D9D1ondbo.PaperInfo(
UniqueIDASC
)
on"PRIMARY"
go
/*====================================================*/
/*Index:
_WA_Sys_Upload_34C8D9D1*/
/*======================================================*/
createindex_WA_Sys_Upload_34C8D9D1ondbo.PaperInfo(
UploadASC
)
on"PRIMARY"
go
altertabledbo.PaperInfo
addconstraintFK_PAPERINF_REFERENCE_STUDENTIforeignkey(UniqueID)
referencesdbo.Studentinfo(UniqueID)
go
altertabledbo.PaperInfo
addconstraintFK_PAPERINF_REFERENCE_SUBJECTIforeignkey(SubjectID)
referencesdbo.SubjectInfo(SubjectID)
go
表PaperInfo的输出参考清单
名称
代码
外键列
Reference_3
Reference_3
UniqueID
Reference_5
Reference_5
SubjectID
表PaperInfo的列清单
名称
代码
PaperID
PaperID
SubjectID
SubjectID
MadePaper
MadePaper
DeadPaper
DeadPaper
State
State
UniqueID
UniqueID
Begins
Begins
TestTimes
TestTimes
Score
Score
Upload
Upload
1)PaperInfo的列PaperID
表PaperInfo的列PaperID的卡片
名称
PaperID
代码
PaperID
数据类型
nvarchar(50)
强制
TRUE
列PaperID的依赖清单
名称
代码
类名称
ReferenceJoin
PK_PaperInfo
PK_PaperInfo
Key
列PaperID的扩充属性清单
(其他略)
数据存储设计
生成试卷编号(getNextID)
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[getNextID]')andOBJECTPROPERTY(id,N'IsProcedure')=1)
dropprocedure[dbo].[getNextID]
GO
SETQUOTED_IDENTIFIERON
GO
SETANSI_NULLSON
GO
CREATEProceduregetNextID
@outIDvarchar(10)output
as
DECLARESysInfoCursorCURSORFOR
SELECTTestcenterCode
FROMsysInfo
OPENSysInfoCursor
declare@lsStartvarchar(4),@nextIDvarchar(6),@oldIDvarchar(6)
FETCHNEXTFROMSysInfocursorINTO@lsStart
CLOSESysInfoCursor
DEALLOCATESysInfoCursor
DeclarenextIDCursorCursorfor
SELECTNextUniqueID
FROMDataCtrl
opennextIDCursor
FETCHNEXTFROMnextIDCursorINTO@nextID
closenextIDCursor
deallocatenextIDCursor
set@oldID=@nextID
set@outId=@lsStart+@nextID
set@nextID=dbo.convStr(cast(@nextIDasinteger)+1,'000000')
updatedatactrlsetNextUniqueId=@nextIdwherenextUniqueID=@oldID
return
GO
SETQUOTED_IDENTIFIEROFF
GO
SETANSI_NULLSON
GO
输出成绩(outScore)
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[outScore]')andOBJECTPROPERTY(id,N'IsProcedure')=1)
dropprocedure[dbo].[outScore]
GO
CREATEPROCEDURE[dbo].[outScore]AS
IFEXISTS(SELECTnameFROMsysobjects
WHEREname='