• 读者文摘
  • 美文摘抄
  • 短文摘抄
  • 日记大全
  • 散文精选
  • 感恩亲情
  • 人生感悟
  • 智慧人生
  • 感悟爱情
  • 心灵鸡汤
  • 实用文档
  • 名人名言
  • 伤感文章
  • 当前位置: 蜗牛文摘网 > 伤感文章 > 基于VBA技术自动生成通用图文试题库

    基于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技术。使得编题、抽题、生成试卷一直到最后的试卷排版一体化。

    相关热词搜索:自动生成试题库通用图文技术

    • 名人名言
    • 伤感文章
    • 短文摘抄
    • 散文
    • 亲情
    • 感悟
    • 心灵鸡汤