翁健高 李 文
(广西大学计算机与电子信息学院,广西 南宁 530004)
文本型试卷随机组卷系统的设计与实现
翁健高 李 文
(广西大学计算机与电子信息学院,广西 南宁 530004)
随着高校教学改革的深化,目前的高校的各门课程基本上都采用试卷库的方式进行组卷考试,这样能够更全面地衡量学生对每门功课的掌握程度,也更体现了教考分离的核心本质。目前考试试卷的组卷方式普遍采用任课教师预先组好每一份试题,考试时再随机抽取任一份试卷的方式或采用市面上的数据库随机组卷系统的方式进行组卷,而文本型试卷随机组卷系统利用教师提交的WORD文档组成的试题库直接转换为文本文档,然后使用此文档类型的试题库直接随机生成考试试卷,使试题库随机组卷实现简单化、易用性和便利性。
试题库;文本文档;随机组卷
随着高校教学改革的深化,目前的高校的各门课程基本上都采用试卷库的方式进行组卷考试,这样对学生会更公平、更能全面衡量学生所掌握的知识。
目前试卷的组卷方式普遍采用任课教师预先组好每一份试卷,考试时再随机抽取任一份试卷的方式或采用市面上的数据库随机组卷系统的方式进行组卷,前者随机性不高,而数据库类型的随机组卷系统在建立试卷库时录入量大,给建立试卷库带来了很大的难度。
“文本型试卷库随机组卷系统” 能够避免以上两种组卷方式的缺点,只要将已上交的WORD文档类型的试卷库转换为文本文档,就能实现试卷库的随机组卷工作,不需要再做设置,也不需要录入,从而大大地减轻了教务人员或教师的试题录入工作量。该系统的缺点是只适用于能将WORD文档并顺利转换为文本文档的试卷库,对于有数学公式的试卷库不适用。
目前,高校任课教师上交的试卷库一般都为WORD文档,如果需要使用本系统来随成生成考试试卷,必须按照下列规则来构建试卷库,系统才能顺利稳定地运行。
1.试卷中每大类型题目的标号必须为“一、二、 三、四、… ”(如“一、填空题,二、选择题.....”)设置,否则不能正确工作。试卷库最多能设置十大类型的题目,如果超过十个类型的题目量,则十大类型题以后的题目系统不作组卷操作;如果试卷库的题目类型确实超过十大类,则可将十大类型后面的题目放在另一个WORD文档中,组卷时分别组卷,然后将组出的两份试卷合并即可。
2.每大类型题目的每小题的标号必须如“1、2、……999.”设置,每大类型题目最多能设置999小题,否则不能正确工作。
3.如果小题内还有分标题,则分标题的标号可以设置为①、②、③、④…或Ⅰ、Ⅱ、Ⅲ、Ⅳ…或⑴、⑵、⑶、⑷…或 A、B、C、D…或 1)、2)、3)、4)…。
4.每小题的排列可以换行,也可以包含有空行,系统都能正确分辨。
考虑到系统的通用性,系统应包含试卷库试题类型分析、试题抽取和试卷组卷三部分。界面设计应包括输入将要生成试卷的试卷名称,试卷库路径选择、试卷文件输出路径选择、试题抽取和试卷组卷五个部分。
1.抽题随机性的实现
随机性是该系统的灵魂,只有实现对每大题的所有小题抽取的随机均等抽取的机会,才能真正体现系统的优越性。目前在编程过程中产生随机数,最常用的方法是使用随机函数,但该函数是根据数学迭代的方式产生,虽然能随机产生各不相同的随机数,但分布仍然太集中,所以本系统采用由系统时钟的方法产生随机数,这样每大题内所有小题都会最大限度地获得均等随机抽取的机会,保证了系统的随机性。实现核心代码为:
For i =1 To m
a(i) = i
Next i
100: start = Second(Time) Mod m
If start = 0 Then GoTo 100
For w =1 To 10
Next w
120: step = Second(Time) Mod m
If step = 0 Or step =1 Then GoTo 120
j = 1
Do
b1(k, j) = a(start)
i = start
For h = i +1 To m
a(h - 1) = a(h)
Next h
If (start + step) < m Then
start = (start + step) Mod m - 1
Else
start = (start + step) Mod m
End If
If start = 0 Then start = m
m = m - 1
j = j + 1
Loop Until j > n
End If
其中DO循环的功能是过滤掉已经选取过的题目被重新选择的情况。
2.试卷库题型及题量分析
试卷库中包含了题目类型和每类型的题目数量,组卷的目的就是能从每个类型的题目中抽取一定数量的题目。为此,系统必须先分析试卷库,确定试卷库中所包含的题目类型及每类型题的小题数量和每类型题目在文档中的位置,为产生随机题目和试题抽取提供依据。实现核心代码为:
Do While Not EOF(1)
On Error Resume Next
Line Input #1, NextLine
ftotal = ftotal + 1
If InStr(Trim(NextLine), "一、") Then
tmname(itypenum) = NextLine
ftotalh(itypenum) = ftotal
Do While InStr(Trim(NextLine), "二、") = 0 And Not EOF(1)
Line Input #1, NextLine
ftotal = ftotal + 1
If InStr(Trim(NextLine), "、") <> 0 Then
yestm = Left(Trim(NextLine),InStr(Trim(NextLine), "、") - 1)
If yestm > 0 And yestm <= 999 Then
tmnum(itypenum) = tmnum(itypenum) + 1
yestm = 0
End If
End If
Loop
itypenum = itypenum + 1
End If
Loop
3.试题抽取
试卷库的构成比较复杂。首先,试卷库主要由题目类型和各小题组成,小题中又包含有小标题,每小题有可能包含多行文字,也可能包含有空行。如何区分每小题的读取完整并过滤掉有可能出现的空行,是本系统的难点和关键点。为此,完整读取选取的每小题并过滤掉空行的核心代码为:
Do While Not EOF(1)
On Error Resume Next
Line Input #1, NextLine
readh = readh + 1
If readh = btwz Then
If NextLine <> "" Then
Lines = ""
Lines = Lines & NextLine & Chr(13)
Do While Not EOF(1)
Line Input #1, NextLine
wq = 0
wq = Left(Trim(NextLine),InStr(Trim(NextLine), "、") - 1)
If wq = 0 Then
wb = Left(Trim(NextLine),InStr(Trim(NextLine), "、") - 1)
If wb <> "一" And wb <> "二" And
wb <> "三" And wb <> "四" And
wb <> "五" And wb <> "六" And
wb <> "七" And wb <> "八" And
wb <> "九" And wb <> "十" Then
Lines = Lines & NextLine & Chr(13)
End If
Else
Exit Do
End If
Loop
readh = 0
Close #1
Exit Function
LOOP
4.试卷组卷
主要是把试题抽取中的变量值写入WORD文档,从而生成完整的试卷,具体实现为:
Open txtdestination For Output As #1
Print #1, lines2
Close #1
Txtdestination为试卷的保存路径。
文本型试卷随机组卷系统的研究成功,解决了高校广大教师试卷库组卷的难题,简便易用的操作,使每位教师都能方便利用该系统进行随机组卷,从而能更全面、更客观地含量学生所掌握的知识。
[1] 王雍均.试题库系统智能组卷技术的研究[J].长江大学学报(自然版),2006,34(3):56~58.
[2] 尹柯,甘志华.随机选题算法的设计与实现[J].河南大学学报,2004,34(1):91-93.
[3] 郭继虎,李国宏,张金桐.利用VB6.0开发化学试卷生成器[J].计算机与应用化学,2003,3:374-376.
[4] 王宇颖,侯爽,郭茂祖.题库系统试卷自动生成算法研究[J].哈尔滨工业大学学报,2003.35(3):342-346.
[5] 惠晓实,王凯航.一种基于Web技术的网络数据库系统设计[J].计算机应用与研究,2000,17:84-97.
G647
A
1008-1151(2011)05-0052-02
2011-02-28
计算机应用与软件新技术
翁健高(1971-),男,广西贵港人,广西大学计算机与电子信息学院网络中心实验师,研究方向为Windows操作系统控制。