基于VBA技术自动生成通用图文试题库
时间:2020-04-27 05:25:58 来源:千叶帆 本文已影响人
[摘要]提出了在word程序中利用Office的编程语言VBA,实现题库生成及试卷生成。编写程序的步骤:1建立题库;2统计题量;3抽取试卷;4生成试卷及答案。
[关键词]vBA:Word;试题库
1 引言
面向对象的VBA技术是对office进行二次开发的有效途径,利用VBA在Word环境中实现试卷的自动生成。其操作简单、易扩展,对文字和图形处理很方便。目前,各类考试卷的试题已基本都是从试题库中抽取,因此一个合理的、便于用户使用的试题库系统越来越受欢迎。目前已有许多试题库系统,基本采用的是Visual Basic、Visual c++等语言环境,而这些系统在设计过程中很难对文字图形排版,不便于用户对试题进行编辑。
本文主要介绍一个完全基于Word的通用图文试题库的实现方法。具有图、文、表混排,随机抽题,自动组卷,编辑打印、题库维护、数据统计等功能。主要技术包括:试题库的组织、多媒体试题和答案管理、试题参数的设定和使用,试题分布表的设计和使用,Word表格和单元格处理,随机抽取试题,任意更换试题的实现、Word文档内容的选定等。
2 试题库系统的实现
2.1系统功能
用户可以对试题进行修改、添加和删除,最后在试题库系统选题随机生成试卷。
2.2功能实现
2.2.1添加试题
1)打开“题库.doc”文档。在文档最前面设置题库的标题,输入题型和内容说明信息:
2)按相应格式依次输入每一道试题和答案:
2.2.2统计各章、各题型、各难度题数
1>打开“分布表doc”文档:
2>点击“题库统计”按钮,统计各章、各题型、各难度题数,然后做汇总;
2.2.3填写抽取信息
1>在“分布表.doc”文档中,填写抽取题目信息:
2>点击“抽取试卷”按钮,抽取题目:
2.2.4生成试卷及答案
1>在“分布表doc”文档中,根据前面抽取信息在“试卷.doc”文档中,生成试卷;
2>点击“查看原题”按钮,可以在题库中定位到试题库相应题目;
3>点击“更换试题”按钮,可以在同题型、同章节、同难度中替换试题:
4>点击“删除参数”按钮,可以将试题前的参数删除:
2.3详细设计过程
2.3.1题库设计
1)试题格式:为了区分不同章节、不同难度、不同题型
2)题标涂色:用于区分题目及答案。因为题目与答案的书写格式基本相同,不容易区分和检查,所以用涂色方法加以区分。
3)查找同题:用于查找相同试题,减少重题率。本例中采用的查找方法是,根据选中立字进行完全匹配查找。
相关代码:
Sub czttO
tt=selection text
with selection,find
text=tt
wrap=wdfindcontinue
execute
End with
End sub
2.3.2“分布表”设计
1)表格设计
由于表格中单元格较多,空间紧密,如果显示段落标记,界面会显得很乱,为此,在打开“分布表”文档时取消段落标记的显示,代码如下:
Private sub document Openo
Activewindow.activepane view showparagrapbs=false
End sub
2)题库信息统计
第一步:将试题参数送数组或变量。首先对对有关数组进行初始化,激活“题库”文档。关闭屏幕更新,关闭智能标记操作按钮。代码如下:
Erase ts,xts,xns,zfs,txf
windows(“题库”)activate
第二步:对“题库”文档,用循环语句从头到尾查找每道题的题标,取出相应的参数进行处理,直至遇到结束标记“####”为止。对于每一道题,从参数中取出章号、题型、难度值,并以此为下标,用三维数组累加题数。比如:某一题的章号为2、题型为“A”、难度为3,则向数组元素ts(2,1,3)加1。由此可知,数组最终保存各章、各题型、各难度试题的总量。
第三步:填写表格中行号为3、5、7、……37的“题库”统计信息。
第四步:填写表格中行号为39、40的题数、分数一级整个题库的总题数、总分数。
2.3.3 组卷信息统计
统计组卷时要抽取的各种题型、各级难度的总题数和总分数,统计要抽取的各章总题数和总分数。采用的方法也是将统计结果存放到变量或数组中,然后将变量或数组的内容添加到相应的单元格中。
第一步:将各题型分数送数组、6种题型的分数用数组的6个元素表示,即下标1、2、3、4、5、6分别表示A、B、c、D、E、F题型的分数。
第二步:填写各行抽取的总题数和总分数。用双重循环分别取出4、6、8、……、38行的4列~21列单元格内容,当前行的题数累加到变量s_hts中,总题数累加到变量zj中,各章题数累加到数组zts中,各章分数累加到数组zfs中,然后将各章题数添加到每行的第22列,各章分数添加到每行的23列,总分数量加到变量n_zfs中。
第三步:填写各章抽取的总题数和总分数。可根据数zts和zfs的统计数据,填写表格41行和42行的4列~21列即可。
第四步:填写全部抽取的总题数和总分数。总题数为变量zi的累加值,总分数为变量n_zfs累加值。
2.3.4 生成试卷
根据“试题分布表”记录的题库中各章、各题型、各难度的试题数量和计划抽取的试题数量,生成试卷。
第一步:将题库中各章、各题型、各难度的题数送数组ts,要提取的题数送数组qts。
用三重循环程序。从“试题分布表”中指定单元格的内容送给数组元素。例如:第1章、第1中题型、1级难度的试题数量在表格中的3行、4列单元格中,送给数组元素ts(1,1,1)。根据章数、题型、难度值与数组元素下标关系,可推得:第zh章、第tx种题型、nd级难度的试题数量应在表格的(tx-1)*6+2*nd+1)行、(zh+3)列单元格中。数值保存在数组ts(zh、tx、nd)中。
第二步:将各题型名、分数,要提取的各题型总题数、总分数送给数组txm、txf、txzs、txzf在填写各数组元素时应找出数组下标与单元格的对应关系。
第三步:从“题库”中取出标题,用于程序在“试卷”和“答案”中添加标题。
第四步:生成试卷和答案。
用循环语句,对每一种题型进行检查。如果要抽取的试题总数大于零,则建立试卷的题号和题标、建立答案的题号和题标。题号按“一二三四五六”的顺序依次抽取。题标从数组txm中得到题型名,从数组tzf中得到该题型每题的分数,从数组txzf中得到试卷中该题型的总分。对当前题型,按章号、难度顺序进行组卷。变量ts保存题库中同题型、同章号、同难度的试题数。变量qts保存要抽取的同章号、同题型、同难度的试题数。当要抽取的试题数量大于零时。则调用子程序。产生1~ts之间的qts个互不相同的随机整数给全局数组txh,并调用子程序将满足条件的题和答案分别添加到试卷和答案文档中。
产生随机数程序如下:
Sub sjs(ts_n,qts_n)
Randomize Timer
随机数种子
k=1
Do while k<=qts_n
x=Int(Rnd*ts_n)+1
of=0
重复标志
Form=1 To k-1
If txh(m)=xThen cf=1 有重复,放弃
Next
If of=0 Then
不重复,有效
txh(k)=x;k=k+1
End If
Loop
End Sub
2.3.5 试卷编排
1>“查看原题”。形成初稿后,参数仍旧保留在试卷文档中。目的:一是如果认为某题不合适。可以更换相同参数的其他试题;二是如果发现试题内容有错误,可以迅速定位到“题库”文档中的指定的试题进行修改。
2>“更换试题”。用“题库”中相同参数的其他试题替换“试卷”文档的当前试题,同时替换“答案”文档对应试题的答案。
3>“删除参数”。去除“试卷”和“答案”文档中每题前的参数
3 结论
VBA是一种专门用于OFFICE的应用程序。通过使用VBA程序,用户可以更加方便的操作文档中的文本,而且可以使这些操作自动化、通用化、交互化。后续还可以在此基础之上,改进对试卷排版的功能,利用VBA技术。使得编题、抽题、生成试卷一直到最后的试卷排版一体化。
相关热词搜索:自动生成,试题库,通用,图文,技术,