论文部分内容阅读
在试题库管理系统的设计和研发中,往往需要同时处理文本和非文本两种类型的试题内容。除了文字和常用的字符外,还包括复杂的数学公式、化学方程式、特殊符号、电路图、工程制图等,而且很多学科的试题要求图文混排。与纯文本信息相比,这种图文混合信息的录入、编排以及输出在实现上都具有一定的难度,很难达到理想的效果。笔者对目前题库系统中采用的各种策略进行了分析,剖析了其中存在的问题,并提出一种改进的解决方案:利用DSOFramer容器控件,借助Word强大的编辑功能,用表格规范试题排版,以系统剪贴板为桥梁,采用流编码保存入库的方法,实现了图文混合试题的方便录入、编辑、保存入库及标准化排版。实践证明,该方案操作简便、界面友好、存储安全、适应面广,有效地改善了用户体验。
一、题库系统的现状分析
目前的题库管理系统主要有两种:一种是基于Web在线考试的题库管理,另一种是基于Windows的用于考教分离的出卷系统。而现有的开发工具对于在Web页面或Winform窗口中非文本信息的录入和编辑的支持度都十分有限,因此市场上出现了很多应用于这两种环境下的第三方编辑器。笔者对其进行了广泛调研,发现效果大多并不理想。
1.Web题库系统中常用的免费在线编辑器(如FreeTextBox或CuteEditor控件),其数学公式、化学方程式等是以链接的形式通过引入图形文件实现,教师需要事先将图画好,并保存成图像文件上传至服务器才能实现[1]。这种方式加大了教师出题的工作量,而且无法实现在线编辑。
2.有些收费的编辑器(如eWebEditor)可以实现部分数学公式的录入,但功能较Word而言相对简单,并且教师对其编辑界面不熟悉,往往需要经过长时间的培训才能胜任,而且这样一款编辑器价格不菲。
3.在基于WinForm的题库系统中,利用RichTextBox控件的TextRTF属性可以显示部分由Word编辑的RTF格式的信息[2],如公式等,但该控件不支持对非文本内容的编辑,仅能作为多样化试题的呈现工具。此外,该控件不支持在Word中利用画图工具绘制的图形以及插入的图示,且对于混排的图片基本没有排版功能。
4.部分题库系统在实现时,使用Word软件编辑试卷,再将整个试卷以文件流形式直接存入数据库中,取用时只能整卷利用,不支持单题入库,不能实现试题的重复利用。而少数支持单题入库的系统,大多是采取将每道题的题干、答案等内容和难度、区分度等属性同时存入一个独立文档中,再将文档整体以流格式入库[3]。这样的组织方式增加了独立属性间的耦合程度,不利于信息的获取、汇总、横向对比等功能的实现,而且系统的扩展性和兼容性差。另外,为保存试题内容而附带的大量文件信息是系统资源的额外开销,若应用于大型题库系统则很不经济。
5.还有部分题库采用OLE技术[4],在窗体中嵌入OLE对象,编辑试题时在窗体外部另外打开一个Word程序进行试题的编辑。此策略能够解决图文混排试题的录入,但系统很难对独立运行的Word程序进行控制,频繁的程序切换也会降低系统的执行效率。由于OLE技术的固有缺陷,微软在其新的.NET平台中取消了对OLE容器控件的支持。
二、图文混排试题处理的解决方案
通过以上分析可以发现,目前的第三方(尤其是免费)组件在功能上与Micorsoft Office软件相比确有差距,因此笔者提出的改进方案是利用微软提供的专为Office提供显示框架的控件——DSOFramer作为容器,将Word应用程序嵌入该容器中,借助Word本身提供的公式、图形编辑功能,为用户呈现出简洁、熟悉的操作界面。
1.图文混排试题的录入和编辑
Microsoft开发的DSOFramer控件作为ActiveX 文档容器,用于承载用户窗体或Web页中的Office文档(包括Microsoft Word、 Microsoft Excel、 Microsoft PowerPoint、 Microsoft Project 和 Microsoft Visio 文档)。该控件具有灵活及轻量级的特点, 利用ActiveX控件构建嵌入式文档浏览器和编辑器,解决了在非顶级宿主窗口中使用ActiveX文档难的问题,为程序开发者在自己的解决方案中使用Office提供了新的技术手段[5]。
通过该控件中的ActiveDocument方法可以提取到嵌入其中的Office文档对象,该对象有控制Office显示外观、文档内容等多个属性和方法。将该控件嵌入题库系统的界面如图1所示,图中复杂的数学公式即是用文档右上角的Word公式编辑器即时编辑而不是通过图片引入的。试题的参数通过Windows标准控件录入,试题内容通过DSOFramer控件显示及编辑,在表格单元格内进行排版。编辑该题或抽取该题组卷时,其格式将与此排版严格一致,并且用户直接在文档中录入试题,而不需额外键入试题说明信息。用户通过配置本地Word显示需要的工具栏,系统还可以在后台编写代码,屏蔽掉诸如“新建”等工具按钮。
图1 通用题卡库管理系统中试题录入界面
2.试题的单题入库策略
非文本试题的存储策略是题库系统实现的技术核心。目前许多文献也提出了不同的解决方法,如将试题文本部分和非文本部分分开存储,将试题存储在Word文档中。这种策略操作不便,对图形的限制性强,不能实现图文混排,且存在安全性问题。笔者另辟蹊径,采用内存流技术,将试题内容存储到数据库表中,提高了试题存储的安全性,并保证了目标试卷中的试题与原试题在排版上严格一致。
题库系统提供了试题导入(界面如图1)和批量试题导入(图略)功能模块,以每道题为单位存储在数据库的试题表中。表中除了必要的试题参数字段外,还添加了试题内容和试题答案字段。这两个字段为Image类型,将试题内容转化成二进制比特流后存储其中。具体的算法策略如下。
试题入库策略(如图2所示):
图2 试题的入库过程原理图
(1)在Word中,出题教师只需将试题内容填写到相应的表格中。系统通过DSOFramer控件的ActiveDocument.Tables(i).Cell(j,k).Range.Copy,将对应第i道试题表中第j行k列的试题内容复制到系统剪贴板中。
(2)通过剪贴板的GetData(DataFormats.Rtf)方法,将复制的图元文件转化为RTF格式的字符串表达式(既有文本又有图形及格式信息的字符串),并获得该RTF字符串。之所以借助剪贴板,是由于Word应用程序中Range.Text方法只能获取文档某范围内的字符,对于图形及格式信息不予支持。而系统剪贴板支持以图元文件形式存储信息,并可将其转化为RTF格式字符串,既保留了内容信息又可保留图形及格式信息。故该方案非文本试题的获取和保存是通过“巧”用系统剪贴板实现的。
(3)通过Encoding.UTF8.GetByteCount(strQuestionContent),将该字符串转化为二进制字节流。
(4) 将字节流存入数据库相应的Image字段中。
试题入库的核心源代码如下:
Dim doc As New Word. Document
Dim strQuestionContent As String
doc=DSOFramer1.ActiveDocument
doc.Tables(doc.Tables.Count).Cell(1, 2).Range.Copy()
IfClipboard.GetDataObject.GetDataPresent(DataFormats.Rtf) = True Then
strQuestionContent = Clipboard.GetDataObject.GetData(DataFormats.Rtf)
Length = Encoding.UTF8.GetByteCount(strNeiRong)
Dim binQuestionContent(Length) As Byte
binQuestionContent = Encoding.UTF8.GetBytes(strQuestionContent)
dsQuestion.Tables(0).Rows(rowIndex)("binTestQuestionContent") = binQuestionContent
End If
出库策略是入库策略的逆过程(如图3所示):
图3 试题的出库过程原理图
(1)从数据库试题表中取出相应试题内容字段的比特流。
(2)将比特流通过Encoding.UTF8.GetString(binQuestionContent)转化为RTF字符串。
(3)借助系统剪贴板,通过SetData(Data For mats.Rtf, strQuestionContent)读取该RTF字符串,并转化成图元文件暂存在剪贴板中。
(4)通过ActiveDocument.Tables(i).Cell(j,k).Range.Paste,将该图元文件粘贴到Word文档中第i道试题表中第j行k列的位置。
3.试题的标准化格式输出
题库管理系统生成的试卷要求格式标准规范,由于该解决方案试题使用Word文档录入,并且在录入时就考虑到试题的格式,在成卷时即可实现试卷的标准化输出,并可利用Word自身的打印功能,将试卷打印成纸质试卷。试卷格式完全符合考试要求,可直接用于考试,而无需再人工排版,这也是该策略的另一特点。系统组卷后自动生成的试卷通过无线表格式化,试题直接从数据库中读出,是原题的再现,并且实现了图文混排。
三、该方案的特点和实用性分析
该解决方案解决了目前题库系统中非文本试题在编辑、存储和格式化方面存在的不足,经测试及部分教师试用,一致认为较以往方案有很大突破,实用性强。通过教师反馈的结果,总结该方案的特点如下。
1.通过DSOFramer容器控件,将Word嵌入到用户定制的窗体中。利用Word自身强大的编辑功能进行数学公式、化学方程式、电路图等非文本试题的编辑,实现了图文混排。熟悉的Word编辑界面上手容易,无需培训。嵌入窗体的Word工具栏支持当前编辑,编辑器功能强大,操作简便,而且是免费的。
2.该方案实现了试题的单题入库而不是整卷入库,并将试题参数信息和试题内容作为一行记录存储在数据库试题表中,存取方便快捷,支持统计汇总,容易管理维护,节省系统资源。
3.试题内容是以二进制流的格式存入库中,只能通过本系统采取的试题入库的逆过程才能读取并显示试题内容,有效地保障了试题的安全性。同时可以方便地扩展各类加解密算法。
4.利用Word,试题在录入与输出时,排版格式完全一致。自动生成Word版试卷,并严格规定了试卷的格式,无需二次排版,可直接打印成纸质试卷,用于正规考试。
5.利用表格录入试题,支持试题的批量录入。
针对图文混排的试题内容的编辑和存储这一难点问题,笔者提出了新的解决方案,已成功运用到自学考试通用题卡库管理系统中,并经与天津市教育招生考试院自考命题处商榷,有望在我市自考命题中推广使用。同样,该方案还可扩展到其他正规化考试中以及需要图文混排显示及存储的系统中。
参考文献
[1]范继红.实现图文混排试题系统的设计[J]. 教育信息化, 2006.11: 38~39.
[2]刘作军.图文混排技术在试题库中的应用[J]. 河北理工学院学报, 2006.5, 28(2):76~78.
[3]尹汉明.一种通用题库管理及组卷系统的设计与实现[J].井冈山医专学报,2003.9,10(5): 74~76.
[4]张文, 陈世强. 题库系统试题存取方法的研究[J]. 计算机与现代化, 2006(3): 97~99.
[5]Visual C ActiveX Control for hosting Office documents in Visual Basic or HTML [EB/OL]. http://support.microsoft.com/default.aspx?scid=kb;en-us;311765#appliesto. 2007.7.15.
(作者单位:天津师范大学物理与电子信息学院教育技术系)
一、题库系统的现状分析
目前的题库管理系统主要有两种:一种是基于Web在线考试的题库管理,另一种是基于Windows的用于考教分离的出卷系统。而现有的开发工具对于在Web页面或Winform窗口中非文本信息的录入和编辑的支持度都十分有限,因此市场上出现了很多应用于这两种环境下的第三方编辑器。笔者对其进行了广泛调研,发现效果大多并不理想。
1.Web题库系统中常用的免费在线编辑器(如FreeTextBox或CuteEditor控件),其数学公式、化学方程式等是以链接的形式通过引入图形文件实现,教师需要事先将图画好,并保存成图像文件上传至服务器才能实现[1]。这种方式加大了教师出题的工作量,而且无法实现在线编辑。
2.有些收费的编辑器(如eWebEditor)可以实现部分数学公式的录入,但功能较Word而言相对简单,并且教师对其编辑界面不熟悉,往往需要经过长时间的培训才能胜任,而且这样一款编辑器价格不菲。
3.在基于WinForm的题库系统中,利用RichTextBox控件的TextRTF属性可以显示部分由Word编辑的RTF格式的信息[2],如公式等,但该控件不支持对非文本内容的编辑,仅能作为多样化试题的呈现工具。此外,该控件不支持在Word中利用画图工具绘制的图形以及插入的图示,且对于混排的图片基本没有排版功能。
4.部分题库系统在实现时,使用Word软件编辑试卷,再将整个试卷以文件流形式直接存入数据库中,取用时只能整卷利用,不支持单题入库,不能实现试题的重复利用。而少数支持单题入库的系统,大多是采取将每道题的题干、答案等内容和难度、区分度等属性同时存入一个独立文档中,再将文档整体以流格式入库[3]。这样的组织方式增加了独立属性间的耦合程度,不利于信息的获取、汇总、横向对比等功能的实现,而且系统的扩展性和兼容性差。另外,为保存试题内容而附带的大量文件信息是系统资源的额外开销,若应用于大型题库系统则很不经济。
5.还有部分题库采用OLE技术[4],在窗体中嵌入OLE对象,编辑试题时在窗体外部另外打开一个Word程序进行试题的编辑。此策略能够解决图文混排试题的录入,但系统很难对独立运行的Word程序进行控制,频繁的程序切换也会降低系统的执行效率。由于OLE技术的固有缺陷,微软在其新的.NET平台中取消了对OLE容器控件的支持。
二、图文混排试题处理的解决方案
通过以上分析可以发现,目前的第三方(尤其是免费)组件在功能上与Micorsoft Office软件相比确有差距,因此笔者提出的改进方案是利用微软提供的专为Office提供显示框架的控件——DSOFramer作为容器,将Word应用程序嵌入该容器中,借助Word本身提供的公式、图形编辑功能,为用户呈现出简洁、熟悉的操作界面。
1.图文混排试题的录入和编辑
Microsoft开发的DSOFramer控件作为ActiveX 文档容器,用于承载用户窗体或Web页中的Office文档(包括Microsoft Word、 Microsoft Excel、 Microsoft PowerPoint、 Microsoft Project 和 Microsoft Visio 文档)。该控件具有灵活及轻量级的特点, 利用ActiveX控件构建嵌入式文档浏览器和编辑器,解决了在非顶级宿主窗口中使用ActiveX文档难的问题,为程序开发者在自己的解决方案中使用Office提供了新的技术手段[5]。
通过该控件中的ActiveDocument方法可以提取到嵌入其中的Office文档对象,该对象有控制Office显示外观、文档内容等多个属性和方法。将该控件嵌入题库系统的界面如图1所示,图中复杂的数学公式即是用文档右上角的Word公式编辑器即时编辑而不是通过图片引入的。试题的参数通过Windows标准控件录入,试题内容通过DSOFramer控件显示及编辑,在表格单元格内进行排版。编辑该题或抽取该题组卷时,其格式将与此排版严格一致,并且用户直接在文档中录入试题,而不需额外键入试题说明信息。用户通过配置本地Word显示需要的工具栏,系统还可以在后台编写代码,屏蔽掉诸如“新建”等工具按钮。

图1 通用题卡库管理系统中试题录入界面
2.试题的单题入库策略
非文本试题的存储策略是题库系统实现的技术核心。目前许多文献也提出了不同的解决方法,如将试题文本部分和非文本部分分开存储,将试题存储在Word文档中。这种策略操作不便,对图形的限制性强,不能实现图文混排,且存在安全性问题。笔者另辟蹊径,采用内存流技术,将试题内容存储到数据库表中,提高了试题存储的安全性,并保证了目标试卷中的试题与原试题在排版上严格一致。
题库系统提供了试题导入(界面如图1)和批量试题导入(图略)功能模块,以每道题为单位存储在数据库的试题表中。表中除了必要的试题参数字段外,还添加了试题内容和试题答案字段。这两个字段为Image类型,将试题内容转化成二进制比特流后存储其中。具体的算法策略如下。
试题入库策略(如图2所示):

图2 试题的入库过程原理图
(1)在Word中,出题教师只需将试题内容填写到相应的表格中。系统通过DSOFramer控件的ActiveDocument.Tables(i).Cell(j,k).Range.Copy,将对应第i道试题表中第j行k列的试题内容复制到系统剪贴板中。
(2)通过剪贴板的GetData(DataFormats.Rtf)方法,将复制的图元文件转化为RTF格式的字符串表达式(既有文本又有图形及格式信息的字符串),并获得该RTF字符串。之所以借助剪贴板,是由于Word应用程序中Range.Text方法只能获取文档某范围内的字符,对于图形及格式信息不予支持。而系统剪贴板支持以图元文件形式存储信息,并可将其转化为RTF格式字符串,既保留了内容信息又可保留图形及格式信息。故该方案非文本试题的获取和保存是通过“巧”用系统剪贴板实现的。
(3)通过Encoding.UTF8.GetByteCount(strQuestionContent),将该字符串转化为二进制字节流。
(4) 将字节流存入数据库相应的Image字段中。
试题入库的核心源代码如下:
Dim doc As New Word. Document
Dim strQuestionContent As String
doc=DSOFramer1.ActiveDocument
doc.Tables(doc.Tables.Count).Cell(1, 2).Range.Copy()
IfClipboard.GetDataObject.GetDataPresent(DataFormats.Rtf) = True Then
strQuestionContent = Clipboard.GetDataObject.GetData(DataFormats.Rtf)
Length = Encoding.UTF8.GetByteCount(strNeiRong)
Dim binQuestionContent(Length) As Byte
binQuestionContent = Encoding.UTF8.GetBytes(strQuestionContent)
dsQuestion.Tables(0).Rows(rowIndex)("binTestQuestionContent") = binQuestionContent
End If
出库策略是入库策略的逆过程(如图3所示):

图3 试题的出库过程原理图
(1)从数据库试题表中取出相应试题内容字段的比特流。
(2)将比特流通过Encoding.UTF8.GetString(binQuestionContent)转化为RTF字符串。
(3)借助系统剪贴板,通过SetData(Data For mats.Rtf, strQuestionContent)读取该RTF字符串,并转化成图元文件暂存在剪贴板中。
(4)通过ActiveDocument.Tables(i).Cell(j,k).Range.Paste,将该图元文件粘贴到Word文档中第i道试题表中第j行k列的位置。
3.试题的标准化格式输出
题库管理系统生成的试卷要求格式标准规范,由于该解决方案试题使用Word文档录入,并且在录入时就考虑到试题的格式,在成卷时即可实现试卷的标准化输出,并可利用Word自身的打印功能,将试卷打印成纸质试卷。试卷格式完全符合考试要求,可直接用于考试,而无需再人工排版,这也是该策略的另一特点。系统组卷后自动生成的试卷通过无线表格式化,试题直接从数据库中读出,是原题的再现,并且实现了图文混排。
三、该方案的特点和实用性分析
该解决方案解决了目前题库系统中非文本试题在编辑、存储和格式化方面存在的不足,经测试及部分教师试用,一致认为较以往方案有很大突破,实用性强。通过教师反馈的结果,总结该方案的特点如下。
1.通过DSOFramer容器控件,将Word嵌入到用户定制的窗体中。利用Word自身强大的编辑功能进行数学公式、化学方程式、电路图等非文本试题的编辑,实现了图文混排。熟悉的Word编辑界面上手容易,无需培训。嵌入窗体的Word工具栏支持当前编辑,编辑器功能强大,操作简便,而且是免费的。
2.该方案实现了试题的单题入库而不是整卷入库,并将试题参数信息和试题内容作为一行记录存储在数据库试题表中,存取方便快捷,支持统计汇总,容易管理维护,节省系统资源。
3.试题内容是以二进制流的格式存入库中,只能通过本系统采取的试题入库的逆过程才能读取并显示试题内容,有效地保障了试题的安全性。同时可以方便地扩展各类加解密算法。
4.利用Word,试题在录入与输出时,排版格式完全一致。自动生成Word版试卷,并严格规定了试卷的格式,无需二次排版,可直接打印成纸质试卷,用于正规考试。
5.利用表格录入试题,支持试题的批量录入。
针对图文混排的试题内容的编辑和存储这一难点问题,笔者提出了新的解决方案,已成功运用到自学考试通用题卡库管理系统中,并经与天津市教育招生考试院自考命题处商榷,有望在我市自考命题中推广使用。同样,该方案还可扩展到其他正规化考试中以及需要图文混排显示及存储的系统中。
参考文献
[1]范继红.实现图文混排试题系统的设计[J]. 教育信息化, 2006.11: 38~39.
[2]刘作军.图文混排技术在试题库中的应用[J]. 河北理工学院学报, 2006.5, 28(2):76~78.
[3]尹汉明.一种通用题库管理及组卷系统的设计与实现[J].井冈山医专学报,2003.9,10(5): 74~76.
[4]张文, 陈世强. 题库系统试题存取方法的研究[J]. 计算机与现代化, 2006(3): 97~99.
[5]Visual C ActiveX Control for hosting Office documents in Visual Basic or HTML [EB/OL]. http://support.microsoft.com/default.aspx?scid=kb;en-us;311765#appliesto. 2007.7.15.
(作者单位:天津师范大学物理与电子信息学院教育技术系)