姚文龙
(广西第一工业学校, 广西 南宁 530023)
目前,很多学校的考试方式基本还是采用纸质试卷的考试方式,考完之后由教师逐一批改试卷。这种方式的优点的可以保留学生做题的痕迹,以便以后查阅。缺点是当考试的次数比较多时,有时可能还要求多备几份试题,由教务部门在考试前随机抽取一份,这样教师出题和批改的工作量就会相当大。随着现在计算机的普及,对于标准化类型的试题,完全可以考虑使用网络智能化方式进行考试,使用程序的进行随机抽题、考试和即时改卷。可以节省纸张,并且减轻的教师的工作量。2011年,我校计算机专业的学生参加了全国系统的一个设计比赛,需要对参加多个竞赛的学生进行训练,智能化考试非常适合这种情况,网络智能化考试的系统就是在此背景下开发实现的。
网络智能化考试可以采用两种模式:客户机―服务器(CS)模式和浏览器―服务器(BS)模式。C/S要求第一台考试机都要安装一个考试端软件。我们的考试系统首先考虑在使用上应当简单易用,对教师和学生的操作要求不高,只要在教师机上进行简单的安装和设置就可以使用。所以在结构上使用Web结构的B/S方式,这样硬件上只要求考试用计算机联网就可以了,软件上则只要求每台计算机安装有浏览器。具体技术上考虑易于安装,使用PHP语言编写动态网页和数据处理,用PHP内置支持的SQLite数据库保存数据,前端使用jQuery,JSON和Html显示试题,并且将学生的考试结果生成报表。这样,只要在教师上安装一个 WampServer软件,就完成了运行环境的安装,再把程序复制进去就完成了整个环境的配置了。在考试管理上可以使用电子表格录入试题,然后用Delphi编写程序将试题导入到SQLite数据库。
系统结构确定之后,考虑最简单的处理方式,在数据库中使用两个表进行数据的存储:试题表和成绩表。其中试题表则用于存储试题的相关信息,包括课程,题目,正确答案和ABCD四个选项,可以处理单项选择题、多项选择题和判断题这几个标准题型。成绩表则是存储学生的考试成绩,包括学生姓名,成绩和考试的时间这些信息。
数据存储使用SQLite,SQLite是一个单文件的数据库,PHP内置支持,用程序将试题并导入之后,在考试时教师只要将这个数据库文件复制入去就可以开始考试了,不需要再进行其它的设置,更加方便使用,这也是为什么选择SQLite数据库,而不是MySQl或者SQLServer的原因。
对于考试的题目的管理考虑使用电子表格准备数据,这里不采用PHP网页的管理方式,而是使用电子表格模板来准备数据,然后用用 Delphi设计程序导入的管理题目数据到SQLite数据库的用户表中。因为电子表格符合人们的使用习惯,相对于直接使用PHP编程在网页中一行行录入的方式,虽然另行编写录入程序在开发时比较麻烦,但用户使用时很方便,因为导入和管理都是教师机上进行,用Delphi编写程序处理数据也不难处理。
整体结构如下,前端由Html,javaScript处理数据的显示,后台由PHP编写相应的页面进行数据和存取处理:
第一步,使用 Navicat for SQLite数据库工具,建立SQLite数据库,再在其中建立试题和成绩两个表。
第二步,使用Delphi设计试题表的管理程序,实现导入数据,管理数据功能,这样可以避开用管理网页的不便。
这里的关键技术是在Delphi中调用管理SQLite数据,这时是采用 SQLiteTable3.pas,sqlite3udf.pas,SQLite3.pas三个单元来实现。
下面的代码用来操作SQLite数据库显示到表格中。sldb ∶= TSQLiteDatabase.Create('radtest.sqlite');sSQL ∶= 'select * from radtm ';
sltb ∶= sldb.GetTable(UTF8Encode(sSQL));第三步,将 sltb内存表的数据通过循环转入到ClientDataSet再实现绑定到控件中。
数据的导入则是使用 TExcelApplication;TExcelWorkbook; TExcelWorksheet;三个单元,连接电子表格,然后取出单元格的数据,再写入到ClientDataSet中,保存时使用循环将数据写到SQLite数据库中。
第四步,是系统的主要的部分,用 PHP技术结合JavaScript实现随机抽题和考试、批改功能。登记页面如下:
当用户选择项目,填写用户名后,点击进入考场。使用location.href将用户名和科目传给考试出题页radtest.htm。在该页面中用javaScript先取出传来的参数,然后使用Ajax方式从后台调用PHP程序获取试题数据:
javaScript代码:
kc = decodeURI(getUrlPara("kc"));
un = decodeURI(getUrlPara("un"));
$.getJSON("radtest.php", {
cmd∶ "getTM",
kc∶encodeURI(kc)
},prodojson);
function prodojson(json){
//……
}
PHP代码:
include_once("conn_sqlite.inc.php");
$kc = urldecode($_GET["kc"]);
$useTMcount = 100; //题量
$querys = sprintf('SELECT title,ra,rb,rc,rd,da,tp,js,rtx,rap,rbp,rcp,rdp FROM radtm where kc="%s"ORDER BY random() limit %d', $kc, $useTMcount);
$results = $dbs->prepare($querys);
$results->execute();
$dbs = null;
$arr4s = array();
foreach ($results as $row) {
$arr4s[] = $row;
}
echo json_encode($arr4s);
在prodojson中取得PHP传来的JSON数据,首先保存到items二维数组,然后逐一分析题型,构造考试页面显示。多选题使用checkbox类型的表单元素,单选题或判断题则使用 radio类型的表单元素。并使用JavaScript函数进行倒计时,考试的页面如下:
当考试时间到时,或者用户点击提交时,进行试卷的批改,将用户的选择项与items二维数组中的正确答案元素进行比较,进行正误提示,同时突出显示相应的正确答案。最后得出本次的练习成绩,并将成绩记录到数据库的成绩表中。
另外,如果点击查看成绩记录,会显示一个报表,显示已经提交的所有练习人员的成绩,方便个人进行对比。
因篇幅关系,以上只是列出了关键部分代码。用比较简单的方式,实现了自动随机智能出题,考试和批改功能,以及成绩记录功能。整个系统混合使用了Delphi,SQLite,PHP,jQuery,JSON,Html技术。
网络智能化考试系统编写完成后,交给我校参加竞赛训练的教师和学生使用,学生和教师都觉得使用上很方便,出题灵活多变,省去了手工出题批改的麻烦,也节省了大量的纸张,经过练习,选手在比赛中也取得了比较好的成绩。
对这类BS方式的架构,一般都会考虑全部使用网页方式进行维护,但在使用中发现网页方式对于批量数据导入的处理很不方便。在此使用混合处理方式,各取其优点,在使用上方便灵活,达到比较好的效果。
在简单的练习测试使用的基础上,只要在其中加入用户管理功能,就可以实现登录考试的功能,可以用于自动网络化考试抽题与批改。如能进一步加入考试记录表,就可以保留考生的答案选项,进行备案和考后查阅。
如上所述,在将来的考试方式中,对于标准化部分题目的考试,完全可以使用网络方式进行,节省纸张和时间,考试结果也更快速和准确,对教师来说,只要将试题准备好就可以发,可以省去出试卷,和考后的试卷批改这些麻烦,其它工作都由考试系统去完成了,大大提高了教师的工作效率,实现教学考试的现代化,具有重大开发意义。
[1] (澳)Luke Welling ——PHP 和 MySQL Web 开发(第四版)[M].机械工业出版社,2009.
[2] (印)Vijay Joshi——PHP与jQuery [M].人民邮电出版社,2011.