APP下载

基于COM技术的试题库系统试卷生成技术研究

2013-07-13

赤峰学院学报·自然科学版 2013年16期
关键词:试题库控件应用程序

舒 涛

(四川民族学院网络信息中心,四川康定626001)

基于COM技术的试题库系统试卷生成技术研究

舒 涛

(四川民族学院网络信息中心,四川康定626001)

文章首先对当前试题库系统在试题录入、试卷生成时无法包含公式等对象的问题进行了分析,然后提出了采用COM技术将Word与试题库系统进行溶合实现含有公式等对象的试题的录入、显示、编辑及试卷的自动生成,并给出了实现过程和关键代码.

试题库系统;试卷生成;COM;Delphi

1 引言

随着计算机技术和网络技术的发展,逐渐出现了大量试题库管理系统.试题库管理系统的出现对于实现教考分离、提升考务管理水平、提高教学质量、减少人为因素对试卷质量的影响,体现考试的公平、客观有着非常重要的意义.

实现含有图、文、表、公式等混合内容的试题存储和试卷及标准答案的自动生成已经是试题库系统必须具备的功能.目前,许多试题库管理系统是通过将每道试题先输出到一个类似于Delphi中的TRichEdit组件这种能够存放RTF格式的对象中,然后打开一个采用Microsoft Word制作的用于输出试卷或答案的模板,在试卷生成程序中使用复制和粘贴操作将存放的RTF格式的本文输入到Word文档中,从而实现试卷或答案的生成.由于RTF格式本身较简单无法存储复杂的表、公式等内容,采用这种方法产生的试卷或答案也就无法包含复杂的表、公式等内容,使试题库管理系统的实用性大打折扣,同时这种方法还存在操作麻烦,自动性差的缺点.

Microsoft Word作为一款优秀的文字处理软件使用非常广泛,是各位教师和考务工作者最熟悉的软件之一.Word对文字、图、表、各类符号、图片,公式等试题基本内容的编辑和输出均能够很好的支持.因此采用Word文档存储和输出试题及答案是非常实用的方法.而在程序中要实现Word文档的存储、编辑、读取、显示没有纯文本类型数据方便,本文针对利用Word文档存储试题信息要解决的主要问题进行了深入的探讨,并给出具体的解决方法.

2 开发技术

2.1 COM技术[1]

COM(Component Object Model,组件对象模型)是由微软公司开发的一种分布式技术.它是基于Windows的、语言独立的、以组件为发布单元的对象模型,用于运行于Windows下的各个软件以一种统一的方式进行交互.COM技术以组件之间、应用程序之间、客户端和服务器之间通过明确定义的接口进行通信提供了统一的标准,也为组件程序提供了一个面向对象的活动环境.它具有语言无关性、面向对象、进程透明性、可重用性等特点.且随着COM技术的不断发展,以基本COM服务为基础,又逐渐形成了包括所谓自动技术、ActiveX控件技术以及活动文档和活动目录等在内的新的COM扩展.

一个典型的COM应用由COM服务器和COM客户端这两个基本构建块组成,二者之间通过COM接口进行沟通.COM服务器是一个执行专门任务的组件软件,它通过COM接口发布自己所提供的服务,而COM客户端则是通过COM接口使用和控制COM服务器的软件.COM应用的基本架构如图1所示.

图1 COM应用基本架构

2.2 应用程序连接Word的方式

在Delphi环境中可采用以下三种方式实现应用程序与Word的连接:

(1)通过OleContainer控件将Word嵌入.该方式能够直接调用Word文档,在调用时使用ole-Container控件的Run方法即可启动Word文档.该方式启动的Word文档与调用它的应用程序可以统一在一个界面上,但采用这种方式不能通过Delphi控制Word文档,无法灵活地控制Word.

(2)通过Delphi中自带的Servers控件调用Word.该方式实质是将Word当作一个COM应用服务器来进行处理.使用该方式操作Word,能够较好的实现对Word的控制,但是还有一些如Word中的VBA无法在Delphi中调用,且这种方式启动的Word与Delphi程序分属两个窗体,需要进行特别处理.

(3)通过OLE方式对Word进行控制.该方式是使用CreateOleObject方法启动Word.这种方式能够做到完全控制Word,能够使用Word的所有属性.该方法启动的Word与应用程序也分属两个窗体.缺点是Delphi无法捕获Ole对象的异常,对异常的处理需要自行处理,编程较复杂.

2.3 Delphi中的Word组件[2]

Delphi是Borland公司推出的一款RAD(Rapid Application Development,快速应用开发工具),在其中提供了大量的向导、类、接口、组件,为程序开发人员在应用程序中使用基于COM的类和组件提供了方便.在Delphi中有专门针对Word软件的COM服务器,有关Word操作的组件有5个,介绍如下:

(1)WordDocument组件:用于Word文档的创建、连接、断开、存盘、文本插入、语法和拼写检查、字符查找、打印等功能.

(2)WordApplication组件:用于在应用程序中启动和关闭Word并建立和断开Word文档的连接.

(3)WordFont组件:用于Word文档中的字号、字体的设置.

(4)WordParagraphFormat组件:用于Word文档的段落格式的设置.

(5)WordLetterContent组件:用于调用由信函向导创建的信函的元素.

通过上述5个组件,在Delphi中可以很方便实现对Word的操作,最终实现试题库管理系统与Word的溶合.

3 关键功能实现

3.2 试题添加与存储

在添加试题时,将通过Delphi的Server组件连接并启动Word,然后自动创建一个空白文档,空白文档创建完成后,教师就可以在这个文档内输入试题内容了.关键代码如下:

TKWord.Documents.Add(EmptyParam,False, wdNewBlankDocument,True);//创建一空白文档,并使Word窗口可见

TKWord.ConnectTo(TKWord.Documents.Item(ItemIndex));

TKWord.Options.CheckSpellingAs You Type:= False;//关闭拼音查找

TKWord.Options.CheckGrammarAsYouType:= False;//关闭语法检查

试题录入完成后需要保存到数据库中,由于试题内容是保存为Word文档,必须采用二进制类型的字段进行存储.具体方法是先创建该试题文档的文件流,再利用TBlobField类的LoadFromStream方法将试题文档保存到“内容”字段中,关键代码如下:

fs:=TFileStream.Create(STFilename,fmOpen-Read);/创建文件流,STFilename为试题文件名

fs.Position:=0;

TBlobField(ST.FiledByName(‘内容’)).Load-FromStream(fs);//将试题文件保存到“内容”字段中

fs.free;

3.3 试题读取与编辑

由于试题是以Word文档的形式存储在数据库中的,读取和编辑均需在Word应用程序进行,但在试题库管理中对试题进行维护时,除要编辑试题内容外,还要对试题的题型、分值、知识点、难易度等信息进行设置,这就要求在同一窗口中能够显示、编辑试题内容和相关信息.而采用Delphi的Server组件操作Word的一个缺点就是应用程序和Word窗口不能溶合,可采用Delphi的TOleContainer控件将Word文档嵌入到Delphi Form中来实现应用程序和Word窗口的溶合.这里为每条试题记录中的存储文档数据的字段创建一个对应的TOleContainer控件,而对其他类型的字段使用相对应控件显示即可.在编辑试题信息时,先创建一个临时Word文档,再使用TBlobField类的Save-ToStream方法,将试题内容以写入到该文档中,最后用TOleContainer类的CreateLinkToFile方法链接该文档,关键代码如下:

STFileStream:=TFileStream.Create(‘temp_st.doc’,fmCreate);

TBlobField(ST.FieldByName(‘内容’)).Save-ToStream(STFileStream);//将试题内容字段保存到文件流

STFileStream.Free;

OleCconn1.CreateLinkToFile(‘temp_st.doc’, false);//在OleCconn1中显示试题内容

编辑完成后,使用3.2节代码即可将修改后的试题保存到数据库中.

3.4 生成试卷

试题库管理系统均具有智能组卷功能,通过组卷算法一般只抽取试题的题号,要将这些题号对应的试题内容放入到试卷文档中才能形成试卷.对于试题内容以Word文档形式存储的试题库管理系统来说,生成试卷的基本流程是:先打开试卷模板,并根据实际情况设置页眉和页脚信息,然后根据抽取的题型及题号将试题一一插入到试卷中就生成了试卷.

3.4.1 打开试卷模板文件

通常一个学校的试卷均会采用统一的样式,因此在生成试卷时应先打开该模板.打开试卷模板的关键代码如下:

TKWord.Documents.Open(SJFileName,Flase, Flase,,,Flase,,wdOpenFormatAuto,,True);

TKWord.ConnectTo(TKWord.Documents.Item(itemindex));

3.4.2 生成页眉和页脚

在试卷模板中有一些如考试科目、出题人、出题时间、页号等变化的内容,只能通过页眉和页脚的方法来完成,关键代码如下:

TKWord.Sections.Item(1).Headers.Item(1).Range. Text:=’《计算机文化基础》试卷’;//设置页眉

TKWord.Sections(1).Footers(wdHeaderFooterPrimary).PageNumbers.StartingNumber:=1//设置页脚为页码

3.4.3 插入试题

在试卷模板中插入试题是自动生成试卷最核心的步骤,也是实现最为复杂的一步,其基本思路是:先将由抽题算法抽取的试题放入试卷表中,然后将记录中的试题内容读入到一个临时Word文档中,最后从该临时文档中将试题内容读入到试卷模板的指定位置,同时还将进行题号等试卷元素的生成.由于实现该功能的代码较长,这里采用伪Object Pascal语言对实现算法进行描述如下:

Begin

统计试卷中的试题类型;

For(试题类型数量)do

Begin

将含有题号、题型、总分值、单项分值、答题说明等内容的题型信息插入到试卷中;

通过SQL语句读取试卷表中的该类型的全部试题;

While(记录指针没有移动到末尾)do

Begin

将小题号(与记录号相同)输出到试卷中,;

将记录指针指向的试题的内容输出到试卷中;

移动记录指针读取下一条记录;

End

End

End

4 结束语

由于试题库管理系统对于推进教考分离、提高教学质量的有着积极和作用,各级、各类教育机构对试题库管理系统的建设越来越重视,而一个好的试题库管理系统必须要能够对多学科试题和试卷进行管理.本文提出了采用COM技术在应用程序中控制Word实现试题的录入、保存和试卷的自动输出,这样就可以利用Word强大的编辑排版功能制作各种复杂的试卷.在具体实现上,文中虽然采用的是Delphi进行实现,但COM是一种与开发工具无关的技术,这些思路和方法也同样适用于其它开发工具.

〔1〕Mark E.Russinovich,David A.Solomon,Alex Ionescu.深入解析Windows操作系统(第5版).北京:人民邮电出版社,2009.

〔2〕牛汉民.Delphi7高级应用开发教程[M].北京:科学出版社,2005.

〔3〕王文发,张根耀,王文东.应用Delphi与Word溶合技术实现试题库试卷的自动生成[J].延安大学学报(自然科学版),2006(1):21-23.

〔4〕陈丽燕,祝建中.基于Word文档的试题库系统的实现[J].信息技术,2005(9):143-145.

〔5〕夏龄,周德荣,舒涛.一种网络通用题库系统的设计与实现[J].赤峰学院学报(自然科学版),2011 (2):58-60.

TP311.5

A

1673-260X(2013)08-0014-03

四川省教育厅一般项目资助(12ZB086)

猜你喜欢

试题库控件应用程序
石油炼制技术课程试题库建设的探讨
删除Win10中自带的应用程序
职业院校旅游专业试题库建设的实践与反思
——以导游资格笔试科目为例
谷歌禁止加密货币应用程序
关于.net控件数组的探讨
高校试题库建设新探讨
项目反应理论在考试系统试题库中的应用
ASP.NET服务器端验证控件的使用
基于嵌入式MINIGUI控件子类化技术的深入研究与应用
三星电子将开设应用程序下载商店