网上考试系统的设计与实现 -...

10
网上考试系统的设计与实现 246 网上考试系统的设计与实现 复旦大学 9824116 黄鑫 摘要:随着校园网与 Internet 在我国的迅速发展 远程教育和校园的信息化建设成为网络应用的一个新的热点 网上考试作为远程教育和校园信息化建设的一部分 有着其独特的需求和作用 本文就网上考试系统的设计 思想与目标 总体结构与功能以及实现技术进行了逐一的论述 本文讨论的重点是网上考试系统中的数据库 管理系统及其在.NET 平台下的实现 Exam.NET Exam.NET 是用 C#语言编写的网上考试数据库管理系统 供了题库管理 题目编辑 试卷生成 试卷批改等功能 Exam.NET 具有良好的可扩展性 可伸缩性 通用 性和易用性 关键字:网上考试 MHTML C# SQL Server CDO COM Automation 引言 随着我国 Internet/Intranet 网络的飞速发展 适应知识经济发展的网上远程教育和校园信 息化建设已成为网络应用的新热点 远程教育的发展将直接产生两个方面的效益 在教育方 将促进对已有教育方法的改进和新教育方法的发展 在技术方面 将综合利用信息和通 信技术实现新的远程教育方式 即依托远程教育系统或环境来实现远程教育 而考试一直是 教育过程中不可缺少的部分 因此网上考试也将是远程教育中相当重要的一环 但就目前的 远程教育系统来看 多数都专注于多媒体流的实时压缩 多播 鲜有考虑网上考试者 而目 前流行的网上考试系统 要么为某些机构或公司专有 TOEFL GRE MCSE 要么以 基于 Web 的方式实现 并不能满足远程教育和校园信息化的需要 针对以上问题 结合复旦大学校园网和 Internet 发展的现状与趋势 我们设计和开发了一 个基于 Internet 的网上考试系统 本文将就其设计思想与目标 总体结构与功能以及实现技术 等有关问题作逐一阐述 本文讨论的重点是网上考试系统中的数据库管理系统 网上考试系统的设计目标 100%基于 TCP/IP 以前的一些计算机考试系统采用软盘作为信息传播的媒体 而软盘的可靠性并不高 致考试过程中出现一些不必要的麻烦 甚至因软盘故障导致考卷或学生答卷丢失等尴尬场面 由于目前校园网以及 Internet 的发展空前 将网络作为考试过程中信息传播的媒体是一种理想 的选择 TCP/IP 协议作为 Internet 上的基础协议 可以保证传输过程中相当高的可靠性 因此 在整个网上考试系统中 我们选用了 TCP/IP 协议作为所有数据传输协议的基础 完整的 后勤 如果把考试比作战场的话 那么 考试的试题编辑 题库管理 试卷生成 试卷批改 分数统计 乃至学生信息管理 教师信息管理 学生选课等 都可算作是 后勤 工作 没有这些后勤工作的支持 单独的考试是没有意义 而且无法完成的 因此 网上考试 系统中 应该包含完整的管理系统 本文所详细讨论的网上考试数据库管理系统便是完成这 些工作的 事实上 这些数据库管理工作比单独的考试过程要更加复杂 运行环境 不论学校机房的计算机 还是学生宿舍的计算机 某个 32 位版本的 Windows 平台 包括 Windows 98/ME Windows NT Windows 2000 Windows XP 总是必备的操作系统 因此 Win32 应用程序有广泛的运行环境 同时 非计算机专业的老师和同学对 Windows 操作系统 的使用也相对较为熟悉 所以 考试系统的运行环境为 Windows 操作系统 至于 Windows 95 由于绝大多数计算机已经淘汰 Windows 95 所以考试系统并不把 Windows95 作为目标平台之 在考试系统的开发过程中 允许使用 Windows 95 没有提供的操作系统功能

Upload: others

Post on 08-Oct-2020

38 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 网上考试系统的设计与实现 - educenter.fudan.edu.cneducenter.fudan.edu.cn/chun-tsung/paper/26网上... · 网上考试系统的设计与实现 246 网上考试系统的设计与实现

网上考试系统的设计与实现

246

网上考试系统的设计与实现

复旦大学 9824116 黄鑫

摘要:随着校园网与 Internet 在我国的迅速发展 远程教育和校园的信息化建设成为网络应用的一个新的热点

网上考试作为远程教育和校园信息化建设的一部分 有着其独特的需求和作用 本文就网上考试系统的设计

思想与目标 总体结构与功能以及实现技术进行了逐一的论述 本文讨论的重点是网上考试系统中的数据库

管理系统及其在.NET 平台下的实现 Exam.NET Exam.NET 是用 C#语言编写的网上考试数据库管理系统 提

供了题库管理 题目编辑 试卷生成 试卷批改等功能 Exam.NET 具有良好的可扩展性 可伸缩性 通用

性和易用性

关键字:网上考试 MHTML C# SQL Server CDO COM Automation

引言 随着我国 Internet/Intranet 网络的飞速发展 适应知识经济发展的网上远程教育和校园信

息化建设已成为网络应用的新热点 远程教育的发展将直接产生两个方面的效益 在教育方

面 将促进对已有教育方法的改进和新教育方法的发展 在技术方面 将综合利用信息和通

信技术实现新的远程教育方式 即依托远程教育系统或环境来实现远程教育 而考试一直是

教育过程中不可缺少的部分 因此网上考试也将是远程教育中相当重要的一环 但就目前的

远程教育系统来看 多数都专注于多媒体流的实时压缩 多播 鲜有考虑网上考试者 而目

前流行的网上考试系统 要么为某些机构或公司专有 如 TOEFL GRE MCSE 等 要么以

基于 Web 的方式实现 并不能满足远程教育和校园信息化的需要

针对以上问题 结合复旦大学校园网和 Internet 发展的现状与趋势 我们设计和开发了一

个基于 Internet 的网上考试系统 本文将就其设计思想与目标 总体结构与功能以及实现技术

等有关问题作逐一阐述 本文讨论的重点是网上考试系统中的数据库管理系统

网上考试系统的设计目标 一 100%基于 TCP/IP

以前的一些计算机考试系统采用软盘作为信息传播的媒体 而软盘的可靠性并不高 导

致考试过程中出现一些不必要的麻烦 甚至因软盘故障导致考卷或学生答卷丢失等尴尬场面

由于目前校园网以及 Internet 的发展空前 将网络作为考试过程中信息传播的媒体是一种理想

的选择 TCP/IP 协议作为 Internet 上的基础协议 可以保证传输过程中相当高的可靠性 因此

在整个网上考试系统中 我们选用了 TCP/IP 协议作为所有数据传输协议的基础

二 完整的 后勤 如果把考试比作战场的话 那么 考试的试题编辑 题库管理 试卷生成 试卷批改

分数统计 乃至学生信息管理 教师信息管理 学生选课等 都可算作是 后勤 工作 显

然 没有这些后勤工作的支持 单独的考试是没有意义 而且无法完成的 因此 网上考试

系统中 应该包含完整的管理系统 本文所详细讨论的网上考试数据库管理系统便是完成这

些工作的 事实上 这些数据库管理工作比单独的考试过程要更加复杂

三 运行环境 不论学校机房的计算机 还是学生宿舍的计算机 某个 32 位版本的 Windows 平台 包括

Windows 98/ME Windows NT Windows 2000 和 Windows XP 总是必备的操作系统 因此

Win32 应用程序有广泛的运行环境 同时 非计算机专业的老师和同学对 Windows 操作系统

的使用也相对较为熟悉 所以 考试系统的运行环境为 Windows 操作系统 至于 Windows 95由于绝大多数计算机已经淘汰 Windows 95 所以考试系统并不把 Windows95 作为目标平台之

一 在考试系统的开发过程中 允许使用 Windows 95 没有提供的操作系统功能

Page 2: 网上考试系统的设计与实现 - educenter.fudan.edu.cneducenter.fudan.edu.cn/chun-tsung/paper/26网上... · 网上考试系统的设计与实现 246 网上考试系统的设计与实现

复旦大学 政学者论文集 2002

247

四 安全性 作为一次成功的考试 必须要做到公平 公开 公正 设想如果在网上考试过程中 学

生可以任意的将考试中的题目窃取出来 积累成网上考试题库的副本 或者精通计算机的考

生可以利用黑客程序任意窃取或篡改其他考生的考试答案 都将使网上考试丧失公平性 因

此 网上考试系统的设计过程中 必须对考试系统的安全性作尽可能的考虑

五 可扩展 可伸缩性 在校园信息化程度日益提高的今天 网上考试系统的设计还需考虑可扩展性 以适应今

后发展 同时 在学校小规模的试用网上考试系统之后 完全可能将其推广到全校 届时

题库中可能有成千上万的试题 而数据库中的教师和学生信息量也非常庞大 所以 可伸缩

性也是网上考试系统的设计目标之一 在小规模试用时 可以使用廉价的计算机和数据库

而到了大规模的普及推广时 可以立即转移到高性能服务器和大型数据库上

六 可集成性 网上考试系统依赖很多考试之外的信息 如教师信息 学生信息 学生选课等 为了获

得这些信息 我们可以有两种方法

一是把所有的功能全都做进考试系统中 这样 考试系统就变成了一个综合的校园信息

管理系统 这样的系统必须要有一个功能 即其他新开发的系统可以轻易的从这个校园信息

管理系统中获得所需的信息 否则 其他系统也得重复实现教师信息 学生信息等管理功能

不仅极大的提高了软件的开发成本 而且使各种信息必须在多套系统中同时进行维护 既浪

费人力 物力 又可能造成信息的不一致

另一种方法是利用已有的校园信息管理系统 通过某种标准协议 从这个系统中获得所

需的信息

无论哪种方法 都要求网上考试系统能够与其他系统进行通信 所以 网上考试系统必

须有较强的可集成性 可以方便的通过某种标准的容易实现的协议与其他系统相互交换信息

或进行功能调用

七 易用性 网上考试系统并非专为计算机专业的老师和同学设计的 全校各个专业的老师和同学都

可能使用网上考试系统 因此 网上考试系统的设计必须考虑其易用性 使非计算机专业的

老师和同学 只要掌握了基本的 Windows 操作方法 即可轻松使用网上考试系统

网上考试系统的设计 一 整体结构

从整体上讲 网上考试系统分为三大部分 网上考试数据库管理系统 网上考试服务器

和网上考试客户端

数据库管理系统负责所有的后勤工作 包括试题编辑 题库管理 试卷生成 试卷批改

分数统计 学生信息管理 教师信息管理 学生选课等 考试的试卷由数据库管理系统生成

后 交付给网上考试服务器

网上考试服务器是一个轻量级的程序 从数据库管理系统得到试卷 然后管理整个考试

过程 所谓轻量级是指 程序应尽可能少的使用附加的组件 运行时只需要一个 EXE 文件

不需要额外的安装 这样做的好处在于 可以让监考老师将网上考试服务器放到网络任何地

方 或者放到任何一台笔记本电脑上 到了考场只需任选一台计算机运行服务器程序即可

无需安装过程 无需注册组件

网上考试客户端也是一个轻量级程序 由考生在考场运行 登录到考试服务器后 考试

Page 3: 网上考试系统的设计与实现 - educenter.fudan.edu.cneducenter.fudan.edu.cn/chun-tsung/paper/26网上... · 网上考试系统的设计与实现 246 网上考试系统的设计与实现

网上考试系统的设计与实现

开始 学生开始答题 考试结束 答卷收归服务器

在此有必要解释一下为什么采用客户-服务器 C/S 结构 而不采用常见的浏览器-Web服务器 B/S 结构 如果到 google 上查询一下 网上考试系统 得到的结果几乎是清一色

的 B/S 结构的程序 用 ASP/JSP 做服务器 写好网页 再由考生直接用 Web 浏览器来参加考

试 很显然 这样的结构是不符合

设计要求中的 安全性 这一点的

因为考生在浏览器中 可以轻易的

将题目保存下来 造成题库泄漏

同时 用浏览器作为考试的客户

端 是几乎不可能实现 闭卷 考

试的 而使用 C/S 结构时 因为整

个客户端程序都是自己设计的 所

以能够完全控制其所有行为 可以

很好的防止题库泄漏 并且在一些

机房管理措施的配合下 可以做到

闭卷 考试

网上考试系统的整体结构图

如图 1

二 数据库结构 网上考试系统中的所有信息

包括题库 考卷 学生信息 教师

信息 考试信息 答卷 考试结果等

考试系统中的地位相当重要

1 数据库系统的选择 数据是放在数据库系统中的 数

问的效率 根据网上考试系统的需求

常见的 SQL Server 2000 有三个版本

企业版 MSDE 2000 是 SQL Server 2SQL Server 2000 服务器系列中最小的

和 SQL Server 2000 企业版则是针对更

由于这三个版本的 SQL Server 202000 达到了极好的可伸缩性 在小规

以将数据库与网上考试数据库管理

系统放到同一台桌面 PC 上 当

MSDE 2000 不足以应付扩大的数据

库的时候 可以将数据库转移到单

独运行 SQL Server 2000 标准版的

PC 服务器上 如果今后的网上考试

系统还将集成如学生在线选课等系

统负载较大的任务 并且供全校的

师生随时使用 那么还可以将数据

库放到一个运行 SQL Server 2000 企

图 1 网上考试系统整体结构图

都是保存在后台的数据库中的 因此 数据库在网上

据库系统的选择直接影响到数据库的可伸缩性和数据访

我们选择了 SQL Server 2000 作为后台的数据库系统

MSDE 2000 SQL Server 2000 标准版和 SQL Server 2000000 的桌面版 仅支持 2GB 的数据和 5 个并行连接 是

一个版本 但可以免费获得 而 SQL Server 2000 标准版

大型应用的版本 MS00

00 都是兼容的 所以 网上考试系统通过使用 SQL Server 模试用时 可以用 MSDE 2000 作为后台数据库 甚至可

248

图 2 数据库表的关系

Page 4: 网上考试系统的设计与实现 - educenter.fudan.edu.cneducenter.fudan.edu.cn/chun-tsung/paper/26网上... · 网上考试系统的设计与实现 246 网上考试系统的设计与实现

复旦大学 政学者论文集 2002

249

业版的集群 PC 服务器上

2 数据库表的设计 在网上考试系统的数据库中 共有学生信息 教师信息 课程信息 学期课程 选课信

息 学生答卷 题库 考试题库 考试信息 10 个表 它们之间的关系如图 2 所示

三 基于 HTML 的试题 在网上考试系统中 作为题目的保存形式和表现形式 我们有三种可以选择的格式 纯

文本 HTML 和 RTF

纯文本是最简单 最容易实现的格式 但考试题目中除了文本之外 还可能有大量的图

片甚至声音 动画等信息 纯文本显然不能满足要求 另外两种格式 HTML 和 RTF 都能

保存各种多媒体信息 是可行的选择 但 RTF 格式本身对操作系统平台过于依赖 而且实现

相对复杂 可扩展性不强 HTML 正好相反 几乎所有的平台都有对 HTML 的支持 通过

DHTML HTML 有极强的扩展性 除了可以轻易做出图文并茂的试题外 甚至可以加入脚本

语言和 Flash 动画等 实现传统考试无法达到的一些效果 同时 利用 Internet Explorer HTML的编程相对简单

使用 HTML 还有一个好处 那就是 DHTML 中对 XML 的支持 有了 XML 我们可以在

以后的版本中 把题目中的一些关键数据提取出来 放到 XML Data Island 中 这样可以极大

的提高系统的灵活性 譬如一道数学题 如果多次使用的话 可以在每次出题时 仅仅修改

题目中的一些关键数据 如果这些关键数据是放在 XML 中的 那么这样的修改将易如反掌

甚至连修改后的答案都可以通过公式或者脚本语言自动生成出来

但 HTML 文件有一个特性 即里面的图片 声音甚至 CSS 脚本语言等都是通过超链接

的方式链接到其他文件的 如果仅将 HTML 保存下来 便会丢失所有的超链接中的信息 使

保存下来的文件失去意义 幸好 IETF 即 Internet Engineering Task Force 因特网工程任务组

也考虑到了这一点 为我们定义了 MHTML 格式 RFC2557 用以将 HTML 文件中的所有相

关文件保存到一个文件里面去 事实上 现在流行的 HTML 电子邮件便是运用了 MHTML 这

个标准 才能使图片 声音都随邮件一起发送 并且直接为 Web 浏览器所接受的 因此 我

们决定在网上考试系统中 采用 MHTML 作为题目的存储和显示格式

四 题库的压缩 在网上考试系统中 如果对考试题目做一次压缩 那将带来相当多的好处 首先 压缩

后的题目所占的空间 不论是在数据库中所占用的磁盘空间 还是在系统运行时占用的内存

空间 都将大大减少 其次 压缩后的题目在网络传输过程中 可以减少占用的网络带宽

加快网络传输速度 减小传输过程中出现错误的可能性 最后 由于题目在计算机内是由一

段连续的字节流来表示的 压缩后 字节流中的信息密度提高了很多 所以 如果要对题目

进行某种形式的加密 先压缩后加密的方式可以增加非法解密的难度 同时缩短加密所需的

时间

考虑到目前在题目中加入声音和视频信息的可能性较小 题目中的内容应大多是 HTML格式的文本和一些 gif bmp jpg 和 png 等格式的图片 所以 使用常见的 zip 压缩算法即可

在较高的压缩速度下达到较高的压缩率

五 题目在客户端的显示 在考试题目从考试服务器传到客户端之后 客户端应该把题目显示到屏幕上 供考生答

题 由于题目为 MHTML 格式 所以最简便的方法就是利用 Internet Explorer 来显示题目 但

如果直接用 ActiveX 的方式把 Internet Explorer 嵌入客户端程序 由于 Internet Explorer 需要一

Page 5: 网上考试系统的设计与实现 - educenter.fudan.edu.cneducenter.fudan.edu.cn/chun-tsung/paper/26网上... · 网上考试系统的设计与实现 246 网上考试系统的设计与实现

网上考试系统的设计与实现

250

个指向网络或本地文件的 URL 才能显示出 MHTML 文件 所以题目需要先保存到磁盘文件上

才能被 Internet Explorer 所接受 出于安全性的考虑 题目文件是不能存放在磁盘上的 否则

程序的异常退出会把题目遗留在硬盘上 甚至已经被客户端程序删除的文件在考试结束后仍

是有可能通过一些工具恢复出来的 所以在此需要利用 Internet Explorer 的一个特殊结构 异

步插件式协议处理器 Asynchronous Pluggable Protocol APP MS01 通过 APP 程序可

以让 Internet Explorer 直接显示从内存中读取的题目内容 这样 试题从网上考试服务器通过

网络传输到客户端 在客户端通过 Internet Explorer 显示出来 交卷后再从内存中被丢弃 整

个考试过程中 题目信息都完全保存在内存中 一直没有写到过硬盘上 从而增强了网上考

试系统的安全性

六 题目的来源 在网上考试数据库管理系统中 教师可以对题库进行管理维护 题库管理的第一功能就

是往题库中加入新的题目 作为 MHTML 格式的考试题目 可以有两种来源 一是先用市面

上的任何HTML编辑器 如微软公司的Front Page Macromedia公司的Dreamweaver NetObjects公司的 Fusion IBM 公司的 WebSphere 等 把题目编辑好 并存为一个 HTML 文件 然后用

网上考试数据库管理系统中的 HTML 导入功能 把 HTML 文件到入到题库中 这种方式比较

繁琐 但对于以前编辑好的 HTML 题目是非常有用的 第二种方法是利用网上考试数据库管

理系统中内嵌的 Word 编辑器 网上考试数据库管理系统充分利用了 Word XP 的可编程性 让

教师可以直接通过 Word XP 强大的编辑功能编辑题目 然后直接保存到题库中 无需任何导

入过程 同时 Word 的使用也较 HTML 编辑器更为简单 从而方便非计算机专业教师的使用

不过这样做的条件是在运行网上考试数据库管理系统的机器上安装有 Word XP SR-1

七 答卷批改 在考试结束后 Exam.NET 可以依据试题的参考答案 自动完成所有客观题的批改工作

并辅助教师进行主观题的批改 批改完成后 Exam.NET 能自动统计所有参加考试的学生的成

绩 如果批改有误 教师可以重新批改任意学生的任意答卷

网上考试数据库管理系统的实现 Exam.NET 是我们在微软的.NET 技术下面 用 C#语言实现的网上考试数据库管理系统

.NET 是微软公司新推出的战略性技术革新 提供了许多的新功能 选用.NET 作为网上考

试数据库管理系统的实现平台有以下好处

1. C#是完全面向对象的语言 用 C#写出的程序清晰易读

2. .NET 中提供垃圾回收功能 使程序员免去内存管理的繁琐工作

3. .NET 中有非常强大的设计器支持 使程序员用设计器就可编写一部分代码 从而减少了

手写代码的数量 减小代码出错的可能性

4. .NET 提供了非常完整和便捷的 XML 和 Web Service 支持 为 Exam.NET 以后的发展和与

其他系统的集成提供了非常好的基础设施

Page 6: 网上考试系统的设计与实现 - educenter.fudan.edu.cneducenter.fudan.edu.cn/chun-tsung/paper/26网上... · 网上考试系统的设计与实现 246 网上考试系统的设计与实现

复旦大学 政学者论文集 2002

Exam.NET 是一个三层结构的应用程序 包括用户界面层 逻辑层和数据访问层 用户界

面层负责从用户接受操作命令 并将操作命令执行的结果显示给用户 逻辑层接受用户界面

层发送的命令 并将其分解为数据库操作指令 数据库访问层则是一些以 SQL 语句实现的存

储过程 直接作用于 SQL Server 数据库

Exam.NET 中的用户界

面层是用 WinForm 写成的

WinForm 是 .NET FrameWork 中 通过完全面

向对象的方式编写运行于

Windows 操作系统下胖客户

应用程序的编程接口

WinForm不仅可以让程序员

绕过 Win32 API 以面向对

象的方式写出优雅的应用程

序源代码 而且提供了非常

丰富的 设计器 支持 可

以大大的减少手写的代码行

数 从而缩短软件的开发周

期 减小软件开发时出现

bug 的可能性

逻辑层通过 ADO.NET与数据访问层交互 ADO.NET或其他 OLEDB 数据源的无逢

即仅在进行实际的数据库操作

据库连接在数据库服务器上是

以极大地提高数据库服务器的

数据库访问层是 SQL Serv通过使用存储过程 所有的 S的 SQL 语句提高不少 同时

以下是 Exam.NET 实现过

一 异步插件式协议处理器

前面提到过 要让 Interne式协议处理器 APP 这个特殊

我们都知道 Internet Expl是 Uniform Resource LocatorsURL 的形式为 <scheme>:<sc为 URL 中的 scheme 而 //w

在 Internet Explorer 中 当

然后到注册表中HKEY_CLAS的 CLSID 这个 COM 类就是

会把从 URL 下载资源的任务交

图 3 Exam.NET 启动画面

251

是.NET FrameWork 中的数据库访问技术 实现与 SQL Server连接 ADO.NET 体现的是一种无持续连接的数据库访问方式

的时候才与数据源建立连接 操作完后立即断开连接 由于数

一种非常昂贵的资源 通过无持续连接的方式访问数据库 可

性能 进而增强数据库系统的可伸缩性

er 中的一些存储过程 用 T-SQL Transactional SQL 语言写成

QL 语句都在数据库系统中预编译过 因此执行速度较文本方式

使用存储过程还能在一定程度上减小网络通讯量 节约网络带

程中的一些值得讨论的细节

t Explorer 从内存里读出题目内容显示出来 需要用到异步插件

结构

orer 是通过 URL 来找到需要下载的资源的位置的 URL 的全称

即统一资源定位器 在 IETF 的 RFC 1738 中定义 RFC1738heme-specific-part> 例如 http://www.ietf.org/rfc 其中 httpww.ietf.org/rfc 则是 URL 中的 scheme-specific-part

输入一个 URL 时 Internet Explorer 会提取出 URL 中的 schemeSES_ROOT\PROTOCOLS\Handler\<scheme>处找到一个COM类

一个 APP 创建出这个 COM 类的一个对象后 Internet Explorer给这个 APP 对象 下载的过程是这样的

Page 7: 网上考试系统的设计与实现 - educenter.fudan.edu.cneducenter.fudan.edu.cn/chun-tsung/paper/26网上... · 网上考试系统的设计与实现 246 网上考试系统的设计与实现

网上考试系统的设计与实现

252

1. Internet Explorer 调用 APP 对象的 IInternetProtocolInfo::ParseUrl 方法 告诉 APP 对象

资源下载的地址

2. Internet Explorer 调用 APP 对象的 IInternetProtocolRoot::Start 方法 为了不让 Internet Explorer 的用户界面因为下载尚未完成而死锁住 调用过程是异步的 因此这时 APP 应该立

即返回

3. APP 对象到 Internet 上开始下载文件

4. 接收到数据后 APP 对象回调 Internet Explorer 的 IInternetProtocolSink::ReportData 方

法 通知 Internet Explorer 可以开始读取数据了

5. Internet Explorer 调用 APP 的 IInternetProtocol::Read 方法 读取下载到的数据

6. APP 对象回调 Internet Explorer 的 IInternetProtocolSink::ReportProgress 方法 报告下

载进程

7. 重复步骤 4-6 直到文件下载完毕 此时 APP 对象回调 Internet Explorer 的

IInternetProtocolSink::ReportResult 方法 告知下载结束

8. Internet Explorer 依次调用 APP 对象的 IInternetProtocol 接口中的 LockRequestTerminate Read 和 UnlockRequest 方法 将剩下的数据全部读出

这样 Internet Explorer 把从 URL 下

载资源的任务完全交到了 APP 手中 同

时 从上面这个过程中我们可以看到

Internet Explorer并没有要求资源一定要通

过网络下载下来 这就是 Exam.NET 向

Internet Explorer 提供题目内容的方法 注

册一个 APP 对象 并在 Internet Explorer向 APP 请求下载数据时 返回保存在内存

中的题目内容

还有一点需要注意 就是除了上面讲

到的在注册表中注册 APP 的方法外

Internet Explorer还提供了另一种注册APP的 方 法 即 调 用

IInternetSession::RegisterNameSpace 方法

用这种方法注册的 APP 效果一样 但注册

后的 APP 仅在当前进程中起作用 对其他进程没有任何影响 这样 即使在其他进程的 Internet Explorer 中输入相同的 URL 也无法得到 URL 所代表的题目 从而进一步提高了系统的保密

Exam.NET 中的 APP 是在 Visual C++ 7.0 中 用 ATL 编写的一个 COM 组件 通过.NET的 COM-Interop 供 Exam.NET 使用 图 4 为 Exam.NET 中 用 APP 的方法显示保存在内存中

的题目

二 题目的压缩和解压 Zlib 是由 Jean-loup Gailly 和 Mark Adler 用 C 语言编写的通用压缩与解压函数库 遵循

RFC1950 RFC1951 和 RFC1952 中规定的压缩格式 Zlib 是开放源代码的自由软件

可以用于任何项目 包括商业应用程序 只要求在应用程序中公开说明使用了 zlib 并且指明

zlib 的出处即可 而不需像 GPL 规定的那样使用这个软件的程序都必须公开原码 因此 在

图 4 用 APP 的方法显示保存在内存中的题目

Page 8: 网上考试系统的设计与实现 - educenter.fudan.edu.cneducenter.fudan.edu.cn/chun-tsung/paper/26网上... · 网上考试系统的设计与实现 246 网上考试系统的设计与实现

复旦大学 政学者论文集 2002

253

Exam.NET 中 我们选用了 zlib 库来提供基本的压缩和解压功能

问题在于 zlib 是用 C 语言编写的 只提供了 C 语言的调用接口 而且参数复杂 容易

出错 因此 我们在 Exam.NET 中编写了一个 C++的类 CCompressedStream 将其包装起来

以方便使用

CCompressedStream 有两个构造函数 分别从未压缩的内存块和已压缩的内存块结构创建

CCompressedStream 对象 CCompressedStream::Extract 函数可以将压缩的内存块释放开 而

CCompressedStream 的 LPCSTREAM 运算符直接返回压缩好的内存块结构 包括压缩后内存

块的大小 压缩前内存块的大小 内存块的 CRC 校验等

有了 CCompressedStream 类 内存块的压缩和解压便十分简单了

CCompressedStream cs(pBuf, nSize);

一行即可完成对 pBuf 指向的大小为 nSize 的内存块进行压缩 压缩的结果可以通过把 cs强制转换为 CCompressedStream::LPCSTREAM 类型得到 用 CCompressedStream 进行内存块

的 解 压 是 通 过 下 面 两 行 代 码 完 成 的 其 中 pCompressedBuf 是 一 个

CCompressedStream::LPCSTREAM 类型的指针

CCompressedStream cs(pCompressedBuf); ULONG size = cs.Extract((LPVOID*)&pDecompressedBuf);

三 导入 HTML 页面 在 Exam.NET 中 教师可以先用任何 HTML 编辑器编辑好一道试题 然后导入到题库中

导入时 Exam.NET 必须将 HTML 文件所引用的所有其它资源一并存入一个 MHTML 文件

否则 题目中的所有图片和其他通过超链接的方式引入的信息都将丢失 Exam.NET 在此使用

了 CDO for Windows2000 组件来完成这个功能 从而避免了繁复且容易出错的 HTML 语法分

析和 MHTML 格式文件的建立

CDO 是 Collaboration Data Objects 的缩写 是 Windows 平台下用于电子邮件管理的 APIMS02 CDO for Windows 2000 是 CDO 的 2.0 版 又名 CDO SYS 已集成在 Windows 2000

或更高版本中

在 CDO 中 IMessage 接口代表一份电子邮件 其中的 CreateMHTMLBody 方法将把指定

的 URL 所指向的网页以 MHTML 的形式完整的保存下来 作为电子邮件的内容 如果要保存

的是本地硬盘上的 HTML 文件 那么只须用 file:// 形式的 URL 指定本地文件的路径即可

整个电子邮件序列化的结果可以由 IMessage::GetStream 方法得到 GetStream 返回的是一个

IStream 指针 再调用其 ReadText 方法 即可把 MHTML 的内容保存到一个字符串中 下面的

C#代码仅用 3 行便把 http://www.google.com 所指向的网页以 MHTML 的形式保存到字符串

strMessage 中

CDO.Message msg = new CDO.Message(); msg.CreateMHTMLBody("http://www.google.com", CDO.CdoMHTMLFlags.cdoSuppressNone, (string)null, (string)null); string strMessage = msg.GetStream().ReadText(-1);

不过 这三行代码仅能用于保存英文的网页 如果网页中含有中文 则用浏览器打开保

存下来的网页时 所有的中文都会变成乱码 这个问题的原因与常见的电子邮件乱码的原因

相同 早期的电子邮件服务器系统都是为英文电子邮件设计的 只支持 7bit 的 ASCII 编码

而计算机内表示汉字的机内码 无论是 GB 码还是 UNICODE 编码 都是用 8 位或 16 位来表

示汉字的 因此 在电子邮件中 如果要使用汉字 就必须对汉字编码进行某种形式的转换

Page 9: 网上考试系统的设计与实现 - educenter.fudan.edu.cneducenter.fudan.edu.cn/chun-tsung/paper/26网上... · 网上考试系统的设计与实现 246 网上考试系统的设计与实现

网上考试系统的设计与实现

254

使其只使用 7bit 的 ASCII 字符来表示 常用的编码方式有 quoted-printable base64 和 uuencode等 rfc2045 MHTML 原本是为电子邮件设计的 因此沿用了电子邮件中的这些编码方法

所以 在 MHTML 中 必须对文字信息进行编码 才能避免乱码的出现 CDO for Windows 2000已经实现了上述各种编码方式的编码 /解码器 使用时只需在 IBodyPart 接口中的

ContentTransferEncoding 属性中指明编码方式即可 由于 IBodyPart 是一个树型结构 所以设

置整个邮件的编码方式需要一个递归函数来完成 下面这个 C#函数把 body 参数所指向的邮件

中所有的文本节设置为以 quoted-printable 方式进行编码

void ChangeBodyPartEncoding(CDO.IBodyPart body) { if(body.ContentMediaType.ToLower().StartsWith("text/")) body.ContentTransferEncoding = "quoted-printable"; foreach(CDO.IBodyPart subPart in body.BodyParts) ChangeBodyPartEncoding(subPart); }

所以 导入 HTML 文件的代码修改为

CDO.Message msg = new CDO.Message(); msg.CreateMHTMLBody("http://www.google.com", CDO.CdoMHTMLFlags.cdoSuppressNone, (string)null, (string)null); ChangeBodyPartEncoding(msg.BodyPart); string strMessage = msg.GetStream().ReadText(-1);

四 编辑题目 除了能够从单独的 HTML 文件导入题目外 为

了方便教师维护题库 Exam.NET 还提供题目编辑的

功能 实际上 新的题目也可以直接用这个方法来

添加到题库

Word XP 的编辑功能十分强大 而且使用方便

容易学习 完全支持 MHTML 的编辑 所以

Exam.NET 使用 Word XP 作为题目的编辑器 Word XP 是以一组 COM Automation Interface 来提供其编

程接口的 通过这些接口 Exam.NET 接管了 Word XP 中的存盘操作 使 Word XP 中编辑的题目在存盘

后立即更新到题库

Word XP的Automation接口在与.NET集成时有

一些问题 这些问题直到 Word XP 的 SR-1 版本才得

以修正 因此 Exam.NET 需要安装 Word XP 的 SR-1或者以上版本才能提供内置的题目编辑功能

图 5 为 Exam.NET 驱动的 Word XP 进行题目编

辑时的窗口 修改后的结果立即在 Exam.NET 中显

示出来 图 6

展望 这个版本的 Exam.NET 只实现了单机版的数据

库管理 教师只要使用 Exam.NET 连接到数据库 就

图 5 用 Word XP 编辑题目

图 6 编辑后的题目立即更新到题库

可以管理数据库里面的所有信息 包括

Page 10: 网上考试系统的设计与实现 - educenter.fudan.edu.cneducenter.fudan.edu.cn/chun-tsung/paper/26网上... · 网上考试系统的设计与实现 246 网上考试系统的设计与实现

复旦大学 政学者论文集 2002

255

所有系的题库 教师信息 学生信息 学生选课等 再以后的版本中 我们可以在 Exam.NET中加入权限管理功能 使教师只能管理自己的题库和课程 并且让多个教师可以同时在不同

的计算机上通过 Exam.NET 连接到数据库 对题库进行修改 维护

如果学校并无一个可集成的校园信息管理系统 那么下一个版本的 Exam.NET 中就应该

把所有关于校园信息管理的部分独立出来 成为一个单独的系统 例如 Campus.NETExam.NET 从 Campus.NET 获取所需的信息 并在必要时更新 Campus.NET 中的信息 它们之

间通过.NET Remoting 的方式进行通信和功能调用 同时 Campus.NET 也用 Web Service 的方

式提供信息发布和功能调用的接口 这样 其它传统的应用程序如在线成绩查询系统 就可

以通过 Web Service 的方式从 Campus.NET 中获取成绩信息 而几乎不用更改原来写好的程序

参考文献

RFC1738 Uniform Resource Locators (URL), IETF RFC, http://www.ietf.org/rfc/rfc1738

RFC1950 ZLIB Compressed Data Format Specification version 3.3, IETF RFC, http://www.ietf.org/rfc/rfc1950

RFC1951 DEFLATE Compressed Data Format Specification version 1.3, IETF RFC,

http://www.ietf.org/rfc/rfc1951

RFC1952 GZIP file format specification version 4.3, IETF RFC, http://www.ietf.org/rfc/rfc1952

RFC2045 Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies, IETF

RFC, http://www.ietf.org/rfc/rfc2045

RFC2557 MIME Encapsulation of Aggregate Documents, such as HTML (MHTML), IETF RFC,

http://www.ietf.org/rfc/rfc2557

MS00 Choosing an Edition of SQL Server 2000, MSDN Online,

http://www.microsoft.com/sql/techinfo/planning/ChoosEd.doc

MS01 About Asynchronous Pluggable Protocols, MSDN Online,

http://msdn.microsoft.com/workshop/networking/pluggable/overview/overview.asp

MS02 About CDO for Windows 2000, MSDN Online,

http://msdn.microsoft.com/library/en-us/cdosys/html/_cdosys_about_cdo_for_windows_2000.asp

DR96 Inside COM, Dale Rogerson, Microsoft Press. (COM 技术内幕 杨秀章译 清华大学出版社)

BR99 ATL Internals, Brent Rector & Chris Sells, Addison-Wesley Press. (深入解析 ATL 潘爱民译 中国电

力出版社)