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