随着计算机网络技术和数据库技术的飞速发展,高校的信息化建设进程日益深入,其中数字化校园建设成为其核心内容。纵观全国各高校的数字化校园建设,大多以建设数字化网络环境、数字化教学资源、数字化教学与学习环境、数字化管理手段和工作环境;实现数字化科研和管理;创建数字化生活空间;实现教育的信息化和现代化等为最终目标[1]。为推动数字化校园建设进程,创建数字化教学环境,开发出适用于多学科的计算机在线考试软件系统。通过此软件可以实现多学科网上在线考试,既能把教师从繁重的批阅试卷、复核试卷、试卷分析等工作中解放出来,又免去了印制纸质试卷、按考场分发试卷、纸质试卷保存等很多繁重工作,而且提高了试卷的保密性。
1 C/S模式的多层结构
C/S模式是一种普遍应用的网络计算模式。传统的C/S模式是两层结构,在这种模式下,网络中的计算机分为两个有机部分:客户机和服务器。服务器只负责各种数据的处理和维护,为各个客户机应用程序管理数据;客户机包含文档处理软件、决策支持工具、数据查询等应用逻辑程序,通过网络使用SQL语言发送、请求和分析从服务器接收数据。这是一种“胖客户机(Fat Client)”、“瘦服务器(Thin Server)”的网络结构模式。随着C/S结构应用范围的不断扩大和计算机网络技术的发展,这种结构的缺陷日益明显,如系统的可靠性有所降低、缺乏灵活性、资源浪费严重、维护费用较高等[2]。
为解决这一问题,网络计算模式逐渐从两层扩展到N层,形成多层结构。在多层结构中把业务逻辑独立出来,使得应用系统的开发模式变为下面形式:
(1)客户端。只注重人机界面的设计,不必关心业务逻辑和数据库的访问,使开发大大简化,并且使得原两层结构的胖客户机变成瘦客户机。
(2)中间业务逻辑层。提供客户端程序调用的业务逻辑规则,以完成其业务操作。当业务逻辑改变时,客户端不必改变。
(3)数据库服务层。提供对数据库进行各种操作的方法,由中间业务逻辑层调用完成业务逻辑。
可以看出,在多层结构中,层次划分不是物理上的划分,而是结构逻辑上的划分,即按应用目标划分。如果客户端要求响应速度很快,业务组件的体积较小,业务组件可以放在客户端;如果业务组件包含大量对数据库的操作,可以配置在数据库服务器上,以减少网络负载,提高运算速度;如果业务组件可供大多数客户机程序访问,则可以使用业务组件构成一个应用服务器,供大家访问。由于多层结构的运行机制,使得多层结构具备以下优点[3]。
(1)可伸缩性好。可按应用要求部署逻辑层次,适应于本地网和广域网。
(2)网络效率高。通过合理布局,因网络传输的数据量大大减少,网络效率得到提高。
(3)可管理性强。客户端基本实现“零维护”,主要管理工作集中在应用逻辑层,业务逻辑的修改对客户端没有影响。
(4)可重用性好。按可提供的服务构筑应用,每种服务可以被不同的应用再次使用。由于系统采用面向对象的组件构成,进一步增加了可重用性。
2 系统需求分析
数字化教学环境是学校数据化校园建设的重要组成部分。而数字化教学环境以建立网上教务管理系统、网上考试系统、网上答疑系统和网上讨论系统等为主要内容。目前,已实现网上教务管理、网上答疑和网上讨论目标。为实现网上考试目标,探索开发适用于多学科的计算机在线考试软件系统成为关键。要开发出适用于多学科的平台型计算机在线考试系统,首先对试题内容、试题形式、评分标准、试题数量、试卷分析等问题要进行周密的考虑,据此设计出一种能够适用于多学科的平台型试卷模板,在网络环境正常运行的前提下,实现网上在线考试。通过该考试系统,完成自动抽取试卷、自动批阅试卷、自动回收成绩、自动分析试卷、打印成绩单等功能。针对软件系统的功能和性能等实际需求,设计服务器开发环境采用安全性较高稳定性较好的数据服务器SQL Server 2000,采用Windows 2003 Server 作为服务器操作系统,C/S结构前端采用Borland Delphi 7作为开发工具[4]。
3 系统功能设计
在需求分析的基础上,确定计算机在线考试软件系统包括服务器管理、学生管理、考试管理、题库管理、自动阅卷、试卷分析和系统维护等功能,其软件结构图如图1所示。
由于软件系统中的服务器要同时与大量的考试终端发生信息交互,为了避免由于服务器处理负荷过重而引起的系统崩溃,同时要保证整个系统在网络环境中的安全性,设计采用C/S模式多层网络计算模式。通过将任务合理分配到客户端和服务器端,再充分利用两端的硬件环境优势,提高系统的整体数据处理效率并实现考试终端和管理中心的双向通信。软件系统客户端运行时的主界面如图2所示。
4.1 中间业务逻辑层设计
中间层服务器是系统设计的关键,在中间层上设计了大量的远程方法供客户端调用,这种方式称为“瘦客户机,胖服务器”模式。使用该模式,当客户功能有所变动时,只需更改中间层上的方法,而不用重新分发客户端。在Delphi7中使用DataSetProvider控件提供RPC服务,对于客户端的每一个操作,都可以通过在中间层服务器中设计相应的方法实现[5]。在中间层设计的两个主要方法如下:
(1)function ExeClientSQL(const MySql: WideString): WordBool; safecall;
//执行SQL的更新、插入、删除等操作,返回是否成功;
(2)function GetClientData(const MySql: WideString): OleVariant; safecall;
//执行SQL的查询操作,返回查询结果。
4.2 软件系统的主要技术特点
(1)考试时由考生随机抽题组卷,同时确保相邻考生抽取不同的试题。实现该功能的存储过程如下:
CREATE PROCEDURE cp_Paper_Sel
@tblDL char(20),
@MyPrior int,
@MyNext int,
@MyKM char(30)
AS
exec(′select top 1 套题编号,套题名称 from tblcrecord where 套题编号 not in
(select 套题编号 from ′+@tblDL+′ where IP序号=′+@MyPrior+′or IP序号=′+@MyNext+′) and 科目名称=‘’‘+@MyKM+’‘’and 是否抽取=′′是′′ order by newid()′)
GO
(2)IP安全技术:考试系统中将考试IP限定在某一区域内,如192.168.36.1到192.168.36.200,可以防止在考场外进行替考,同时在考试时通过“禁止未登录考生参加考试”功能,在考生登录之后进一步避免了场外替考现象的发生。此外,将考生考号和考生机器IP地址进行绑定,考生在考试过程中,只能在一台计算机上答题,以防止考生之间相互换题等作弊行为。当考生登录到考试系统以后,将考生机器IP地址写入考生信息表以及登录IP表,防止一个考号在两台机器上登录。
//检查是否同一IP登录
with cds2 do
begin
Close ;
SQL。Clear ;
SQL.Add(′exec sp_Query_All:fldName,:tblName′);;
Params.ParamByName(′fldname′).Value :=′*′;
Params.ParamByName(′tblName′).Value:=
dm。tblDL+′ where登录IP='''+dm。MyIP+''';
try
Open;
if recordcount<>0 then
begin
sMessageDlg(′警告′,′无效的考试请求!′,
mtWarning ,[mbOK],0);
exit;
end ;
except
raise ;
end;
(3)考试时间限制:考生第一次取题开始计时,到规定的时间结束,考生只有在该时间内可以取题,其他时间都不能取题,计时由服务器完成,同时,若考试过程中由于意外情况导致考试终止时,监考老师可以通过输入二次答题密码的方式让考生继续答题,从而实现考生考试时间的公平性,又加强了试题的安全性。
(4)大量应用存储过程,保障系统的快速反应和高效运行。例如,将考生抽取的试题加入到考试数据库中的存储过程:
CREATE PROCEDURE cp_Paper_Add
@tblKS char(20),
@MyNo char(10),
@Mynum char(20),
@Mytbl char(10)
AS
exec(′insert into′+@tblKS+′ (学生学号,套题编号,试题序号,试题内容,试题答案,试题分数,是否答题,套题名称,考试科目,试题类型,学生分数,类别序号) select '''+@MyNo+''','''+@Mynum+''',试题序号,试题内容,试题答案,试题分数,′′否′′,套题名称,科目名称,试题类型,0,类别序号 from ′+@Mytbl+′ where 套题编号='''+@mynum+''')
GO
(5)数据加密功能。软件系统中使用了关键数据加密和数据库动态加密两种技术。对于考试系统中的重要数据使用关键数据加密技术,如试题库中的试题采用加密的方式存储,用户登录时的密码加密后保存到数据库中,以免被他人获取并泄漏。而用户每次登录数据库时,系统都会自动修改数据库密码并进行加密存储,这样使得数据库密码具有不确定性,大大增加了数据库的安全性,实现数据库动态加密[6]。
(6)试题录入功能独立于主系统。将试题录入功能与主系统分开,既保障了系统的安全性,又方便教师进行试题录入。通过设置登录账号和录入科目,限制教师只能在指定时间内根据指定的验证码录入指定科目试题,增加了题库的安全性。
采用C/S模式多层结构开发数据库应用系统,比传统的C/S模式结构有着无法比拟的优势。该软件系统主要采用了多层结构使得业务逻辑从客户端分离出来,在最为关键的中间层上,设计了大量的远程方法供客户端调用,从而形成“瘦客户机,胖服务器”模式,不但很好地实现了软件系统的各项功能,而且简化了程序设计,大大减少了网络流量,从而提高软件系统的运行效率、可维护性和整体性能。