基于B - S结构的程序设计竞赛自动测评系统的设计-_第1页
基于B - S结构的程序设计竞赛自动测评系统的设计-_第2页
基于B - S结构的程序设计竞赛自动测评系统的设计-_第3页
基于B - S结构的程序设计竞赛自动测评系统的设计-_第4页
基于B - S结构的程序设计竞赛自动测评系统的设计-_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、计算机与现代化2007年第12期J I S UANJ I Y U X I A NDA I HUA总第148期文章编号:100622475(20071220109203收稿日期:2006211214作者简介:郑传生(19782,男,广东澄海人,汕头大学计算机系助理实验师,研究方向:计算机网络技术。基于B /S 结构的程序设计竞赛自动测评系统的设计郑传生(汕头大学计算机系,广东汕头515063摘要:基于L inux 操作平台采用CGI 程序设计,按照国际大学生程序竞赛的标准和规则,本文实现了程序设计竞赛系统的基本功能,从提交的程序源代码到自动测评并返回结果,测评过程包括对程序源代码的编译、连接、运

2、行、测试、评审等。从而达到举办网上程序设计竞赛的目的,体现出自动化、高效率、公正性等特性。关键词:自动测评;B /S 结构;CGI中图分类号:TP311.52文献标识码:AD esi gn of Automa ti c Test and Judge Ba sed on B /S Arch itectureZ HE NG Chuan 2sheng(Depart m ent of Computer Science,Shant ou University,Shant ou 515063,China Abstract:Based on the L inux syste m and using the

3、CGI p r ogra mm ing interface,according t o the standard and rule of the interna 2ti onal university students p r ogra mm ing competiti on,this paper realizes the basic functi on of a p r ogra mm ing competiti on syste m,including aut omatically evaluates the s ource code which sub m its t o it t o

4、test and returns the testing results .The evaluating p r ocess includes the s ource 2code translati on,the linking,the i m p le menting,the testing,the app raisaling and s o on .Thus it can achieve the goal of holding on 2line p r ogra mm ing competiti on,manifesting many characteristics such as aut

5、 omati on,the high efficiency,fair and s o on .Key words:aut omatic test and judge;B /S structure;CGI0引言美国计算机协会(AC M 组织的国际大学生程序设计竞赛(AC M /I CPC 是目前世界上规模最大的计算机学科赛事。该项赛事发起于1977年,其宗旨是:为高等学校的大学生提供一个展示自己在计算机编程解题方面才能的机会。通过竞赛使学生相互交流学习经验,为信息学科的发展不断注入新的活力,该比赛逐渐风靡全球高校。为了提高竞技水平,迫切需要一套完备的自动化系统辅助竞赛的日常训练和模拟竞赛。本文提

6、出了基于B /S 三层网络结构,辅助程序设计竞赛开展的自动测评系统,给出了整体规划与设计方案,使用相关的开发工具实现了系统的构建,并投入运转使用。系统主要应用于日常编程训练及各类网上程序设计竞赛活动,旨在为此类活动提供一个良好的环境和界面,使得更容易组织实施,达到良好的效果。1设计竞赛自动测评系统总体框架本系统是基于Red Hat L inux 9.0操作系统平台开发的,采用B /S 三层网络结构设计,中间层应用程序采用CGI 编写,数据库采用MyS QL,自动测评的守护进程是用C 语言编写,网站发布使用Apache 服务器。本系统功能模块分为前台信息模块和后台管理模块。前台信息模块功能有信息

7、浏览(包括用户信息、目录信息、题目信息、状态信息、竞赛信息等、用户登录、用户信息修改和提交题目。在前台子系统中,用户必须注册为本系统的用户,并且登录后才能完成用户信息修改、提交题目等功能。后台管理模块主要负责对整个系统的管理,包括题库中卷的管理、题目的管理,以及各类竞赛的创建等。后台处理程序还负责对前台用户所提交的代码进行运行处理,并向前台返回状态信息。系统总体框架如图1所示。110计算机与现代化2007年第12期 图1系统总体框架2系统设计2.1数据库设计系统中的表主要有:用户信息表、题目信息表、试卷信息表、状态信息表、竞赛信息表、竞赛题目信息表、竞赛状态表等。其中较重要的有题目信息表和状态

8、信息表,结构如下: 表1题目信息表变量名称说明数据类型Pr oble m I D题目编号I nt (16Not Null 主键Title 标题Varchar (32Content 题目内容B l ob Data 测试数据B l ob Result 测试结果B l ob M e mory 内存要求I nt (16Ti m e L i m ited 时间限制I nt (16Up l oad Date 上传时间DateTi m e Volu me I D 卷编号I nt (16Shows 显示情况I nt (16default 0B r owseTi m es浏览次数I nt (16default

9、0表2状态信息表变量名称说明数据类型Code I D 代码编号I nt (16auto_incre ment Pr oble m I D 题目编号Int (16U serI D 用户名Varchar (32Sub m itTi m e 提交时间DateTi m e CodeContent 代码内容B l ob Language 编程语言I nt (16Status 运行状态I nt (16RunTi m e 运行时间I nt (16Run Me mory运行内存I nt (16 2.2前台信息模块前台信息模块功能有信息浏览(包括用户信息、目录信息、题目信息、状态信息、竞赛信息等、用户登录、用户

10、信息修改和提交题目。在前台子系统中,用户必须注册为本系统的用户,才能完成用户信息修改、提交题目等功能,前台操作流程如图2所示。信息浏览的实现主要通过CGI 程序访问MyS QL 数据库,从对应的表中取出数据返回给用户。2.3后台管理模块后台管理模块主要负责对整个系统的管理,包括题库中卷的管理、题目的管理,以及各类竞赛的创建图2前台操作流程等,后台管理流程如图3所示。图3后台管理流程2.4守护进程守护进程是采用C 语言编写的,主要工作是接收客户端I E 浏览器通过中间层的CGI 程序提交到数据库的数据,选择适当的数据,投入自动测评的全过程,包括:编译、链接、运行、测试、评审、返回结果等一系列操作

11、。守护进程在未接到工作任务时,处于睡眠状态,等待相关用户请求进程发送消息信号,唤醒后转入运行状态,题目提交流程如图4所示。图4题目提交流程数据的发送:使用L inux 操作系统进程间通信的系统V I PC 的消息队列的方式,由中间层应用服务器的CGI 程序,把用户提交的源程序代码、编号、语言等信息,写入系统V I PC 的消息队列,该消息队列标识为“Exercise ”。先使用系统函数m sgget 获得“Exercise ”消息队列的标识符;再使用系统函数m sg 2snd 发送一个消息,把消息结构体写入“Exercise ”标2007年第12期郑传生:基于B/S结构的程序设计竞赛自动测评系

12、统的设计111识的消息队列。信号的传送:使用L inux操作系统的信号处理方式,由中间层的CGI程序向客户端的守护进程发送一个用户信号SI G US R1,标识为“Exercise”,以唤醒处于睡眠状态的守护进程投入运行,执行相关的处理。数据的接收:使用L inux操作系统进程间通信的系统V I PC的消息队列的方式,由服务端的守护进程,从已存在的消息队列“Exercise”中,读取一条消息。首先,守护进程必须使用m sgget函数,获得“Ex2 ercise”消息队列的标识符;然后,再使用系统函数m s2 grcv,从“Exercise”消息队列中读取一条消息,从而获得通过消息队列传送的用户

13、数据内容。编译:守护进程使用Linux系统的函数调用,调用G NU编译器,分别执行gcc,g+,g pc三个命令,对C, C+,Pascal三种不同的源程序代码执行自动编译,并通过系统调用的返回值,捕捉系统调用的编译命令是否成功,否则保存编译错误的信息,同时中断以后的执行,返回给用户“Co mp ile Err or”的提示信息。系统调用的编译命令如下:gcc foo.c-o f oo-ansi-fno-as m-W all-l m-static -DONL I N E_JUDGEg+foo.c-o foo-ansi-fno-as m-W all-l m-static -DONL I N E_

14、JUDGEgpc foo.pas-o f oo-fno-as m-W all-l m-static-DONL I N E_JUDGE链接:经过编译成功之后,守护进程继续使用系统调用,调用ld链接命令,对编译生成的obj二进制代码执行自动链接,产生对应的可执行的二进制代码,提供下一步操作使用。运行:守护进程继续执行操作,使用系统调用execl函数,把上一步链接生成的可执行二进制程序投入自动运行。同时,在程序运行的过程中,通过L inux操作系统,捕捉系统信号,检查程序的运行过程中是否出现超时、栈溢出、段错误等非法情况。是,则马上终止程序的运行,通过分析系统信号,返回相应的错误提示信息给用户。测试

15、:该部分主要负责测试数据的输入和输出的转换,通过系统函数,把数据的文件输入重定向到标准输入,把数据的标准输出重定向到文件输出,从而使得程序运行的结果保存为一个临时的文本文件,交给下一步操作进行评审。评审:顺利经过编译、链接、运行、测试四个步骤后,转入运行结果的阶段,该阶段主要完成对保存在临时文件中的输出数据进行检查,与标准数据进行一致性的对比。若数据完全一致,则马上返回“Ac2 cep ted”的信息给用户,表示程序执行成功,并得到了正确的结果;若数据不完全一致,则继续调用内存块比较的方式,再进行下一步数据检查,如果去掉数据排列表示格式之后,发现数据仍然一致,则马上返回“Presentati

16、on Err or”的信息给用户,表示程序数据格式有误;否则,数据完全不一致,返回"W r ong Ans wer"的信息给用户,表示答案错误。返回结果:经过以上一系列操作过程后,程序的自动测评,基本完成,剩下最后的数据库更新操作。因为自动测评的返回信息,通过数据库记录的记载实现的,所以守护进程必须通过与数据库建立连接,执行插入、修改或者更新的查询操作。3关键技术B/S网络结构,通过W eb Service的CGI编程实现对W eb访问服务的控制。基于L inux操作系统的信号通信与处理,通过发送、接收不同的信号,提交不同的处理请求,调用相应不同的信号处理函数,执行处理。如

17、:提交“练习”或“竞赛”请求。基于L inux操作系统的消息队列的发送、接收、处理。使用F I F O(先进先出调度算法,使得W eb 服务请求按照FCFS(先来先服务的原则执行处理。这是程序设计竞赛规则上用于判定竞赛者提交程序先后关系的技术难点。基于L inux操作系统的守护进程的程序设计,使用C/C+编写“ac md”守护进程的控制程序,专门负责沟通“数据库-应用服务器-控制程序”三者间的通信、数据请求、数据处理、数据返回等重要工作。这是整个自动测评系统的技术重点和技术难点。基于L inux操作系统的系统编程,如系统调用、文件操作等,为用户提交的C/C+/Pascal/Java 源程序代码提供G NU C/C+/P ASCAL编译器的调用,进行程序的自动编译连接,提供给ac m

温馨提示

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

评论

0/150

提交评论