构建基于Java平台的网上考试系统*
2011-09-11刘永立
刘永立
(北京财贸职业学院信息物流系,北京101101)
构建基于Java平台的网上考试系统*
刘永立
(北京财贸职业学院信息物流系,北京101101)
本文以“北京财贸职业学院网上考试系统”为蓝本,重点论述了构建基于Java平台的网上考试系统的必要性和关键技术;给出了系统需求分析报告、数据库设计、功能模块设计以及故障处理方法;提出了试题库建设过程中应该注意的问题并给出了参考意见。
网上考试;随机组卷;Java平台
一、引言
近几年,各类院校信息化建设都取得了很大进展,其中基于计算机网络平台的考试模式改革取得了很多成果。本文将以“北京财贸职业学院网上考试系统”为蓝本,重点讨论网上考试系统构建的必要性、关键技术、系统需求分析、数据库设计、功能模块设计等。该系统应用于实际教学一年的时间,效果良好。系统欢迎界面如图1所示。在以下论述中,“本系统”即指该网上考试系统。
图1 “网上考试系统”欢迎界面
二、网上考试系统的优越性
1.试题库建设灵活、高效、及时
教师可随时通过网络平台添加反映最新科技信息和时政信息的试题、修改旧试题、删除过时的试题,确保试题库中的试题最新、最全、最准确。特定情况下,可以在平时训练中将部分试题向学生开放,以便增多学生练习的机会,尤其是对于一些需要取得证书的实训课程,这种做法更是有效。而在传统考试和测验中,教师在考前才会提供给教务部门2~3套备选试题,试题陈旧,试题量少,学生缺乏练习的机会。
2.在节能环保的同时,减轻监考的压力和教师判卷的负担
网上考试不需要任何纸质试卷,学生可以通过浏览器随时参加考试,大大节省了纸张,符合低碳经济的要求;网上考试时,每人一台机器,随机抽取试题,互不干扰,试卷也互不相同,一场考试只要求1至2名监考教师即可(若随堂考试,监考教师可由任课教师担任),大大减轻监考的压力;网上考试系统的自动评分功能比较完备,考试完毕后,教师可以立即得到学生的成绩(一般系统会将考试成绩导出为电子报表),大大减轻教师判卷的压力。
3.能够有效提高学生的成绩
网上考试系统可以开启练习模式,在练习模式下,系统长期对学生开放,对于一些需要反复练习和记忆才能掌握的问题,学生可以进行重复练习,从而确保学生有足够多的训练时间,有效提高学生的成绩;另外,网上考试系统的特色之一就是“随机抽取试题”,也就是“随机组卷”,这一功能确保试卷和试题的唯一性,因此会大大减少作弊的可能性,学生的成绩更加真实可信。
4.有助于实现数据共享、数据管理和无纸化办公
与传统考试相比,网上考试可以借助数据库系统的强大数据管理和数据维护功能,实现课程数据、学生数据、成绩数据的各部门共享,有利于学生和教师在学习和工作中及时查看相关数据,满足学习和工作的需要。
三、构建网上考试系统时应注意的问题
1.确保试题库中的题量满足随机抽题的要求
为了使得抽取的试题具有随机性,系统在随机组卷时通过随机数产生试题编号,然后在试题库中选中该编号的试题,将其加入到试卷中。因此,试题库中包含足够多的试题是确保随机抽题能够顺利进行的前提。经过多次测算,笔者认为,当试题库中试题总量达到试卷题量的5倍以上时可以基本满足网上考试的要求。当然,试题库的建设是一个长期的、循序渐进的过程,试题库越完善,得到的随机试卷越科学、合理。
2.任课教师应充分考虑各章节在课程中的权重
任课教师在编辑章节信息时需要考虑到每个章节在课程中的权重。举例来说,课程A包含四章,分别是:A1、A2、A3、A4,各章的权重分别是:0.2,0.3,0.4,0.1。假设试卷中的题型分为:是非题、单选题、多选题,这三类题型在试卷中的题量分别是:20、30、20,也就是在每份随机产生的试卷中是非题20道,单选题30道,多选题20道。那么课程A各章节在试卷中及在题库中的题量如表1所示,括号中的数字是各题型在题库中题量的最低要求。
表1 课程A各章节在试卷中以及在题库中的题量分布
3.避免针对同一知识点多次出题
前面已经提到,系统随机抽题时基于计算机产生的随机数,因此,试题库中任何一道试题都可能会被抽到。若在同一章节或同一题型中,针对某个知识点重复出题,可能造成随机产生的试卷中,针对该知识点出现两道或多道试题,这样一来,试卷便失去了科学性和公平性。
四、网上考试系统需求分析及主要功能模块设计
网上考试系统的用户分为三类:管理员、任课教师、学生。
1.管理员的日常操作
(1)数据库数据的初始化:导入/编辑学生数据、导入/编辑任课教师数据、导入/编辑课程数据。学生数据、教师数据、课程数据的数据量都比较大,可以借助系统的导入功能完成批量数据的导入,当个别记录出现问题时可以进行单条记录的修改和删除。
(2)考试模式设置:将指定课程设定为“考试”模式或“练习”模式。在“考试”模式下,学生只能有一次抽取试卷的机会,并且系统会倒计时,时间一到,系统会自动交卷。当然,学生也可以随时主动交卷;在“练习”模式下,系统不会倒计时,也不会自动交卷,只能由学生主动交卷,给学生充足的思考时间和练习时间。另外,在“练习”模式下,学生可以多次抽取试卷,反复练习。
(3)密码修改:管理员根据实际情况,可以定期修改管理员登录密码,确保系统安全。
(4)成绩查询/成绩导出:查询指定课程所有学生的成绩,并将其导出为Excel报表格式。
2.任课教师的日常操作
(1)设计并编辑所任课程的试卷信息、章节信息、试题库:任课教师根据课程的特点设计试卷信息,主要是题目类型(本系统第一版只包括如下三类题型:是非题、单选题、多选题)、每类题目在试卷中的题量、每类试题的分值、试题数目、考试时间等信息;任课教师根据实际情况设定课程中每个章节在试卷中所占的权重;任课教师应手动添加试题或将试题编辑为Excel表,然后导入到试题库中。
(2)考试初始化:由于系统平时向学生开放,因此保存了学生在平时练习过程中的试卷信息和成绩,在正式考试之前,任课教师需要将这些历史记录清空,为考试做好准备。
(3)考试模式设置:任课教师可以设定所任课程的模式。平时练习时,将系统设定为练习模式;正式考试前,将系统设定为考试模式。任课教师只能设定自己所担任课程的考试模式,管理员可以设定任何一门课程的考试模式。
(4)查询学生信息:正式考试前,任课教师需要检查自己的学生信息是否完整,一旦发现某个学生的信息未被导入到数据库中,应及时通知管理员,以便所有学生都能够正常参加考试。
(5)随机抽题:试卷信息和试题库创建完毕后,为了检验试卷的合理性以及试题的准确性,任课教师可以在考前进行测试,随机抽取试题,并进行组卷,发现问题后及时修改,确保试题库和试卷信息的正确性。
(6)考试管理:正式考试过程中,学生只能进行一次抽取试卷的操作和一次交卷操作。但是也可能会遇到一些网络问题,造成不能正常抽取试卷或试卷提交失败。万一遇到这种情况,任课教师可以针对考场的实际情况手动修改学生的试卷信息(主要是修改登录次数),帮助学生获取试卷并确保试卷正确提交。
(7)成绩查询:考试完毕后,任课教师可以查询所任课程所有学生的成绩,并将成绩导出为Excel报表格式。
(8)密码修改:为了确保系统安全,任课教师在首次登录后,应该及时修改自己的登录密码,平时使用过程中,也应该定期修改密码。
3.学生的日常操作
(1)随机抽取试题:平时练习阶段,学生可以随时通过浏览器登录到系统,进行任何一门课程的练习,练习成绩不会被教师记入最终成绩中;正式考试期间,学生在指定的教室,指定的时间登录到系统,参加考试,随机抽取试卷,此时系统会按照教师设定的时间倒计时。
(2)查询成绩:学生可以随时登录系统,查看自己任何一门课程的成绩。
(3)修改登录密码:学生的初始密码与学号相同,为确保数据安全,学生应该在首次登录后,修改自己的登录密码。
总体来说,通过网上考试系统,任课教师负责设定试卷题目类型、每类题目的分值、题量,并负责导入/编辑题库数据、查询成绩;学生可以随机抽取试卷进行考试或练习,并能够查看自己的成绩;管理员负责管理教师数据、课程数据以及完成数据库初始化工作。因此,该系统不但具备信息管理系统的特征,同时必须具备成绩评定和随机组卷的功能。网上考试系统的主要功能模块如图2所示。
图2 网上考试系统的主要功能模块
五、构建网上考试系统的关键技术分析
本系统是基于B/S结构的动态站点,主要由两部分组成:客户端(浏览器);服务器端(Web程序)。在服务器端需要Web服务器(Web程序的运行环境)、数据库管理系统等软件的支持,在客户端只需要浏览器即可。
构建Web程序可从如下两种技术中选择,基于微软IIS Web服务器的ASP/ASP.NET技术;基于Java平台的JSP技术。本系统采用第二套方案,主要是考虑到Java平台的开放程度较高,有丰富的插件,且构建成本较低。
1.开发工具的选择
本系统基于Java平台,需要按次序安装以下软件:jdk1.6,Netbeans6.1,GlassFishV2,MySQL Server5.0。Netbeans6.1作为Web程序的开发环境,不但内嵌了GlassFish Web服务器,而且利用该IDE可以非常方便地连接MySQL Server数据库。为了便于操作数据库,可以在安装完MySQL Server5.0后,安装Navicat8软件,该软件是一款不错的MySQL Server的客户端工具软件。
2.框架和库文件
构建基于Java平台的JSP程序可以直接采用MVC模型进行构建,也可以采用某些软件架构,如:Struts、JSF、RichFaces等,这些架构都是在MVC模型的基础上进行开发的。
RichFaces是JBOSS公司开发的Web应用程序框架,其基础框架是JSF,但在JSF基础上进行了扩展,提供了更为丰富的JSF控件;它支持Ajax技术,使程序员能够轻松地构建RIA(Rich Internet Applications)Web应用程序。
本系统基于RichFaces框架进行开发,需要在Netbeans6.1中添加RichFaces框架所需的相关JAR文件。另外,由于在数据导入和导出过程中需要操作Excel文件,所以还需要jxl开源组件。
系统所需的主要JAR文件如表2所示(所有文件都可从网上下载)。
表2 系统所需JAR文件列表
3.数据库设计
首先通过Navicat8客户端软件在MySQL Server5.0数据库管理系统中创建数据库“exam”,然后在该数据库中建立如表3中所示的数据表。
课程表course中的字段分别为:课程ID、课程名称、是非题数目、是非题分值、单选题数目、单选题分值、多选题数目、多选题分值、考试时间、任课教师ID、考试模式(练习或正式考试);章节表chapter中的字段分别为:章节ID、章节名称、所属课程ID、该章在课程中所占权重;试题库表question中的字段分别为:试题ID、试题类型、试题内容、选项A、选项B、选项C、选项D、正确答案、所属章节ID;教师表teacher中的字段分别为:教师ID、教师姓名、登录密码、角色;学生数据表student中的字段分别为:学号、姓名、性别、登录密码、所属班级;试卷表testpaper中的字段分别为:试卷ID、学号、课程ID、登录次数(正式考试时,若不出现任何网络故障和设备故障,每份试卷的登录次数一般不能大于1,除非故障出现后,进行二次登录,有可能造成登录次数大于1)、成绩、客户端IP、客户端网卡信息、是否成功交卷、考试用去的时间;试卷详细信息表testpaper_item中的字段分别为:考题ID(在随机试卷中的编号)、试题ID(在题库中的编号)、考生的选择、试卷ID、考题出现在试卷中的位序。
表3 系统所需数据表
需要特别注意的是,正式考试时,为了防止考生多次登录到系统进行答题,在数据表testpape中设置一个字段“logincount”,用来记录考生参加本门课程考试的次数。一旦考生成功获取试卷,该标志位便被设置为“1”;另外设置一个字段“submitsuccess”,用来记录该考生是否成功提交试卷。考生登录系统后,系统若发现该考生已经成功提交过该门课程的试卷(submitsuccess字段为真),则不允许该考生重新抽取试卷;相反,若考生计算机出现故障,或由于网络瘫痪等原因,造成考生重新登录系统,则submitsuccess字段一定为假,此时系统将允许考生重新答题,但不会重新抽取试卷,仍然采用故障发生前的那套试卷,并且将登录次数字段“logincount”累加。
4.随机组卷的实现方法
随机组卷的基本思路是:通过随机数函数,产生一个随机数列,然后以该随机数列为基础,在试题库中抽取试题。当然,得到的随机数列的每项都应该大于0且小于题库中对应题型试题总量。另外,为确保同一试题在同一试卷中只出现一次,构建的随机数列中各数据项应该互不相同。如何产生满足要求的随机数列,方法很多,也比较简单,本文不做阐述,下面只给出随机试卷生成过程中是非题的创建方法,重要代码及说明如下所示(限于篇幅,代码有删节)。
public ArrayList createTestpaper_r_w_Random()
throws IOException,ClassNotFoundException{
//变量l是最终试卷中是非题的列表
ArrayList l=new ArrayList();
//外层for循环开始;变量array_Chapter中包含章节列表
for(int i=0;i //首先获得第i章的所有是非题 ArrayList all=new ArrayList(); all=new ManageQuestion().getAllQuestion(" where chapterid="+"'"+ array_Chapter[i].getId()+"'"+"and type="+"'"+ "r_w"+"'"); //若没有找到任何记录,则结束本次循环 if(all.size()<=0){continue;} //定义变量mt,类MyTools中包含产生随机数的方法myRandom() MyTools mt=new MyTools(); /*questionHash中保存抽取到的试题; 方法getNumberOfQuestions_r_w()返回试卷中第i章的是非题个数 */ int[]questionHash=new int[array_Chapter[i]. getNumberOfQuestions_r_w()]; //随机获取第i章的是非题,保存在变量questionHash中 questionHash=mt.myRandom(array_Chapter[i]. getNumberOfQuestions_r_w(),all.size()); //若questionHash为空,结束本次循环 if(questionHash==null||questionHash.length <=0){continue;} //将抽取到的试题添加到到变量l中 for(int j=0;j }//外层for循环结束 if(l!=null&&l.size()>0){ /*利用addQuestionID_Show()方法为所有抽取到的是非题添加试题编号,该试题编号将最终显示在随机试卷中 */ l=this.addQuestionID_Show(l); //若创建的是非题多于试卷的要求,则去掉多余的试题 while(l.size()>this.num_r_w){l.remove(l. size()-1);} }//if语句结束 return l; }//方法createTestpaper_r_w_Random()结束 5.故障处理方法 任何系统都不能做到无故障运行。网上考试系统在运行过程中,可能会出现如下问题:答题开始后,由于客户端计算机故障、网络故障等问题造成答题信息丢失,考生不得不重新抽取试卷。如此一来,不但影响考生的情绪,还将拖延考试时间,造成考试秩序混乱。为了防止此类情况发生,必须实现试卷信息及答题信息的及时存储。 试卷信息的及时存储,解决的办法是在考生正式答题前将其抽取到的所有试题存入数据库中,一旦出现问题,需要重新答题时,系统直接从数据库中读取试卷,避免重新抽题对考生心理的影响。 考生答题信息的及时存储,解决的办法是每当考生答完一道题,立即将该考生的答题信息暂存到数据库,当然,这样做会在一定程度上加重网络负担,但是相对来说比较安全可靠。另外一种替代办法是将答题信息存入客户端,这种办法虽然可以减轻网络负担,但是一旦客户计算机由于病毒等原因出现问题时,可能会造成更大的损失(在多媒体机房中,这种情况很常见),因此,本文并不推荐此种方法。 另外,为确保系统的稳定可靠,客户端每隔5秒钟向服务器发送一个探测数据包,一旦发现无法与服务器正常通讯,及时弹出警告信息,通知考生和监考人员,以便尽早发现问题,避免考生的无效工作。☉ [1]张全和.关于考试阅卷系统开发的必要性和可行性[C].重庆大学计算机基础教学研讨会论文集,2004.4. [2]全渝娟,范荣强.基于Web的远距离考试系统[J].计算机应用与软件,2003(7). [3]http://www.netbeans.org[DB/OL]. [4]http://www.javaeye.com/[DB/OL]. [5]http://www.mastertheboss.com[DB/OL]. [6]殷兆麟.Java语言程序设计[M].北京:高等教育出版社,2002:115-132. [7]刘永立,白地动.基于JAVA平台的网上成绩管理系统的设计与实现[J].中国教育信息化,2010(1). (编辑:金冉) book=46,ebook=124 TP311.52 B 1673-8454(2011)09-0046-05 项目:2009年北京教委人文课题,项目名称:商业连锁物流发展研究(sm200900001003)。