朱克武
(广东食品药品职业学院,广东 广州 510520)
目前,Office办公软件考试系统非常成熟,都实现了联网考试,由一台服务器和若干台客户机组成,一般一个服务器可以带200个客户端。例如:广东省考试中心的计算机水平一级考试系统、无忧公司制作的Office办公软件考试系统、广东省劳动厅的计算机水平考试系统等。
这些网络考试系统都由服务器和客户端两部分组成,需要在一台教师机上安装服务器程序,并配置服务器的相关参数,如HTTP服务器的IP地址和端口、FTP服务器的IP地址和端口等。学生机不需要安装客户端程序,学生可直接在客户端使用IE浏览器登录。
学生登录服务器后,由服务器分发考生的试卷。在考试过程中,服务器及时接收学生机上传的数据;如果学生机掉线,服务器能够及时了解是哪个客户端掉线;如果学生机死机重新启动,再次登录服务器后,服务器会回传该学生所做的内容,文件不会丢失。在考试过程中,系统自动计时,考试时间到服务器会自动停止考生的操作,即客户端停止答题。在学生关闭Word、Excel等应用程序后,客户端自动上传数据,上传完成后,会自动删除客户端的考生文件夹,不会留下相关的考试信息。
本网络考试系统借鉴了这些优秀的考试系统,设计相关的界面、对应的功能。系统采用Visual Studio 2005、Access等编程软件进行设计。
上述3种办公软件网络考试系统中,考生在客户端使用IE浏览器登录服务器,登录成功后,从服务器端下载考试数据到客户端。下载完成后,自动启动考试程序,显示考试的题目。在考试过程中,每隔一段时间上传考试数据到服务器,考试结束后,上传数据,并删除考试信息。
在服务器端的ASP NET网页中,可以调用服务器组件来实现相关的功能,服务器组件具有集合、属性和方法,创建一个服务器组件对象,通过该对象可以访问组件中的集合、属性和方法。
服务器端与数据库的连接,服务器最基本的功能是连接数据库,实现数据库中数据的添加、修改、删除、浏览、查找等基本功能。
服务器端要实现文件管理功能,可以使用文件系统对象或FileInfo对象。文件系统对象(FileSystemObject)位于Scripting类型库中,在安装Windows系统时,系统会自动在WindowsSystem32目录中生成scrrun.dll文件。在该文件中,引用Scripting类型库,可以声明一个文件系统对象的类型。创建一个文件系统对象,通过该对象,可以获得驱动器的信息、创建文件或文件夹等有关文件和文件夹的各项操作。在一个网页界面中,通过调用文件系统对象,就可以完成对文件或文件夹的操作。用户在客户端就可以对服务器上的文件或文件夹进行操作,非常方便用户管理服务器。这里不存在服务器安全的问题,因为只有服务器管理员才拥有修改服务器文件或文件夹的权限,其他用户没有这种权限。
服务器端要实现下载的功能,是通过内置对象Response的AddHeader方法设置HTTP标头名称和值实现的。具体实现的方法是,先添加HTTP标头信息,再写入文件内容。Response.AddHeader(“Content-Disposition”,”attachment;filename= ” +file.name),其中,第一个参数是设置的HTTP标头的名称,第二个参数是标头的值。Response.WriteFile(file.FullName),将指定文件的内容发往客户端,实现文件的下载。
在客户端首先需要实现文件管理功能,如果没有考试目录,需要创建一个考试目录。安装Windows系统时,同样要有scrrun.dll文件,使用IE浏览器上网,可以浏览服务器上提供的各种信息,如果服务器提供了上传和下载功能,客户端可以向服务器上传数据,也可以从服务器下载数据到客户端。例如:浏览新浪的网站,只能浏览网站提供的各种信息,但是没有权限删除某个页面文件,也不能删除网页中的某个图片,即普通用户只有读的权限,没有修改、删除的权限。而网站的管理员则拥有修改、删除的权限,可以对服务器上指定的文件进行各种操作。但是,服务器不能对客户端上的文件或文件夹进行修改,否则上网的用户,他的电脑上的所有个人信息就全部暴露在服务器的面前,没有安全可言。在一个页面中,不能像服务器端那样,创建文件系统对象,虽然存在scrrun.dll这个文件,但是不能调用,这就是出于客户端安全性的考虑。因此服务器不能对客户端的文件或文件夹进行任何管理,没有这样的权限。然而计算机病毒的传播就是利用Windows系统的漏洞,达到对客户端控制的目的。
由于IE浏览器的限制,人们可以上网浏览服务器上提供的信息,而服务器不能对客户端的文件进行任何操作。通过编程,有多种方法可以实现服务器对客户端的文件进行管理。方法一是编写一个ActiveX控件,在控件中实现对文件的各种操作、文件读取、上传等功能,然后在页面中,通过JavaScript脚本调用该控件,实现对客户端的管理。方法二是利用msadco.dll的漏洞进行处理,首先创建一个对象,obj=document.CreateElement(“object”),设置对象的属性为msadco.dll的 classid,obj.SetAttribute(“classid”,ID的数值),obj对象相当于服务器的内置对象Server,使用它能够创建各种组件对象。obj.CreateObject(“Microsoft.XMLHTTP”,””),创建一个 xmlhttp 对象,可以从服务器上下载文件,obj.CreateObject(“ADODB.Stream”,””),实现文件的读写操作,obj.CreateObject(“Scripting.FileSystemObject”,””),该对象可以对文件进行管理,即创建文件或文件夹、设置属性、删除、更名等有关文件管理的操作,它都能够实现,功能非常强大。通过这3个对象的使用,基本上就能够满足网络考试系统客户端的要求。
客户端的文件上传,一般可以使用文件上传控件。但是该控件需要指定具体的文件,单击上传按钮,才能触发文件的上传,即文件上传时需要用户参与,而考试时文件的上传不需要考生参与,考生只负责做题目,不可能让考生每做完一道题目就上传一次。因此,使用文件上传控件的方法不可行。
在实际使用过程中,第一种方法编程的难度有些大,第二种方法会被杀毒软件查杀,而且Windows系统已经修复这些漏洞,因此不太容易实现。
服务器端由于可以使用Server对象,能够满足网络考试服务器系统的要求,但是客户端不能创建有关文件系统对象、数据流对象,因此无法实现文件的操作,无法实现网络考试客户端的要求。
因此,本办公软件网络考试系统采用C/S结构,服务器处于不断侦听和接收状态,每接收一个客户端,就分配一个Socket与客户端关联,通信双方使用Socket进行联系。
服务器端的设计包括用户登录、题库分发、考生信息显示、接收上传数据等部分。重点是服务器上的数据下载到客户端,客户端的数据上传到服务器。
首先,客户端的程序必须具有文件操作的功能,因为在考试之前,客户端并不存在考生这个文件夹,需要创建这个文件夹,然后才能把服务器上的数据下载下来。第二,一个文件要上传,必须有该文件的完整路径,否则读取文件失败。第三,考试系统的界面必须一直在最前面,需要调用API函数。
数据库采用Access,因为办公软件考试系统涉及的内容不是很多,主要有考生信息、客户端信息、考试题目信息等,属于一个小型数据库,所以使用Access完全能够满足网络考试系统的要求。
并不是每个教师都了解和会使用Access应用程序,而Excel应用程序是很多教师都会使用的。因此为方便教师的使用,在系统中需要设计一个功能,将含有考生信息的Excel文件转换为Access数据库中的一个考生信息表。方法是创建一个考试信息表,一般4个字段:班级、学号、姓名、考试科目。然后读取Excel表中的内容,该表中的字段与信息表中的字段名称要一致,否则无法读取,字段的顺序可以不同。将读取的每一行数据写到信息表中,循环读取,直到最后一条记录。
首先读取客户端传来的“学号”数据,然后读取考试信息表,判断是否有该学号,有则回传登录成功信息;无,则该学号不正确或没有该学号,回传登录不成功的信息。这时在客户端,考生需重新登录,或由教师在服务器上添加该考生的相关信息。考生登录不成功,服务器不会将考试的相关信息下载到客户端,该考生无法参加考试。
教师必须事先准备好题目,题目由6个部分组成,分别是:理论题、Windows操作题、Word操作题、Excel操作题、PowerPoint操作题和网络操作题。操作题一般是根据知识点进行设计,例如Word操作题就包含字体、段落、项目符号、分栏等近30个知识点,Word的字体主要有:字体、字形、字号、字体颜色等。要考Word的字体这个知识点,可以出一道字体的题目,也可以出多套字体的题目。如果只有一道字体的题目,则在所有考生的试题中,都包含该道题目;如果有多套字体的题目,则通过一些算法,使这几套题目均分到考生的试题中,要求相邻的两个考生题目不同,目的是防止考生考试作弊。
考生登录成功后,服务器向该客户端发送考题,即下载考题资料到客户端。考题资料分为两个部分:(1)考试的素材,即:Windows文件夹、Word文件、Excel文件、PowerPoint文件、网络题的文件,要有具体的素材,否则考试无法操作;(2)题目的内容,它存在一个Access文件中,客户端使用数据库系统,通过读取mdb文件中的内容,在客户端界面上显示题目。
在考试过程中,要能够及时反映考生的考试状态,即是否保持网络的连接、是否断线,断线的时间是多少等,让教师能够及时掌握考试的情况。每隔三分钟向服务器发送一次信息,收到该信息表示连接正常,没有收到表示断线,记录断线的时间,在服务器的界面上显示出来,提醒教师对断线的机器进行处理,重新打开IE浏览器、重启系统、或更换到另一台机器等,目的是解决网络不通的问题。
考生上传的数据是放在服务器端的数据库中,不能上传文件,因为每上传一个文件,就需要把原来的文件删除或覆盖,服务器将不断地处理这些文件,影响了服务器的工作效率,因此改用数据库处理就非常方便。一个文件对应一个字段,该字段使用备注类型,长度为65536个字符,一般Word等考试文件的长度不超过40k,使用一个字段就能够满足存储一个文件的要求。
在接收考生上传的数据中,首先要说明是哪个考生,上传的是哪个文件,然后接收该考生的文件内容,查找数据表中该考生的信息,将收到的数据替换原有的数据,实现数据的更新。
如果要简化网络考试系统,数据上传的操作可以省略。在客户端设置考试的时间,时间到考试结束,压缩考生文件夹,上传压缩文件,该压缩文件就是最终考试的结果。上传数据的目的就是考生换机后,服务器将考生的考试信息下载到他所在的机器上。电脑死机时,如果文件保存的话,文件就不会丢失,重新启动后,考生文件夹下的内容是不变的,因此如果不考虑学生换机这个因素,上传数据这步可以省略。
考试结束,接收所有考生的文件,修改考生考试的状态,由“考试中”状态更改为“考试结束”。客户端系统退出,停止运行,而服务器端的考试系统还处于运行状态,客户端再次登录时,服务器还会接收登录信息,判断该考生是“未登录”、“考试中”、“考试结束”,根据数据库中考生信息的状态进行分析,对客户端作出相应的回应。
客户端的设计包括考试计时、考试界面、数据上传等操作。首先,考生登录界面,输入学号,单击“提交”按钮,将考生信息上传到服务器。其次,考试系统运行时,在考试界面上,显示考试的时间,使用到计时的方式,一分钟计时一次。
客户端的界面分两种情况设计,考理论题时是一个满窗口的界面;考操作题时,界面是固定大小的,占整个窗口的六分之一或更小,一般只显示一道题目的内容,目的是考试界面不要影响考生对文件的操作。
客户端的界面要一直处于最前面,没有最小化、最大化,调用API函数SetWindowPos,可以实现这个功能。
客户端每3分钟上传一次数据,这个时间并不是固定的,可以人为作出调整。时间不能太短,否则客户端会不断上传数据;时间也不能太长,如果客户端出现断线、死机等情况,上传的数据就不及时,即客户端的数据和服务器中的数据没有保持一致,即考生做的内容没有及时上传,会导致数据丢失。
客户端数据的上传有两种方式,一种是以文件的形式保存,一种是以数据库的形式保存。这两种形式都需要,只是用在不同场合。
客户端和服务器都需要对文件进行管理,如创建文件或文件夹、查看文件或文件夹的属性等各项操作。
每次上传时,并不是把所有的内容都上传,因为有的题目没有做,它的内容没有改变,上传没有意义;有的题目做了,内容上传了,但是在上传之后的一段时间内,没有对它进行任何操作,此时文件的内容与数据库中的内容是一致的,再上传也没有意义。如果文件的内容与数据库的内容没有变化,就不需要修改,因此要对上传的文件进行判断,即该文件是否发生变化,如何判断文件是否发生变化,可以根据该文件的最后一次修改时间来判断。
操作题做完必须关闭,因为一个文件在使用时,另一个进程是无法打开该文件,并对该文件进行读取、写入、更名等操作。因此,必须等该文件被关闭,才可以对它进行操作。
Windows操作题主要是判断文件或文件夹的创建、删除、移动、复制、更名、创建快捷方式、属性7个内容。文件的创建可以是任意文件类型,如文本文件、压缩文件等。一般都会考学生文本文件的创建,并打开该文本文件,在里面输入一段文字,并保存退出。因此,需要一个字段保存有关文本文件的内容。
Windows操作题上传的内容,根据要考核学生掌握的知识点,一般情况下,需要以下内容:文件或文件夹的名称、属性。因为创建、删除、移动、复制、更名、创建快捷方式都涉及文件或文件夹的名称,根据名称就可以判断是否进行相关的操作,例如要创建一个文件,有了该文件,并且路径正确,则该题操作正确;如果没有该文件,则该题操作错误,其它的知识点操作类似。属性涉及只读、文档、隐藏等内容,根据属性的内容,就可以判断属性知识点的操作。
在设计题目时,文件夹的深度一般不超过5层,当然也可以有多层,只是增加了程序的复杂性。一个文件夹含有多级子文件夹,目的是考核学生掌握搜索这个知识点的程度。掌握Windows的搜索操作,要很容易找到指定的文件或文件夹,不管它在哪个位置。文件夹超过五层也没有太多的意义,因此,在设计题目的时候,假定文件夹的最大深度为五层。
根据上述分析,Windows操作题上传的内容的组成包含:上一级文件夹的序号、本级文件夹的序号、本级或文件夹的名称、文件还是文件夹、属性。使用文件系统对象,递归的方式读取Windows操作题上的每一个文件和文件夹,将读取的每一项内容存放到数组或指针中,递归结束后,将该内容上传。
Word操作题、Excel操作题、PowerPoint操作题的操作类似。以 Word操作题为例,首先,需要判断Word应用程序是否在使用该题,如果Word里面有这道题目,说明该文件正在被Word操作,不能对该文件再次打开,也就是不能上传该文件。如何判断该文件是否被Word打开,可通过API函数FindWindow来判断Word是否在运行,如果在运行,读取Word的标题,因为标题就是文件名,即可判断文件是否在使用。
读取指定的文件到一个字符数组中,上传数组中的内容到服务器,服务器接收数据,将数据存入数据库。上传的文件就不压缩了,压缩以后还需要再解压,增加了系统的复杂性,当然,也可以先压缩该文件,再上传,文件的大小肯定会减少很多,减轻了服务器的负担,也减少了数据库存储字段的容量。
网络操作题一般是把网页文件另存为文本文件、把网页文件中的图片另存、申请一个邮箱、使用Outlook Express发送一封邮件等。文本文件、图片文件是一个文件,与Word的操作类似,上传该文件靠数据库即可。邮箱需要上传各个字段中的内容,例如:上传姓名、密码、确认密码等字段的内容,注意各个字段之间的分隔,不能不加区分地把所有字段的内容放在一起。Outlook Express发送邮件,需要配置邮箱服务器,本系统没有实现邮箱服务器的功能,需要考生保存要发送的邮件,扩展名为eml,读取该文件,可以获取收件人、主题、正文等信息,而这些信息正是考核的要求,因此使用保存邮件的方法,实现对邮件的考核。
考生单击“交卷”按钮,表示考试结束;或考试的时间到,考试结束。首先,需要把Word等应用程序关闭,如果没有关闭,表示某个文件还在继续使用,WinRAR程序在压缩这个文件时,会提示压缩失败,导致整个考生文件夹压缩的失败。其次,压缩整个考生文件夹,生成一个rar压缩文件,不是一个一个文件上传,而是压缩后的一个文件。读取该文件,将它上传到服务器,修改考生的考试状态。第三,删除考生文件夹,包括该文件夹下的所有文件和子文件夹,避免考试信息泄漏。
学生再用学号登录时,服务器根据考试状态,判断该考试是否考试结束,如果考试结束,则在客户端的界面上提示考试结束。
办公软件网络考试系统是一个非常复杂的系统,涉及的内容比较多,有文件管理、SQL数据库知识、Excel的应用、Socket套接字、WinRAR压缩和解压、进程和线程的管理等多方面的知识,重点和难点是网络通信,即Socket套接字的使用,如果没有套接字,也就不称为网络考试系统了,是一个单机版的系统。本系统还需要解决侦听数目的问题,一般是10个,如果同时有20个客户端要求连接,则只有排在前面的10个给处理,出现客户端连接慢的现象。本系统还需要解决连接客户端个数的问题,由于没有采用线程池技术,最多可以连接64个客户端。总之,网络考试系统需要考虑的问题非常多,本系统主要是解决上传和下载的问题,基本上实现了网络考试的功能,达到了预期的设计目标,在系统运行的过程中,还会出现各种各样的问题,需要不断地完善。
[1]杜少杰.基于形式语言的Word操作题自动阅卷方案及其实现[J].唐山师范学院学报,2006,28(2):78-79.
[2]李爱玲.基于VBA的Word文档自动评阅技术研究[J].科学技术与工程,2008,8(17):83-85.
[3]周建良.基于WinPcap库的通用程序设计模型[J].计算机系统应用,2007,11(2):83-85.
[4]朱耀强.Word操作题自动阅卷功能的实现[J].宁波职业技术学院学报,2007,11(2):811-812.
[5]刘中宇,黄福君,等.PowerPoint操作测试自动评价技术研究[J].计算机技术与发展,2009,19(2):237-239.
[6]吴丰科,苏厚勤,朱汉群.Excel对象模型在统计报表中的应用研究[J].计算机应用与软件,2009,26(2):201-204.
[7]吴亚坤,郭海旭.Office文档自动评分的研究与实现[J].辽宁大学学报,2008,35(4):334-337.
[8]李文江.利用VBA实现对Word文档的自动评分[J].重庆文理学院学报,2007,26(2):73-77.
[9]赵晓峰,肖丹.基于XML与ACTIVEX技术的Office操作自动评分系统[J].计算机与数字工程,2006,34(12):178-180.
[10]李菲.考试系统中Excel操作题自动阅卷的实现[J].辽宁师专学报,2009,11(1):46,97.
[11]邵小兵,廖慧芬.Office实践操作自动评分的实现[J].计算机与现代化,2005(12):135-136.
[12]邓振杰,李瑛.Visual Basic程序设计实用教程[M].北京:中国铁道出版社,2010.
[13]周晓宏.Visual Basic 6.0程序设计实用教程[M].北京:高等教育出版社,2007.
[14]孙俏.Visual Basic 6.0程序设计[M].北京:中国铁道出版社,2011.
[15]刘炳文.Visual Basic程序设计教程[M].北京:清华大学出版社,2005.