Online Judge System 设计与实现
摘要
    电子计算机自产生之日起就体现了其强大的生命力,短短几十年的时间,计算机已经逐渐渗透到了我们这个社会工作和生活的各个领域,并且发挥着越来越重要作用,成为人们工作、学习、科学研究的得力助手。它在教育领域同样发挥着相当重要的应用,过去传统的ftp, email方式提交学生程序作业并进行手工评判的方法,其繁重的工作量在我们今天看来是无法想象的。在高等院校的教学中,计算机方面的课程,特别是程序设计语言课程,具有实践性特别强的特点。它要求学生不仅仅要学习理论知识,还必须进行大量的实践,才能真正掌握知识,在实践应用中发挥作用。而在目前的教育、考核方式下,却不能真正考核出学生的真实水平,特别是在实践方面的水平,也不能引导学生以有效的方式来学习这些课程。各种强大的软件系统伴随着计算机硬件的飞速发展而发展,使得今天我们利用计算机来实现智能在线评判的想法可以得以实现。
    本文针对现行的Online Judge系统进行了分析,综合了各系统的功能特点,提出了系统的设计方案和开发原理,实现了程序设计竞赛评判过程的自动化,标准化,以实时的方式反馈
回学生评判结果,用户使用方便等功能特。
    本系统前台开发基于Apache + PHP + MySQL,后台开发基于Qt工具包。详细地介绍了程序评判流程(提交,编译,运行,测试等),程序运行的原理及程序运行时资源的管理,对系统模块的划分和后台的设计进行了详尽的说明。
    本文结构清晰,首先简明的阐述了评判系统的开发背景,研究现状,目的和意义,然后针对系统的目标进行了总体的构架设计,最后根据设计思想提供了各个模块的设计细节。通过全面的论述得出该系统在各个方面的性能分析。
在线代码运行器关键词:在线评判系统;进程管理;多线程;模型
The Design and Implementation of Online Judge System
Abstract
    Computer shows its strong vitality since it has invented, and within few decades time, computer has gradually infiltrated into our society in all spheres of work and life, and is pl
aying an increasingly important role in people’s work, study and research. It also plays an important application in the field of education. The traditional ftp, email submission of student assignments and then judge them by hand one by one, now this method shows its heavy workload and is unimaginable. In teaching of high schools, many computer courses are demanded with strong practical capability, especially some programming language courses. It requires that students study not only theory knowledge but also lots of practice so that they master knowledge factly and bring into use in actual applications. However, on the way of today’s teaching and examining, the student’s genuine level would not be estimated properly, in particular, in practicing aspects. Of course, it can not lead students to learn these courses efficiently. Various powerful computer software systems come along whih the rapid development of hardware make it possible to achieve the thought of the intelligent judging online.
    This thesis analysis several current Online Judge System, and synthesizes the functional features of each system, then raise the principles of the system design and development, and achieve the programming contest judging process automation, standar
disation, returning real-time results to students, convenience of use and other functional features.
    The development of the front-end of this system based on Apache, PHP and MySQL, the back-end development based on Qt development toolkit. There are detail presentations of the programming judging procedure: ssubmit the programming source code, compile, run and test the answer, etc., the program running principles and the runtime resources management. And explains the system modules division and the back-end designs.
    In this paper the structure clear. First concisly states the background of the Online Judge System, its current researches, purpose and meaning. Then focus on the overall framework design to the system’s goals. Finally shows the design details of each module according to the design ideas, and obtained the various aspects of performance analysis information through comprehensive exposition of the system.
Keywords: online judge system; process management; multi-thread; model
前言
1 课题背景
    ACM/ICPC(ACM International Collegiate Programming Contest, 国际大学生程序设计竞赛)是由国际计算机界历史悠久、颇具权威性的组织 ACM(Association for Computing Machinery,国际计算机协会)主办的,世界上公认的规模最大、水平最高的国际大学生程序设计竞赛,其目的旨在使大学生运用计算机来充分展示自己分析问题和解决问题的能力。该项竞赛从1970年开始举办,一直受到国际各知名大学的重视,并受到全世界各著名计算机公司的高度关注,在过去十几年中 APPLE、AT&T、MICROSOFT 和 IBM 等世界著名信息企业分别担任了竞赛的赞助商。可以说,ACM 国际大学生程序设计竞赛已成为世界各国大学生最具影响力的国际级计算机类的赛事, 是广大爱好计算机编程的大学生展示才华的舞台,是著名大学计算机教育成果的直接体现,是信息企业与世界顶尖计算机人才对话的最好机会。
    Online judge system 是基于该背景下提出的一个程序设计竞赛评判系统,它对用户提交的程序源文件进行编译,运行,评判,给出用户的答题反馈信息,对用户答题情况进行统
计排名等。
2 课题的提出
    在实现计算机运用和信息网络化的今天,效率的大幅提高以及信息交换的深入和扩大, 使人类的生活越来越离不开数字化、信息化。信息决定着我们的生存,这已是不争的事实。以多媒体计算机技术和网络通讯技术为主要标志的信息技术,对当代社会产生着重大的影响,改变着我们的工作方式、学习方式和生活方式。信息技术在教育领域的运用是导致教育领域彻底变革的决定性因素,它必将导致教学内容、手段、方法、模式甚至教学思想、观念、理论以及体制的根本变革。
    随着信息化进程的飞速发展以及计算机技术的普及,高等院校开设了越来越多的计算机课程。和传统的课程比较,计算机课程具有实践性很强的特点。学生要学好这些课程不但要认真学习理论知识,还需要大量的实践训练。例如,C 语言课程的学习,就需要编写大量的程序,才能够积累足够的经验,真正掌握程序设计的方法,编写出正确、高效的程序。对传统课程的考核多采用笔试的方式,但是,对于计算机方面的课程,特别是程序设计语言类课程这是不够的,因为它并不能促使学生在平时的学习中加强实践的锻炼。如何
对这些课程进行有效的考核,成为一个长期工作在第一线的计算机教育工作者反复思考和不断探索的问题。
    在目前的教学方式中,多数高等院校基本上还是采用基于传统方式的笔试来考核学生的计算机课程水平,然后在此基础上稍作补充。在上机实践考试中,学生采用FTP,Email,甚至手写的方式提交编程作业,老师需要对他们的作业进行一一批阅,相当多的时候,任课教师从学生处得到的是一些低效的,甚至不能运行通过的源代码,可是却要花费不少时间来判断分析学生程序到底在什么地方出错,然后给出相应的得分。这需要老师和学生花费很多的精力,效果也不是很好。学生更无法得知自己所编写的程序存在哪方面的问题,因而不能有效及时地进行更正。而Online Judge可以自动批阅作业并给出成绩,并且直接统计学生作业的提交情况,以及成绩的登记。这给老师带来了很大的方便,同时学生也可以通过Online Judge直接查询答题状况。
3 研究现状
    现在已有不少学校采用由计算机进行编程作业评判的方式来对学生的作业进行考核。但更多的情况下是学生的编程作业通过FTP,Email等方式提交给老师后,由老师直接对程序
以及程序的相关文档进行阅读,采用计算机对程序直接进行评判还不是很普遍。总的来说,在对编程作业的提交进行后处理方面已经有了一定程度的研究,而且与此课题相关的一些技术,像对程序的后处理在ACM等领域已经普遍运用。已有相当多的高校建立了题库和平台。大部分平台是基于 ACM 程序设计竞赛规则而开发的,有的平台是基于程序设计题目中的“得分点”而设计的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。