1成绩:__________《数据库原理及应用》课程设计课题在线考试系统班级计06-7组长栾习文组员栾习文2008年12月22日—2009年1月4日2在线考试系统1绪论随着标准化考试的日益普及,在各种考试中越来越多地采用了计算机考试的方式。相对于传统的卷面考试而言,由于传统的卷面考试从出题印刷到下发试卷等环节需要较长的时间,接触的人员相对较多,因而在保密方面具有一定的困难。而计算机考试系统采用试题库方式提供试题来源,考前无任何成套试卷,考试时考卷由计算机现场随机生成,各考生试卷不完全相同,从而避免了互相参看等作弊现象或不公平成绩的出现。同时也可考后即可获得成绩,省去了人力评卷的麻烦和弊端。2需求说明对考生而言,分为五个考试状态:待考、就绪、考试中、结束、缺考。考生用准考证号登录考试网站,然后验证考生信息是否一致,如果一致就会停留在考生须知界面,处于就绪状态。所有考生等待服务器发送统一命令分发试卷并同时进入考试中状态。在开考后20分钟后考生仍未到场,考生状态会自动设置为“缺考”,不能参加此次考试。考试过程中可自由答题(可随时定位到每一题)。如果有考生信息不一致的情况,可上报管理员,经审核后进行修改。考生考完试点击“交卷”,经确认后交卷。考后即可查看考试分数。在到达考试时间后,服务器会自动给未交卷的考生结束考试,并可同时给所有考生评卷得出分数。对管理员而言,可以更改数据库的所有内容,可添加、查询、修改、删除考生的信息,设置考试的相关内容。可有选择地录入试题,为题目分类并自动在正确答案表里插入相应的标准答案。开考前服务器可自动为每考生随机生成试卷。考生号由管理员统一设置。服务器会根据考试时间来自动设置考生的考试状态。到达考试时间后,服务器可同时让所有在线考生进入答题阶段。在考试过程中,自动为考生保存考试答案。也可以查看所有考生的在线考试情况。同时也可为出现异常的考生延时等详细功能。考试全部结束后,服务器会备份所有考生信息和答题情况,并给所有考生评卷并生成所有考试成绩表,以便考生查分。3概念模型设计针对以上的功能分析,对数据库的设计做了以下分析。考虑到在线考试的特殊要求,数据库的设计应该包含以下信息:3考生的基本信息用来在考生登陆时进行核对验证,防止考生信息录错的情况。考生考试的基本信息用来控制考试时间和考生的考试状态,统计在线考生和缺考情况,同时也方便服务器统一发送命令,给所有考生同时开始考试和结束考试。从而体现公平一致的原则。题库应包含所有的考试类型、题目内容和每题的分值,以便以后的随机抽题和为考生评分。并且数据库里也存储有每题对应的正确答案,考生的考试答案,这样可以方便评分。还对考生答案做了备份,方便以后的查阅和总结考试情况,以进一步更新考试,提高考试质量。还应把给每位考生随机生成的试题保存起来,方便查阅核对,并可由服务器统一给对应考生发送试卷。最后把评卷的结果和考生成绩统计出来做备份,考生可在考试结束后直接查看考试结果。如果发现有疑问地方也可随时查看和核对。由此分析一共设计了七张表用来存储所有的考生信息和考试信息:考生信息表(包含属性:姓名、性别、准考证号、身份证号、所在学校)、考生考试信息表(包含属性:考生号、准考证号、考试时间、考试状态)、题库表(包含属性:题号、题目、题目类型、分值)、正确答案表(包含属性:题号、标准答案)、考生试卷表(包含属性:题号、考生号)、考生答案表(包含属性:题号、答案、考生号)和考生成绩表(包含属性:准考证号、成绩)。并为每个表设置了能唯一确定每位考生的属性。其中考生信息表里设置属性(准考证号)为主关键字,并在考生考试信息表和考生成绩表里设置属性(准考证号)为考生信息表中属性(准考证号)的外部关键字。这样就可一一关联和对应每一位考生的信息。在考生考试信息表里为每位考生生成一属性(考生号)并设置其为此表的主关键字。以唯一确定每一位考生的考试时间和考试状态。在题库中设置属性(题号)为主关键字,这样就可以唯一确定每一题,防止题目的重复,也方便随机为考生抽题。并在考生试卷表、正确答案表和考生答案表里设置属性(题号)为外部关键字,这样就和题库中的题号一一对应起来,可减少这些表中的属性。从而实现整个数据库设计的完整性和一致性。在考生答案表和考生试卷表中同时设置属性(题号和考生号)为外部关键字,这样就把考生和题目联系起来。通过关联唯一确定每位考生的试卷和答案,也方便了以后的分发试卷和为每位考生评卷。4(1)考生信息和考生考试信息之间的联系:(2)题库和考生试卷之间的联系(3)考生试卷和考生试卷之间的联系考试信息姓名性别准考证号身份证号所在学校考生信息考生号准考证号考试时间考试状态考生考试信息准考证号考生号11抽题题库题号考生号题号题目mn考生试卷题号题目题目类型分值考生试卷答题题号考生号题号答案考生号题号题目答案11考生答案5(4)题库和正确答案之间的联系(5)考生信息和考生成绩之间的联系题库答案题号题目题目类型分值题号标准答案题号答案11正确答案考生信息成绩考生成绩准考证号成绩11姓名性别准考证号身份证号所在学校6在线考试系统模型整体E-R图4逻辑设计整体逻辑数据库结构如下:下面是将各个实体和联系转化为相应的二维表即关系模式,指定各个关系的主关键字和外部关键字,并对各个关系的约束加以限定:考生信息考生考试信息考生考试信息查看成绩考生成绩查看题目考生试卷抽题11111m1题库mm答题n考生答案11对应答案正确答案数据库考生信息考生考试信息题库正确答案考生答案考生试卷7考生信息表字段名数据类型主关键字外部关键字参照的表取值说明姓名varchar(8)不允许为空性别char(2)只允许取“男”或“女”准考证号char(6)Yes数字字符身份证号char(18)数字字符所在学校varchar(16)考生考试信息表字段名数据类型主关键字外部关键字参照的表取值说明考生号char(5)Yes准考证号char(6)Yes考生信息数字字符考试时间char(22)不允许为空考试状态varchar(6)不允许为空题库表字段名数据类型主关键字外部关键字参照的表取值说明题号intYes大于0题目varchar(100)不允许为空题目类型int1或2或3分值int分值in(1,10)备注:其中题目类型中:1-判断题2-填空题3-选择题正确答案表字段名数据类型主关键字外部关键字参照的表取值说明题号intYes题库大于0标准答案varchar(20)Notnull考生试卷表字段名数据类型主关键字外部关键字参照的表取值说明题号intYes题库大于0考生号char(5)Yes考试考试信息Notnull考生答案表字段名数据类型主关键字外部关键字参照的表取值说明题号intYes题库大于08答案Varchar(20)可为空考生号Char(5)Yes考生考试信息Notnull考生成绩表字段名数据类型主关键字外部关键字参照的表取值说明准考证号Char(6)Yes考生信息数字字符成绩int成绩in(0,100)缺省为05物理设计建立数据库:CREATEDATABASE在线考试系统ON(NAME=在线考试系统,FILENAME='c:\在线考试系统.mdf',SIZE=10,MAXSIZE=50,FILEGROWTH=5)LOGON(NAME='library',FILENAME='c:\在线考试系统.ldf',SIZE=5MB,MAXSIZE=25MB,FILEGROWTH=5MB)数据库建表:考生信息表CREATETABLEksxx(snointPRIMARYKEYIDENTITY,姓名varchar(8)NOTNULL,性别char(2),准考证号varchar(6),身份证号varchar(18),所在学校varchar(16),)9考生考试信息表CREATETABLEksksxx(snointPRIMARYKEYIDENTITY,考生号varchar(5)NOTNULL,准考证号varchar(6),考试时间varchar(22)NOTNULL,考试状态varchar(6)NOTNULL,)题库表CREATETABLEtk(snointPRIMARYKEYIDENTITY,题号int,题目varchar(10),题目类型int,分数int,)正确答案表CREATETABLEzqda(snointPRIMARYKEYIDENTITY,题号int,标准答案varchar(20)NOTNULL,)考生试卷表CREATETABLEkssj(snointPRIMARYKEYIDENTITY,题号int,考生号varchar(5)NOTNULL,)考生答案表CREATETABLEksda10(snointPRIMARYKEYIDENTITY,题号int,答案varchar(20),考生号char(5)NOTNULL,)考生成绩CREATETABLEkscj(snointPRIMARYKEYIDENTITY,准考证号Char(6),成绩int,)为了改善和优化数据库的性能和查询效果,为每个表创建了索引,具体代码如下:/*考生信息表索引*/createuniqueindexindex_ksxxonksxx(姓名,准考证号)/*考生考试信息表索引*/createuniqueindexindex_ksksxxonksksxx(考生号)createuniqueindexindex_ksksxx1onksksxx(准考证号)/*题库表索引*/createuniqueindexindex_tkontk(题号)/*正确答案表索引*/createuniqueindexindex_zqdaonzqda(题号)/*考生答案表索引*/createuniqueindexindex_ksdaonksda(题号,考生号)/*考生试卷表索引*/createuniqueindexindex_kssjonkssj(考生号,题号)/*成绩表索引*/createuniqueindexindex_kscjonkscj(准考证号)为了实现表间数据的一致性和完整性,创建了触发器,具体代码如下:/*考生信息表触发器*/createtriggertrigger_ksxx111onksxxforinsert,update,deleteasif(SELECTLEN(准考证号)FROMinserted)6or(SELECTLEN(准考证号)FROMinserted)6beginraiserror('准考证号长度不对!',10,1)rollbacktransactionendelsebeginprint'添加成功!'endifexists(select*frominsertedwhere身份证号in(select身份证号fromksxx))beginprint'身份证号已经存在!'returnend/*考生考试信息表触发器*/createtriggertrigger_ksksxxonksksxxforinsert,update,deleteasifexists(select*frominsertedwhere准考证号in(select准考证号fromksksxx))beginraiserror('准考证号重复!',16,1)rollbacktransactionendifnotexists(select*frominsertedwhere考试时间like'%-%-%'+''+'%:%-%:%')beginraiserror('时间格式不对!',16,1)12rollbacktransactionendifnotexists(select*frominsertedwhere考试状态in('待考','就绪','考试中','结束','缺考'))beginraiserror('状态错误!',16,1)rollbacktransactionend/*题库表触发器*/createtriggertrigger_tkontkforinsert,update,deleteasifexists(select*fr