摘 要 本文以笔者开发的小型试题库管理系统为原型,详细介绍了利用C++ Bulider开发小型试题库管理系统涉及的若干关键技术,包括试题库总体功能设计、随机出题规则、随机组卷算法、试卷生成采用的OLE技术等,并对系统中的技术难点进行了分析。
关键字 试题库;随机组卷;OLE;C++Builder6.0
1 引言
随着高等教育教学改革深入和课程建设的逐步完善,高等院校对学生课程考试逐步向着规范化、系统化、科学化、现代化的方向发展,教学管理也向着现代化、规范化的方向迈进。为了逐步实现教考分离,更好地组织和管理考试的各项工作,客观地评价学生对所学知识的理解和运用能力,提高教学质量,在重点课程建设任务中,我们采用C++Builder 6.0完成了一个面向不同课程、功能实用的通用小型试题库管理系统。其作用及优势表现在以下几个方面:
(1)教考分离,试卷规范性更强。
(2)提高效率,减轻教师负担。
(3)面向考试对象,灵活性更好;其随机组卷功能可根据设置的规则,在把握大纲的同时,根据考试对象适当调整试卷内容。
2 试题库管理系统的功能框架
本试题库管理系统主要由试题库维护、试卷管理、随机出题规则设置、随机组卷及试卷生成、系统设置等五个功能模块组成,如图1所示。
图1 通用试题库管理系统功能框架
(1) 试题库维护。利用Access设计后台试题库,存储六类题型的试题(填空题、选择题、判断题、名词解释、简答题、解答题)。利用C++Builder开发前台试题库维护模块,包括试题的增加、修改、删除、浏览等基本功能,要求能实现试题插图的管理与维护功能。
(2) 试卷管理。利用Access设计后台试卷库,存储以往试卷的Word文件,利用C++Builder开发前台试卷库维护模块,包括试卷的增加、删除、浏览等基本功能。
(3) 随机出题规则设置。根据用户需求实现随机出题规则设置功能,设置的内容包括试题总分、考试内容的章节、不同题型题量、不同难易系数等。
(4) 随机组卷与试卷生成。按照用户设置的随机出题规则,通过随机组卷算法从试题库中抽取相应试题生成符合要求的试卷,并通过OLE(对象链接与嵌入)技术将依规则随机抽取的试题生成Word文件格式的试卷,其难点在于随机组卷算法和OLE中的图像、文本插入技术。
(5) 系统设置。为使试题库系统适应性更广,系统通过配置文件的方式动态加载系统的标题和背景图片。同时,系统还支持不同用户权限,只有管理员用户权限可以更改系统设置,其余人员只能使用试题库功能,而不能修改系统设置。
3 随机出题规则与随机组卷算法
3.1 随机出题规则
考虑到试题库应提供给用户多种考试功能,包括对指定章节的测试、对特定题型的测试或是对试卷分值、难易程度的指定,因此设计的随机出题规则包括以下内容:
(1) 试题总分设置:包括100、90、80、70、60五种总分。
(2) 考试章节设置:可针对单一章节或选定的几章进行测试。
(3) 题型、题量设置:设置考试题型、题量,总分应与设置的总分一致。
(4) 难易程度设置:设置试卷的难易程度,包括较易、中等、较难三级。
(5) A、B卷设置:可以选择生成一套试卷或同时生成两套试卷。
用户根据考试对象和考试要求对以上规则进行相应的设置,并以此指导随机组卷算法,生成符合要求的试卷。
3.2 随机组卷算法
为了实现从试题库中随机生成考试试卷,需建立两个试题表分别存储A试卷、B试卷对应的试题。我们设计的随机组卷算法如图2所示。
图2 随机组卷算法流程图
4 CB中利用Ole服务器生成Word试卷
仅仅将考试所需试卷内容抽取到试卷表中是不够的,还必须将试卷表中的试题输出到Word文件中,才能完成后续的打印、复印等工作。因此如何将试卷表中的试题输出到Word文件中是一个必须解决的问题,特别是当试题中既有文字也有试题插图时,这个问题就更加复杂化了。为解决该问题,我们采用了OLE技术,OLE技术是微软提出的一种软件产品规范,是应用程序间交换数据、相互操作的标准。OLE技术的实质是通过编程来控制其它的应用程序或者DLL(动态链接库)中的对象。采用这一技术的应用程序不仅能使用驻留在自己程序中的对象,而且能使用驻留在系统里其它程序中的对象,并能够访问这些对象的属性和方法。在CB中使用OLE技术嵌入并控制Word是扩充系统文字处理功能最简洁、高效的途径,其关键步骤
(1) 创建OLE对象。
Variant VwordApp,VwordBasic;
VwordApp = CreateOleObject("Word.Application"); // 创建Word应用程序对象
VwordBasic = CreateOleObject("Word.Basic"); // 创建Word VBScript对象
(2) 新建Word文档并创建操作图形的Shape对象。
Variant Vshape;
VwordBasic.Exec(Procedure("FileNew")"Normal"); // 用模板新建Word文档
Vshape = VwordApp.OlePropertyGet("ActiveDocument"). OlePropertyGet("Shapes");
(3) 将试题内容与试题插图写入Word文档中,以试题表中一条记录为例。
AnsiString SaveImage = GetCurrentDir()+"““image.bmp"; // 暂存图像路径及文件名
AnsiString Stnr = ADOQueryA-FieldByName("stnr")-AsString; // 取试题内容
VwordBasic.Exec(Procedure("Insert") Stnr); // 向Word文档中写试题内容
blob=(TBlobField *)ADOQueryB-FieldByName("image"); // 取试题插图
if(!blob-IsNull) // 判断该试题是否有插图
{
blob-SaveToFile(SaveImage.c_str()); // 暂存为图像文件
Vshape.OleFunction("AddPicture",SaveImage.c_str()); //将图像插入Word文档
}
(4) 保存试卷。
AnsiString SaveFile = GetCurrentDir()+"““Test_A.doc";
// 试卷路径及文件名
VwordBasic.Exec(Procedure("FileSaveAs") SaveFile); // 保存试卷
5 结束语
本试题库系统的程序开发已基本完成,正处于试用阶段,该系统除具备试题库管理、随机组卷及试卷生成等基本功能外,还实现了历史试卷的管理和系统设置功能,希望本系统的设计与实现能为开发类似试题库系统的人员在一定程度上起到借鉴作用。
参考文献
[1] 邓又明,刘庆红,董光. 试题库管理系统的分析与设计[J]. 现代情报,2005年第4期,157-158
任治斌,耿国华,张富春等. 在VFP下高等代数试题库的设计与实现[J]. 微计算机应用,第26卷第5期,2005年9月,638-640
刘光. C++Builder数据库系统设计与开发[M],清华大学出版社,2003.8
陈周造,陈灿煌. 精通C++Builder 5程序设计高级教程[M]. 中国青年出版社,2001.2
相关文章
学术参考网 · 手机版
https://m.lw881.com/