资源描述
2005年6月三明学院学报Jun.2005第22卷第2期JOURNAL OF SANMING COLLEGEVol.22 NO.2Delphi开发无纸化考试系统田民格(三明学院数学与计算机科学系,福建 三明365004)摘要:主要介绍了用Delphi开发无纸化考试系统的分析、设计及要解决的技术关键问题。关键词:考试系统;题库;抽题;答题;评分;定时Development of Non-Paper Examination System with DelphiTian Min-ge(Department of Computer Science,Sanming College,Sanming 365004,China)Abstract:This starts to analyze the way to develop a non-paper examination system with Delphi.It follows by the design and ends in discussing some key technological issues.Key words:examination system;examination questions database;random select;answers;evaluate;timer收稿日期:2005-04-05作者简介:田民格(1969-),男,福建大田人,三明学院数学与计算机系讲师、高级程序员、软件工程师第2期田民格:Delphi开发无纸化考试系统.217.目前,无纸化考试系统很多,其中比较有名的是无忧软件公司开发的一系列计算机等级考试系统。但在诸多软件中都或多或少都存在一些问题,如有的只能综合考试,不能按教学进度进行同步考试或按章节考试;有的考试科目比较单一,有的只能作为练习不能作考试,缺少安全性;有的帮助功能不全面,有的评分不准确、不合理、麻烦、速度慢等。为此,笔者对无纸化考试系统所应具有的功能作比较全面、系统的分析,并给出具体实现的方法。一个比较好的无纸化考试系统,首先应能以较好形式、较好顺序、较好组合考查学生;其次是借助该考试系统能更系统、更全面、更快、更有效地掌握知识;第三软件以更合理、更简洁、更直观的形式展现在用户面前。一般情况下要同时具备这三个条件不是很容易的,所以开发的软件也就难免有些缺陷。其实,前二者直接决定需求分析问题,后者决定着设计,二者都很重要。1 需求分析无纸化考试系统的用户有两类人,一是教师,二是学生。软件的前台面向学生,后台面向教师,而后台决定着前台。1.1 用户活动分析用户活动的内容主要包括以下几个方面:首先考试系统应适应多种科目的考试,所以要能设置科目的信息,然后再根据不同的科目设置不同的章节,以适应按不同科目不同章节考试;其次创建题库,根据不同科目不同章节不同题型、分值、难度编写题目;第三创建考生信息表;第四设置考试的的范围(科目、章节)、状态(考试、练习)、题量(题库全部题目、限定总分值、按各科目不同题型的分数比例);第五根据教师预定或考生选择创建选考信息表,可包含若干科目、若干相应的章节、考试状态、考试时间及考试后的成绩,然后按所要求的题量抽取题库中的题号,再加上考生的答题和得分情况形成考题表;第六根据题库的答案、分值和考题表的答题进行评分确定各题的得分和总得分;第七,在考试过程中进行同步计时,结束计时并触发评分处理;第八,对成绩进行统计、报表输出等。详细用户活动图如图1所示。1.2 确定系统范围确定计算机系统所能处理的范围,如图1双线框内,而框外部分则由人工处理。1.3 分析用户活动所涉及的数据-确定数据流图画数据流图应遵循“由外向内,自顶而下”的原则进行,首先确定系统范围,考试系统最初的数据流图可表示为如图2所示。在图2的基础上,进一步画出详细反映系统内部数据流动过程,如图3所示。学科设置确定考试科目填写科目名称、科目代码、类别、总题量、抽题量及缺省选择确定各类科目所有章节及缺省选择题库建设编辑、查询题目填写题号、题目、选项、答案、科目代码、章节、题型、空数*分值、难度等办准考证创建考生表填写准考证号、姓名、身份证号、性别等发给考生创建选考表考试填写试卷序号、准考证号、科目名称、考试时间、剩余时间、考试|练习、成绩考生答题确定各试卷题号、答题,形成考题表计时开始考试后启动计时时间到退出考试并触发评分处理系统设置设置科目是否可选、章节是否可选、考试|练习及其使能、是否限定总分值及其使能、恢复考试使能等评分读考题表答题答案及分值答题答案对比、统计分值并保存成绩显示成绩成绩管理读选考表、考生表、科目表查询或生成成绩表,生成报表打印成绩图1用户活动图学科设置科目设置科目信息章节设置章节信息题库建设题库信息科目表教师章节表题库表无纸考试系统考试考生建库教师成绩考生成绩报表教师图2考试系统最外层数据流图成绩管理生成报表设置信息教师打印成绩表(c)办准考证数据流图办准考证接受办证考生信息打印准考证考生表教师(d)成绩管理数据流图设置信息科目选择选考信息选考表考生随机抽题考题信息考题表考生答题答题信息考题表自动评分答题信息选考表同步计时开始考试结束考试(e)考生考试数据流图图3系统内部数据流图说明:在图(a)中科目表包括科目名称、科目代码、类别、题目空数、抽题分数比例、缺省选择;章节表包括类别、章节、缺省选择;题库表包括题号、科目代码、题目、选项、答案、章节、题型、分值、空数、难度。(a)题库建设数据流图(b)系统设置数据流图设置表系统设置考试设置设置信息教师在图(b)中设置表包括科目是否可选、章节是否可选、考试|练习状态、考试|练习状态使能、是否抽取全部题目、是否限定总分值、是否限定总分值使能、,限定题目数量、是否恢复考试、恢复考试使能。在图(c)中考生表包括准考证号、姓名、身份证号、性别。在图(e)中选考表包括试卷序号、准考证号、科目名称、考试时间、剩余时间、考试状态、成绩;考题表包括试卷序号、题号、5个答题、得分。1.4 分析系统数据-生成数据字典分类1N章节缺省选择类别章节试卷序号成绩准考证号科目名称考试时间剩余时间考试状态考生准考证号身份证号姓名性别选考NM科目抽题分数科目代码科目名称题目空数类别缺省选择所属1N题库总题号科目代码章节题目空数选项题型答案分值考题题号答题1得分答题n试卷序号N1数据字典产生于数据流图,是对数据流图中的四个成份(数据流,文件,加工,数据项)的描述的产物,其中文件的描述已在相应位置说明了,其他部分略。2 建立E-R模型图4考试系统总体E-R图根据以上分析,我们可以很容易地确定出实体、属性和实体间的联系,并做出局部E-R图,再综合各局部E-R图产生总体E-R图(如图4)。3 数据库模式设计模式设计就是把E-R图转换为关系数据模型。根据以上分析得到以下六个关系模型和一个系统设置表。科目(科目名称,科目代码,类别,题目空数,抽题分数,缺省选择)章节(类别,章节,缺省选择)题库(总题号,科目代码,章节,题型,题目,选项,答案,分值,空数,难度)考生(准考证号,姓名,身份证号,性别)选考(试卷序号,准考证号,科目名称,考试时间,剩余时间,考试状态,成绩)考题(试卷序号,题号,5个答题,得分)图5考试信息选择与登录界面设置(科目是否可选,章节是否可选,考试|练习状态,考试|练习状态使能,是否抽取全部题目,是否限定总分值,是否限定总分值使能,限定题目数量,是否恢复考试,恢复考试使能)4 应用程序设计的关键技术经过以下步骤,数据库的框架已经搭建起来,接下来就是开发应用程序,运行数据库。根据前面数据流图分析可知,后台操作主要有四个模块,即:题库建设、办准考证、系统设置、成绩管理等四大功能,而前台操作只有一个大模块,即考生考试(含评分,由集中评分改为分散评分,大大提高系统的评分速度)。后台操作的开发相对比较简单,因其只有数据编辑,界面也没有什么特殊要求,所以本文就不介绍了。前台则不同,所用到的各关系模式联系复杂,界面相对复杂,且要求高,所以这里主要介绍这部分内容的设计和实现,特别是一些关键技术的处理,没有这些系统将不好用甚至不能用。4.1 确定工作界面根据前面分析可知,要实现考生考试,至少应有三个界面组成,第一个是封面界面;然后是考试信息选择界面,进行科目、章节选择和考生登录及抽题,如图5所示;接着是答题界面,三个选项卡分别实现选择题、填空题和编程题的答题,在每个选项卡中放置一个DBMemo显示题面、一个DBGrid显示题号、答题、答案,若干单项按钮或文本框接受答题。4.2 数据库连接对于一般的应用程序开发,所选用的数据库主要有SQL Server和Access,前者属于大型数据库,要有专门的服务器,而后者则属于小型数据库,不需要专门的服务器,所以这里Access(*.mdb)作为后台数据库。Delphi用于访问Access数据库的技术有两种:Borland的BDE和Microsoft的ADO1,在微软平台上使用微软引擎访问微软数据库是一个合理的选择。ADO组件都是利用组件的ConnectionString属性或Connection属性连接到数据库,前者利用连接字符串直接连接到数据库,后者先连到ADOConnection组件,再通过该组件的ConnectionString属性连接到数据库,由于应用程序要连到数据库的组件比较多,且数据库的文件名和数据库口令在应用程序使用过程都有可能改变,所以应该用ADOConnection组件的ConnectionString属性连接到数据库,这样,一方面库名或口令更改起来就比较方便(只要改一个地方)。如若库名为db1.mdb,口令为123(这是体现系统安全性的一个方面),则ConnectionString属性值至少为“Data Source=db1.mdb;Jet OLEDB:Database Password=123”,完整连接字符串由Delphi自动产生。其中库名一定要用相对路径,否则若将应用程序复制到其它位置将找不到库;口令一定要有,否则题库、成绩等信息就不安全了。另一方面,也是非常重要的一方面,那就是可以防止脏数据。如某库先通过ADOTable1对表中记录进行删除(增加或修改),然后马上通过ADOQuery1对该表查询删除(增加或修改)后的内容,结果得到的却是删除(增加或修改)前的内容,如果将此二组件都连到ADOConnection组件,则不会出现此问题。另外,ADOConnection组件的LoginPrompt属性要设置为False,否则应用程序运行时会提示输入连接数据库的用户名和口令。4.3 窗体的实现在实现窗体时,首先要考虑答题窗体在考试时必须浮于最顶层且不可移动,这样才能保证考试过程的安全。在Delphi中只有主窗体可以浮上最顶层(将窗体的FormStyle属性设为fsStayOnTop,且只能在主窗体第一次执行定时器事件时设置),且只有第一个启动的窗体是主窗体,但考试系统的第一个显示的窗体是封面窗体,而答题窗体是最后一个显示。为此,应在答题窗体的创建事件FormCreate()中执行application.ShowMainForm:=false;语句,使得主窗体不是第一个显示,这样就保证了答题窗体是主窗体,又能最后一个显示。要使窗体不可移动,就要拦截窗体消息,是标题栏则不予响应。方法是:先在答案窗体的类定义中加入如下语句:procedure WMNCHitTest(var Msg: TMessage);message WM_NCHITTEST;然后编写消息响应函数如下:procedure TForm3.WMNCHitTest(var Msg: TMessage);begin inherited;if (Msg.Result=2)or(Msg.Result=3) then Msg.Result:=1;end;其次,要保证答题窗体中显示不同选项卡时,显示不同题型的考题。这要在选项卡显示事件TabSheet1Show()中通过ADOTable1组件的过滤属性Filter设置过滤,过滤选择题的语句如下:ADOTable1.Filter:=题型=+#39+XZ+#39;第三,要实现练习时DBGrid1网格组件不显示答案。这要在窗体的FormShow()显示事件中将DBGrid1的第三列(序号为2)删除,语句如:DBGrid1.Columns.Delete(2);第四,显示选择题四个选项的DBRadioGroup1组件不带自动换行功能,所以只能显示序号,选项的内容应由DBMemo或Memo组件来显示。第五,答题时,只有在切换到上(下)一题才能提交答案,不能实现网格等组件的同步显示,所以要人为提交,选择题还要先进入编辑状态再修改,最后提交。如:adotable1.Edit;adotable1.FieldValues答题:=i+1;adotable1.Post;第六,考虑到一空有多种答案,所以将多种答案用分号隔开,若答案本身就是分号则用双分号表示,评分时应将其分解为多个答案,双分号还原成单分号,然后再分别评分,单空的评分代码如下:Function TForm3.DTCMP(dt,da:widestring;n:integer):integer;var a:array1.10 of string;s:widestring;L,i,k:integer;begin s:=da;L:=length(s);k:=1;i:=1;while i=L dobeginif copy(s,i,1)=; then if (copy(s,i+1,1)=;) then begin ak:=ak+;i:=i+2; end else begin k:=k+1;i:=i+1; endelse begin ak:=ak+copy(s,i,1);i:=i+1; end;end;result:=0;for i:=1 to k do if ai=dt then begin result:=n;break; end;end;第七,退出考试前一定要关掉所有窗体中的定时器,否则将出现遇到预想不的事件。第八,随机抽题时要调用随机种子randomize;以产生随机数,然后以此随机数抽作为题库中的随机题号,剩下最后几分时直接到题库中抽取相应分值的题目。5 结束语以上所述内容仅仅是开发考试系统过程中主要部分的关键问题。用其它语言如VB、VC等开发考试系统时需求分析、建立ER模型、数据库模式是相同的,不同语言的数据库连接、编码实现等虽不尽相同,但总体上是相似的。笔者用不同语言开发了考试系统,除个别细微功能略有差异外,都运行良好。参考文献:1Marco Cantu.Delphi6M.王辉等译.北京:电子工业出版社,2002(4):541-577
展开阅读全文