《基于组件技术的自动改卷系统的设计与实现(精)》由会员分享,可在线阅读,更多相关《基于组件技术的自动改卷系统的设计与实现(精)(6页珍藏版)》请在金锄头文库上搜索。
1、收稿日期:2004-10-12基金项目:计算机基础通过性考试,基金来源:华南师范大学特色项目(拨款);编号:521036作者简介:蔡韶华(1973.5-),女,汉族,广东潮州人,大学讲师,硕士,E-mail:基于组件技术的自动改卷系统的设计与实现蔡韶华华南师范大学教育信息技术中心 广州 510631摘要:传统的改卷系统存在许多问题和不足,为此,文章讨论了基于组件技术的自动改卷系统的设计思想与实现,并且详细讨论了组件嵌入,组件设计,开发平台的应用。关键词:组件;VBA;计算机基础课;自动改卷系统 DESIGNING AND IMPLEMENTATION OF TEST PAPER AUTOMAT
2、IC CORRECTION SYSTEM BASED_ON COM TECHNIQUECAI ShaohuaEducation Information Technique Center,South China Normal University,GuangZhou 510631,ChinaAbstract:There are many problems in the traditional test papers correction system.This paper gives the thinking and implementation of test papers automatic
3、 correction system base_on COM technique and discusses the COM embedding,COM designing and development platform application in detail.Key Words:COM; VBA; computer elementary course; test papers automati correction system目前市场上存在的各种计算机应用基础的自动改卷系统,存在着对环境要求过于严格,系统使用的通用性不足;或者知识点不够全面,限制了教师考试出题的灵活性;甚至对学生的操
4、作判定有误判情况等问题。针对以上不足,本文对设计一个基于组件技术的具有开放性和通用性的计算机应用基础自动改卷系统进行了探索。1 改卷系统工作流程自动改卷系统利用COM技术将Office文档嵌入到系统中,再调入数据库中每个知识点的正确答案进行比对并将得分输入数据库。具体工作流程如图1所示:Office文档(考试、作业)COM组件对象读取相应文档的内容与知识点比对并给予分值保存分数值释放内存并退出图1:自动改卷流程2 基于组件的自动改卷系统设计思路自动改卷系统应用了大量的组件思想,并针对性地编制了自己适用的组件。所谓COM(Component Object Model:部件对象模型),是Micro
5、soft许多其他技术的核心,是一种以组件为发布单元的对象模型。它作为一种跨平台的客户服务器系统开发技术,具有开放的体系结构。其也是Active X和OLE 2.0的技术基础。只要遵循COM规范,应用程序和组件对象之间就可以实现二进制代码级别上的重用,从而解决了对编译语言和环境的依赖。COM实际上是一种二进制代码的操作规范,它允许用某种语言编写二进制代码中的对象,为其他语言所访问,即为二进制兼容。实际上,COM技术已经渗透到Microsoft的各种产品中,是其他技术如ADO,VBA,Office Automation的基石,自动改卷系统大量使用了组件技术不仅大大提高了编译效率,而且提高了软件开发
6、效率和实现了代码重用。(1)利用组件技术嵌入Office软件目前应用最为普遍的Office套装办公软件可以说是对Com技术支持最好的软件,Office套装软件提供了强大的编程接口技术使用户可以通过程序控制软件的任何一部分操作,这部分功能主要由COM技术的重要组成部分VBA组件完成。利用其可以实现繁琐、机械的日常生活工作的自动化,可以利用精美的界面和实用的控件实现用户程序的封装,从而极大地提高用户的办公效率。用户操作结果的对错也可以通过分析VBA组件中的各个对象进行判定。这也是本自动改卷系统设计的核心思想。要利用本系统进行自动改卷,首先需要用C+ builder的控件TOleContainer将
7、Office套装软件嵌入。通常嵌入的方法有以下几种: 使用C+ builder提供的Servers控件调用软件,使用Office套装软件的属性。这是最简单的OLE嵌入,只需要使用ToleContainer.Run就可以将文档直接启动,且这样启动的文档从界面上看与C+ builder程序浑然一体。但是它存在不可克服的缺点,即不能通过C+ builder灵活地控制Office文档。使用C+ builder的Servers控件来操纵Office套装软件,在编程时C+ builder能够实现代码提示。这种方法总体上看能够较好地实现C+ builder对软件的控制,但是部分Office软件的功能不能在C
8、+ builder中调用(比如自己编写的VBA宏代码)。自动改卷系统如果采用此方法,有些改卷功能将无法完成。而且,某些VBA代码中可选择的参数在C+ builder调用其对象时变成必选项,否则连编译都不能通过,这也限制了系统的灵活性。通过真正的Com技术,将Office软件目录中的类库全部导入C+ builder中,利用Com技术编程。这种方法整体上类似使用C+ builder的Servers控件,稍比Servers控件复杂,优缺点与Servers控件相同。所以此办法仅能作为一个参考。使用CreateOleObject方式启动软件,然后以OLE方式对软件进行控制。采用这种方式能够真正做到完全控
9、制软件文档,能够使用Office软件的所有属性,包括自己编写的VBA宏代码。与第二和第三种方法相比,本方法能够真正地使用Office软件的各种属性,所有异常处理均可根据需要自己编写,灵活性和针对性较强。所以本系统采用这种嵌入技术作为启动机制。以EXCEL文档为例,C+ builder使用下列语句嵌入一个COM对象:excel = Variant:CreateObject(Excel.Application);进而用以下语句打开EXCEL工作簿和其中的工作表:bu_zuo_da = excel.OlePropertyGet(Workbooks).OleFunction(Open, _argv1)
10、;bu_biao_zhun = excel.OlePropertyGet(Workbooks).OleFunction(Open, _argv3);biao_zuo_da = bu_zuo_da.OlePropertyGet(Sheets, biao_ming.c_str();biao_biao_zhun = bu_biao_zhun.OlePropertyGet(Sheets, biao_ming.c_str();(2)知识点的组件设计打开了Office软件文档后,就可以通过组件分析学生试卷。COM有着非常详细的功能组件满足工程技术人员各方面的需要。但需要工程技术人员严格遵守一组规则并需要分
11、析大量低级、晦涩的详细信息才能有效地工作,针对本系统而言,这些信息的冗余量太大。有些改卷系统存在对学生操作判定缺乏灵活性甚至有误判的问题。例如,在EXCEL中公式与函数的知识点,有多种函数都达到相同的操作目的。如果学生使用了教师在编制答案时没有提供的解题方法,笔者测试过的一些改卷系统就有误判的情况。针对这一问题,就要在组件里进行判断异常答案的设置。这是原有的组件没有的设置,本系统利用了C+ builder中创建组件的功能,对COM和考试的知识点进行详尽地分析后按照本身需要进行二次开发,针对不同的知识点设计了新组件。以EXCEL中的数据透视表这一考点为例,本系统设计的新组件如下所示:/ SHU_
12、JU_TOU_SHI_BIAOIMPL.H : Declaration of the Tshu_ju_tou_shi_biaoImpl#ifndef shu_ju_tou_shi_biaoImplH#define shu_ju_tou_shi_biaoImplH#define ATL_APARTMENT_THREADED#include excel_cao_zuo_TLB.h/ Tshu_ju_tou_shi_biaoImpl Implements Ishu_ju_tou_shi_biao, default interface of shu_ju_tou_shi_biao/ Threading
13、Model : Apartment/ Dual Interface : FALSE/ Event Support : FALSE/ Default ProgID : Project1.shu_ju_tou_shi_biao/ Description :class ATL_NO_VTABLE Tshu_ju_tou_shi_biaoImpl : public CComObjectRootEx, public CComCoClass, public Ishu_ju_tou_shi_biaopublic: Tshu_ju_tou_shi_biaoImpl() / Data used when reg
14、istering Object DECLARE_THREADING_MODEL(otApartment); DECLARE_PROGID(excel_cao_zuo.shu_ju_tou_shi_biao); DECLARE_DESCRIPTION(); / Function invoked to (un)register object static HRESULT WINAPI UpdateRegistry(BOOL bRegister) TTypedComServerRegistrarT regObj(GetObjectCLSID(), GetProgID(), GetDescriptio
15、n(); return regObj.UpdateRegistry(bRegister); BEGIN_COM_MAP(Tshu_ju_tou_shi_biaoImpl) COM_INTERFACE_ENTRY(Ishu_ju_tou_shi_biao)END_COM_MAP()/ Ishu_ju_tou_shi_biaopublic:/存盘/入口:路径/出口:出错提示,若成功则为0STDMETHOD(cun_pan(VARIANT lu_jing, VARIANT* fan_hui);/读入用户在界面所作设定/入口:窗口STDMETHOD(du_ru_jie_mian(VARIANT chuang_kou);/评分/入口:工作表/出口:得分STD