试题库工具插件的设计毕业设计论文_第1页
试题库工具插件的设计毕业设计论文_第2页
试题库工具插件的设计毕业设计论文_第3页
试题库工具插件的设计毕业设计论文_第4页
试题库工具插件的设计毕业设计论文_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕 业 设 计 (论 文 )Word 试题库设计论文作者姓名:申请学位专业:申请学位类别:指 导 教 师 姓 名 ( 职 称 ):论文提交日期:Word 试题库设计摘 要编写试题、排版试卷一直以来都是一项繁重的工作。手工录入试题然后排版试卷工作量大且容易出错,试题的收集保存也是以文件的形式,这使得查找试题变得相当困难。改用数据库存储试题将使试题的存储和查找得到优化,这是大部分试题库软件的优势,但是这些试题库软件都使用软件自身的文本编辑器,功能十分有限,在数据的存储方面也只能存储纯文本的试题,不能存储图片、表格等。这使得用户在编辑试题时十分不便,在数据的存储方面也有很大限制。如果结合数据库的存储功能、结构化查询语言的查询功能和 Word 的文本编辑功能,利用 Word 进行试题编写、试卷排版,利用数据库存储试题,利用结构化查询语言查找试题、过滤显示同类试题,那么编写试题、排版试卷等工作将变得方便快捷。为了实现 Word 与数据库之间的试题存取(能够支持图片、表格、公式的存取)以及其他一些功能编写的 Word 试题库工具插件以 COM 组件的形式嵌入 Word 程序中,通过它将 Word 与试题数据库有效的结合到一起,使用户既能够方便的编辑试题又能够将试题存入数据库或从数据库中取出,还能够通过结构化查询语句搜索试题。关键词:COM 组件;Word 插件;二进制字段;结构化查询语言The Design of an Word for the Test Question BankAbstractEditing test questions and typesetting examination papers is always an arduous work, which is tedious and easy to make mistake. Besides, the collection of the test questions is in the form of files that makes it difficult to search proper test questions. Using the database to store test questions can improve the searching function for the test questions, but such softwares almost use their own text editors with limited format control functions. At the aspect of their storage form, they commonly only save test questions in plain text, which means they can hardly store the pictures or tables that may be nesscesary in the test question. Considering that large part of test questions are edited in MSWord, if we can utilize the powerful format control function combined with the binary data storage function of the database to provide a localized test question management tool, the work of editing test questions and typesetting examination papers would become more effective and convinent. With the help of COM component technology, such a tool can be implemented in the form of Word Addin that can integrate MSWord and the test question bank seamlessly and facilitate the users to store the test question into the bank and retrieve test questions selectively by the Structural Query Language (SQL).Key words: COM; Word Addin; Binary Field; SQL目 录论文总页数:33 页1 引言 .11.1 课题背景 .11.2 国内外研究现状 .11.3 本课题研究的意义 .12 理论基础 .12.1 COM 组件技术 .12.1.1 什么是 COM 组件 .12.1.2 COM 组件的基本元素 .22.1.3 关键接口 .32.1.4 如何创建 COM 对象 .42.1.5 如何删除 COM 对象 .52.2 Word 对象模型 .62.2.1 什么是 Word 对象模型 .62.2.2 Word 对象模型抽象图 .62.2.3 主要对象模型介绍 .72.3 数据库技术 .72.4 ODL 文件语法 .82.4.1 ODL 文件语法结构 .82.4.2 类型库 TLB 的使用方法 .102.5 ADO 技术 .112.5.1 什么是 ADO 技术 .112.5.2 如何在 VB 中使用 ADO .122.5.3 ADO 技术主要应用举例 .152.6 插件技术 .202.6.1 什么是插件 .202.6.2 主流插件简介 .203 需求分析与方案设计 .213.1 什么是 Word 试题库工具插件 .213.2 Word 试题库工具插件的功能需求分析 .213.2.1 创建题库功能 .223.2.2 打开试题库功能 .223.2.3 存储试题功能 .223.2.4 提取试题功能 .223.2.5 删除试题功能 .223.2.6 预览试题功能 .223.2.7 搜索试题功能 .223.2.8 过滤试题功能 .233.3 Word 试题库工具插件的结构设计 .233.3.1 数据库结构 .233.3.2 主程序结构 .234 详细设计与实现 .234.1 已实现的功能 .234.2 在 Word 中添加按钮的实现过程 .244.2.1 实现原理 .244.2.2 关键代码 .244.2.3 相关技术的运用 .254.3 试题存储的实现过程 .254.3.1 实现原理 .254.3.2 关键代码 .264.3.3 相关技术的运用 .274.4 试题提取的实现过程 .284.4.1 实现原理 .284.4.2 关键代码 .284.4.3 相关技术的运用 .305 测试和分析 .30结 论 .30参考文献 .31致 谢 .32声 明 .33第 1 页 共 33 页1 引言1.1 课题背景目前大量试题使用 Word 编写,在 Word 中可以很方便地编写公式、插入图片和表格。一些独立的试题库软件使用简单的文本编辑功能,在试题编辑方面没有 Word 方便。但是 Word 仅能编辑试题,不能存储收集试题。 Word 试题库工具插件以 COM 组件的形式嵌入 Word 程序中,通过它将 Word 与数据库有效的结合到一起,从而使用户既能够方便的编辑试题又能够将试题存入数据库或从数据库中取出。1.2 国内外研究现状大多数试题库软件都使用软件自身的文本编辑器,功能十分有限;在数据的存储方面只能存储纯文本的试题,不能存储图片、表格等,这使得用户在编辑试题时十分不便,在数据的存储方面也有很大限制。1.3 本课题研究的意义通过综合运用 COM 组件技术、插件技术、数据库技术开发的 Word 试题库工具插件能嵌入 Word 程序内,从而将 Word 与数据库有效的结合到一起。使用户在编辑试题时既能用 Word 方便快捷的编辑试题又能方便的将试题存入数据库或从数据库提取试题。使试题编辑工作更加方便快捷。2 理论基础2.1 COM 组件技术2.1.1 什么是 COM 组件COM 即组件对象模型,是 Component Object Model 的缩写。COM 是一种跨应用和语言共享二进制代码的方法。与 C+不同,它提倡源代码重用。ATL 便是一个很好的例证。源码级重用虽然好,但只能用于 C+。它还带来了名字冲突的可能性,更不用说不断拷贝重用代码而导致工程膨胀和臃肿。Windows 使用 DLLs 在二进制级共享代码。这也是 Windows 程序运行的关键重用kernel32.dll, user32.dll 等。但 DLLs 是针对 C 接口而写的,它们只能被 C 或理解 C 调用规范的语言使用。由编程语言来负责实现共享代码,而不是由DLLs 本身。这样的话 DLLs 的使用受到限制。MFC 引入了另外一种 MFC 扩展DLLs 二进制共享机制。但它的使用仍受限制只能在 MFC 程序中使用。COM 通过定义二进制标准解决了这些问题,即 COM 明确指出二进制模块(DLLs 和EXEs)必须被编译成与指定的结构匹配。这个标准也确切规定了在内存中如何组织 COM 对象。COM 定义的二进制标准还必须独立于任何编程语言(如 C+中的命名修饰) 。一旦满足了这些条件,就可以轻松地从任何编程语言中存取这些模块。由编译器负责所产生的二进制代码与标准兼容。这样使后来的人就能更第 2 页 共 33 页容易地使用这些二进制代码。在内存中,COM 对象的这种标准形式在 C+虚函数中偶尔用到,所以这就是为什么许多 COM 代码使用 C+的原因。但是记住,编写模块所用的语言是无关的,因为结果二进制代码为所有语言可用。2.1.2 COM 组件的基本元素coclass(简称组件对象类component object class)被包含在 DLL 或 EXE 中,并且包含着一个或者多个接口的代码。组件对象类(coclasss)实现这些接口。COM 对象在内存中表现为组件对象类(coclasss)的一个实例。注意 COM“类”和 C+“类”是不相同的,尽管常常 COM 类实现的就是一个 C+类。COM 服务器是包含了一个或多个 coclass 的二进制 DLL 或 EXE。注册(Registration)是创建注册表入口的一个过程,告诉 Windows 操作系统 COM 服务器放在什么位置。取消注册(Unregistration)则相反从注册表删除这些注册入口。GUID(谐音为“fluid” ,意思是全球唯一标示符globally unique identifier)是个 128 位的数字。它是一种独立于 COM 编程语言的标示方法。每一个接口和 coclass 有一个 GUID。因为每一个 GUID 都是全球唯一的,所以避免了名字冲突(只要用 COM API 创建它们) 。有时还会碰到另一个术语UUID(意思也是全球唯一标示符universally iqueidentifier) 。UUIDs 和 GUIDs 在实际使用时的用途是一样的。类 ID 或者 CLSID 是命名 coclass 的 GUID。接口 ID 或者 IID 是命名接口的 GUID。在 COM 中广泛地使用 GUID 有两个理由:1、GUIDs 只是简单的数字,任何编程语言都可以对之进行处理。2、GUIDs 可以在任何机器上被任何人创建,一旦完成创建,它就是唯一的。因此,COM 开发人员可以创建自己特有的 GUIDs 而不会与其它开发人员所创建的 GUIDs 有冲突。这样就消除了集中授权发布 GUIDs 的必要。HRESULT 是 COM 用来返回错误和成功代码的整型数字。除此之外,别无它意,虽然以 H 作前缀,但没有句柄之意。最后,COM 库是在使用 COM 时与交互的操作系统的一部分,它常常指的就是 COM 本身。但是为了避免混淆才分开描述的。使用和处理 COM 对象每一种语言都有其自己处理对象的方式。例如,C+是在栈中创建对象,或者用 new 动态分配。因为 COM 必须独立于语言,所以 COM 库为自己提供对象管理例程。下面是对 COM 对象管理和 C+对象管理所做的一个比较:创建一个新对象第 3 页 共 33 页C+中,用 new 操作符,或者在栈中创建对象。COM 中,调用 COM 库中的 API。删除对象C+中,用 delete 操作符,或将栈对象踢出。COM 中,所有的对象保持它们自己的引用计数。调用者必须通知对象什么时候用完这个对象。当引用计数为零时,COM 对象将自己从内存中释放。由此可见,对象处理的两个阶段:创建和销毁,缺一不可。当创建 COM 对象时要通知 COM 库使用哪一个接口。如果这个对象创建成功,COM 库返回所请求接口的指针。然后通过这个指针调用方法,就像使用常规 C+对象指针一样。2.1.3 关键接口IUnknown 接口每一个 COM 接口都派生于 IUnknown。这个名字有点误导人,其中没有未知(Unknown)接口的意思。它的原意是如果有一个指向某 COM 对象的 IUnknown 指针,就不用知道潜在的对象是什么,因为每个 COM 对象都实现 IUnknown。IUnknown 有三个方法:AddRef() 通知 COM 对象增加它的引用计数。如果你进行了一次接口指针的拷贝,就必须调用一次这个方法,并且原始的值和拷贝的值两者都要用到。在本文的例子中没有用到 AddRef()方法。Release() 通知 COM 对象减少它的引用计数。参见前面的 Release()示例代码段。QueryInterface() 从 COM 对象请求一个接口指针。当 coclass 实现一个以上的接口时,就要用到这个方法。IClassFactory 接口IClassFactory 的作用是创建 COM 组件。创建组件的责任交给了一个单独的对象,这个对象就是类厂。每个组件都必须有一个与之相关的类厂,这个类厂知道怎么样创建组件,当客户请求一个组件对象的实例时,实际上这个请求交给了类厂,由类厂创建组件实例,然后把实例指针交给客户程序。这个过程在跨进程及远程创建组件时特别有用,因为这时就不是一个简单的 new 操作就可以的了,它必须要经过调度,而这些复杂的操作都交给类厂对象去做了。IClassFactory 最重要的一个函数就是 CreateInstance,顾名思议就是创建组件实例,一般情况下我们不会直接调用它,API 函数都为我们封装好它了,只有某些特殊情况下才会由我们自己来调用它。IDispatch 接口第 4 页 共 33 页IDispatch 叫做调度接口。调度接口把每一个函数每一个属性都编上号,客户程序要调用这些函数属性的时侯就把这些编号传给 IDispatch 接口就行了,IDispatch 再根据这些编号调用相应的函数。IDispatch 接口的主要函数是Invoke,客户程序都调用它,然后 Invoke 再调用相应的函数。2.1.4 如何创建 COM 对象为了创建 COM 对象并从这个对象获得接口, 必须调用 COM 库的 API 函数,CoCreateInstance()。其原型如下:HRESULT CoCreateInstance (REFCLSID rclsid,LPUNKNOWN pUnkOuter,DWORD dwClsContext,REFIID riid,LPVOID* ppv );以下是参数解释:rclsidcoclass 的 CLSID,例如,可以传递 CLSID_ShellLink 创建一个 COM 对象来建立快捷方式。pUnkOuter这个参数只用于 COM 对象的聚合,利用它向现有的 coclass 添加新方法。参数值为 null 表示不使用聚合。dwClsContext表示所使用 COM 服务器的种类。本文使用的是最简单的 COM 服务器,一个进程内(in-process)DLL,所以传递的参数值为 CLSCTX_INPROC_SERVER。注意这里不要随意使用 CLSCTX_ALL(在 ATL 中,它是个缺省值) ,因为在没有安装 DCOM 的 Windows95 系统上会导致失败。riid请求接口的 IID。例如,可以传递 IID_IShellLink 获得 IShellLink 接口指针。ppv接口指针的地址。COM 库通过这个参数返回请求的接口。当调用CoCreateInstance()时,它负责在注册表中查找 COM 服务器的位置,将服务器加载到内存,并创建所请求的 coclass 实例。以下是一个调用的例子,创建一个 CLSID_ShellLink 对象的实例并请求指向这个对象 IShellLink 接口指针。HRESULT hr;第 5 页 共 33 页IShellLink* pISL;hr = CoCreateInstance ( CLSID_ShellLink, / coclass 的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论