基于试题库的试卷管理和自动排版系统的设计和实现

时间:2022-09-01 07:30:54

基于试题库的试卷管理和自动排版系统的设计和实现

【摘 要】在当前的校本建设和教学教研中,考试管理一直都是一项压力巨大的工作。每学期各种考试,从组织出卷到试卷的印制及试卷的管理等工作都非常繁琐,这种组织管理方式不仅工作任务繁重而且试卷的标准化程度、难易程度、题量大小等各方面难以控制,难以形成有效的资源积累,给试题和试卷的管理带来很多问题和困难。鉴于这种情况,利用计算机进行试卷的自动生成并逐步积累形成有效的试题库,对试题和试卷的管理将变的高效而便捷,对提高工作效率,使试卷管理逐步走向正规化自动化将起到十分重要的作用。

【关键词】试题库;自动排版;引擎

一、实现目标

尽力适配各学科各阶段的各种题型,极力减少限制。

广大普通教师在不经过或只经过极少量培训的情况,能够便捷的往系统数据库里录入试题。

能够依据较高颗粒度的设置自动生成规范的、直接可用的试卷和对应答案,甚至可以导出试题答题分离卷,自动产生机读卡等。

二、技术难点说明

目前此系统难以实现的主要原因是没有一个针对试卷的排版引擎,商业的排版软件或者不够开放,或者限制太多无法适用。因为在试卷排版中要不断的检查各个块区所占的空间,微调各个间隔以使试题适应整个页面,而现有的排版引擎基本无法做到。经过分析总结,尽管难度极大,我认为自己重写一个专门针对试卷的排版引擎对此系统来说是必要的。

另一个难点是数学公式的处理,情况和排版引擎类似,商业公式软件限制太多,无法取用;js版的公式编辑器浏览器要求太高、不够美观、限制较多;开放的Tex系统太庞大繁杂,因为公式编辑直接面向广大普通教师,Tex的部署和学习成本都没有可行性,所以也得自己写一个公式系统。

三、系统分块

1.整体设计和数据模型

管理单位给有资格录入试题的人员提供账户设置账户的权限(学科、学段等)录入人员进入系统录入试题(等待审核)管理单位专设审核人员对新录入未审核的试题进行审核(审核通过)试题正式入库。

此系统的数据模型较简单:

人员:用户名、密码、权限类型(录入人员或审核人员)、学科、学段。

试题:人员(连接到人员)、教材版本、年级、学期、学期阶段(一般分为4个月)、难度等级、学科、题干、图片路径。

试题模式:试题(连接到试题)、题型、答案试题和试题模式为一对多的关系,这样的设计可以提供单一题干有多种题型的功能,而且避免了一张试卷内抽到了不同题型的同一问题的可能性。

2.试题录入模块

考虑到广大普通教师的计算机水平,能做到无部署直接使用是最好的效果,所以技术平台选择html+js。

录入人员打开浏览器进入系统后可以看到自己的试题以及审核状态,还可以删除或编辑试题等。

新建试题时,需要选择教材版本、选择年级、选择学期、选择学期阶段、选择难度等级,选择题型,在题干里输入试题,图片上传是可选的。

这里的设计为:题干区域输入的信息里包含各种题型的特殊的替换符(公式表达式也为替换符),在编辑停止3秒后,页面会在下面提供和题型对应的正式的试题预览,保存后,这个试题就有了题干和一个默认的试题模式。

3.试题审核模块

此模块技术难度较低,依然是选择html+js。

审核人员可以在这里进行对应学科的试题审核,决定试题是否进入试题库,也可以修改试题的难度等级。

4.试卷生成程序

此模块功能集中复杂,要求较高,所以选择.net平台,使用wpf技术实现。

进入此程序,选择新建一张试卷,选择年级、学科、版本、学期、学期阶段,难度系数,单面\双面,填写考试名称,总分,点击下一步。

下面可以详细设定各种题型所占比例,分数,点击下一步。

程序开始根据设置从试题库中随机抽取符合条件的试题,调用排版引擎进行排版,最后输出试卷。

四、排版引擎和公式系统的实现

1.排版引擎

此排版引擎的核心工作在于测算各级模块所占的空间,估算撑满考卷需要的调整。

以下间隔都有默认值和最小值,最小值是在不影响版面美观的前提下可以调整的极限。

字符级:字符,字符右有间隔;

行级:包含字符级,行下有间隔;行首有标点符号会进行特殊处理;

段级:包含行级,段下有间隔;如果最后一个行只多出2个字符,上面还有足够的完整行,则紧缩上面行的字符级间隔,把这2个字符提上去,省下一行。

块级:包含段级,图片等,一个块装下一道试题,不包含试题留白,块无间隔;块级需要做很多特殊的处理,比如说检测本道题图片较小,块级处理就会把段级宽度缩小,让图片和文字并列摆放;如果题目较短又需要留白(如计算题),就把多个块级横着并排摆放,等。

引擎接收到试题数据开始按默认间隔开始排版:

(1)单页设置

如果是语文或英语学科,直接把剩下空白绘制作文纸,然后再加一页作文纸。

如果是其他学科,最后一页内容少于半页,则逐级紧缩间隔:

*先计算段级间隔和行级间隔之和,除最后半页的高度,获得一个比例值,段级和行级按这个比例值进行紧缩,如果段级或行级的间隔值小于了自身的最小值,则认定不可紧缩处理,直接放大段级间隔撑满最后一页。

如果最后一页内容多于半页,直接做撑满处理。

(2)双页

如果是语文或英语学科,结果是奇数页的,按*做紧缩处理,尽量多绘制一部分作文纸,后面再添加一张作文纸,凑够偶数页。

如果是其他学科,结果是奇数页的,按*做紧缩处理,如果紧缩处理失败,再把段级和行级间隔直接缩到最小值,计算出差,再牺牲一部分问答题或计算题等大留白的试题的留白,把最后一页挤到前面页;偶数页的则接放大段级间隔撑满最后一页。

公式编辑器的难点在于表达式分析和公式图形的绘制,对这两点我采取的是使用Tex的语法和样式标准。但Tex的语法复杂,不易学习,分析器也不易实现,目前我只用正则表达式实现了初中阶段内简单公式的表达式分析,效率很低。我正在考虑重新设计一种较简单、易于学习的表达式语法,以方便实现和广大教师学习使用。

五、小结

虽然目前系统还在试做阶段,但在实现过程中已经获取了足够的经验和心得,几大技术难点已获得了突破,架构上也已基本稳定,以后只需逐步完善功能、排错、提高通用性和扩展性。相信此系统完善之时,必定能为各个教育机构的校本建设和教学教研提供很多便宜。

【参考文献】

[1]C#、WinForm、WPF、.net (http://)

[2]html/css、JavaScript、jQuery(http://.cn)

[3]Tex(http://)

上一篇:从苏宁电器到苏宁云商:路径、动因与绩效 下一篇:基于实物期权理论的供应链风险管理方法研究