语言程序在线提交系统设计与实现

2018-03-30 03:26王怡康吴非凡罗佳沈祖伟刘安琪朱小锐
无线互联科技 2018年24期
关键词:程序设计

王怡康 吴非凡 罗佳 沈祖伟 刘安琪 朱小锐

摘 要:本系统采用B/S架构,前端利用JavaScript,CSS等语言编写,后端数据库利用MySQL关系型数据库,评测机利用C#编写。主要实现了代码评测、线上考试、线上竞赛、自我评测等功能。本系统的设计目的是减轻教师教学压力,增加学生学习趣味性,帮助学生及时作出自我评价。

关键词:计算机辅助评价;程序设计;程序自动评测

在教学方面,传统的以人力检查学生学习成果的教学模式难以跟上时代的发展。对于教师,人工检查代码耗时耗力巨大,且难免有判断错误的情况。在学生广泛地参与各类程序设计竞赛的背景下,学生需要一款能够随时检测自己学习成果,提高学习积极性的系统。因此,设计一款解决以上问题,且适用于学校的OnlineJudge系统显得十分重要。本文着重介绍OnlineJudge系统的设计过程和使用的技术。

1 设计方案

1.1 开发平台

采用MySQL数据库用来存储用户、题目、比赛、班级、作业、提交记录等信息,开发工具为Navicat 11.1.13。网站分为前端和后端,开发工具为VS Code1.12.1。网站后端基于ThinkPHP 3.2.3框架实现,用来处理业务逻辑,读写数据库,并和前端界面进行数据的传输。网站前端基于HTML和jQuery技術实现,为用户界面,有统一的页首页尾和侧边栏。评测机为Windows平台的图形界面软件,使用C#语言,基于WindowsForms框架实现,通过POST方式与网站的API接口通信,开发工具为Visual Studio 2017。

1.2 硬件结构

本系统需要部署Web服务器和程序评测机。

系统采用B/S结构,Web服务器与评测机均为安装了Windows Server操作系统的服务器,两台服务器同时接入校园网,也可只部署一台Web服务器,在Web服务器上安装虚拟机软件,在虚拟机中部署评测机服务器。

Web服务器包含网站程序和数据库,网站程序包含模型、视图和控制器。评测机通过API接口与Web服务器通信,下载测试数据和用户提交的程序代码,自动编译、链接、执行,测评完成后上传结果。

1.3 主要功能

本系统完成主要功能如下:题库,提交记录,比赛,班级,测试。

其中,题库中放置了可公开的编程题目,学生可在其中挑选感兴趣的题去攻克,页面右端放有题目分类,学生也可以根据题目分类来找自己薄弱点加强练习。提交记录可以看到用户的提交记录。在班级功能中,老师创建班级并添加学生信息、学生查看班级信息等。比赛功能可以进行编程比赛。测试功能中,管理员端可以选择自动抽题组卷,学生端可以加入测试。

除此之外,本平台在登录管理员账号后可以实现增删题库、代码查重、数据统计、用户管理等功能。

1.4 评测机设计

评测机是此程序的灵魂,其实现为平台奠定了基础。评测机整体使用微软公司推出的C#语言和.NET Framework平台。

评测机分为离线模式和在线模式,评测机的软件为exe格式。评测程序需要用户手动安装各种语言的编译运行环境,评测机通过调用预先设定好的批处理来编译和执行程序,评分方式为通过对比运行结果和事先给出的样例来评分。

如图1所示,当处于在线工作模式时,评测机运行一个后台的异步工作线程,不断地向网站的API请求数据,如果有返回待评测的程序数据就调用本地评测功能,等待评测完毕后,再将评测结果发回API。

如图2所示,当处于离线工作模式时,评测机需要用户手动填写程序代码、测试数据、文件名、程序语言、时间内存限制等信息,填好后手动点击“立即评测”按钮,评测机评测完程序后输出评测结果。

1.5 Web网站设计

Web是整个系统与用户的交互界面,也是核心功能实现的途径。Web界面需要兼具美观和功能性,因此,Web的设计十分重要。图3展示Web界面实现的部分功能。

Web端为用户交互界面,绝大部分功能依附于Web实现,核心功能为作业发布与提交、竞赛、考试功能。工作流程如图4所示。教师在发布作业或创建试题时,需要提前设置题目、应用语言范围、创建班级、所需时间、试卷题型等,所有所在班级成员均可收到作业。

学生登录,进入班级可收到最新作业。学生在网站做完作业可提交代码,调用评测机评测。系统将选取学生最高分进行记录。若场景为考试或练习,系统将学生答案与数据库标准答案进行比对,通过计算得出学生本场考试分数并记录在用户中心,管理员账号可以对学生提交代码进行查重,并根据查重率要求学生作出相应解释。

1.6 API接口

网站和评测机之间的通信通过API接口实现,评测机不断地向API发送数据请求,网站端根据请求作出相应的操作。

接口的HTTP请求方法为POST,分为“读请求”和“写请求”两种请求。网站接收到“读请求”时,将还没有完成评测的程序和对应题目的测试数据返回给评测机;接收到“写请求”时,将评测机发过来的具体评测结果写入数据库[1]。

评测程序需要使用专用的评测机账号登录。

2 网站后端框架

2.1 ThinkPHP框架

TinkPHP可以支持Windows/Unix/Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持MySQL,PgSQL,Sqlite多种数据库以及PDO扩展,ThinkPHP框架本身没有特别模块要求,具体的应用系统运行环境要求视开发涉及的模块决定[2]。此系统用了MySQL关系型数据库,用以存放相应的数据。

2.2 数据库相关

数据库表、视图、存储过程、函数等创建过程这里不进行详细讨论。E-R模式如图5所示。

建议慎用触发器,触发器功能固然强大,但是它如同一把双刃剑,过分依赖触发器,会使数据库逻辑受到影响。又因为本系统会长期供学校使用,触发器数目过多势必增加数據库维护的难度。因此,触发器在本系统中应谨慎使用。

3 其他相关

3.1 代码查重

“代码查重”中,支持计算本作业提交的程序代码相似度,可查询整个作业的所有学生互相之间的相似度,统计出最高值,也可单独查询某一个学生与其他学生之间的代码相似度。代码相似度算法如下:

(1)找出两个字符串中相同部分最长的一段。

(2)再用同样的方法在剩下的两段中分别找出相同部分最长的一段,以此类推,直到没有任何相同部分。

(3)相似度=所有相同部分的长度之和×2/两个字符串的长度之和。相似度以百分比的形式展示,达到95%自动标为红色,点击百分比的链接可查看具体提交记录[3]。

3.2 安全性考虑

由于本系统需要原样执行用户提交的程序,就不可避免地会遇到有用户提交恶意程序代码的情况,轻则使评测机停止工作,重则破坏网站的文件和数据。

解决这类问题有两种方案,一是在执行程序之前检测程序行为加以防范,二是在程序对评测机破坏之后自动恢复。前者由于程序的描述方式千变万化,提前预防的方法不现实,只能采用后者。因此,评测机和Web服务器应部署于两台不同的计算机上,两台计算机同时接入校园网,评测机所在的计算机上应安装硬盘还原卡。如果硬件设备条件不够,也可在Web服务器上安装虚拟机软件,在虚拟机中部署评测机,虚拟机开启还原卡功能。

为实现自动恢复功能,系统应每隔一段时间(暂定为2 min)检测一下评测机是否正在工作,如果不工作就说明评测机发生故障,自动向评测机所在的计算机发送重新启动指令,由于安装有还原卡,重启后评测机会恢复原状,即可实现评测机出错后自动恢复的功能。

4 结语

互联网时代正在改变传统教学体系,以计算机为代表的新型课程越来越受到广大高校重视。与这门学科产生的原因一样,本套系统也是为了降低人工成本而生。目前,本套系统已应用于学校C语言程序设计课程教学、C语言程序设计竞赛,也可为ACM竞赛、天梯赛等赛事做培训相关工作。我们未来的设计方向是UI界面更人性化,支持更多程序语言(已有包括C,C++,Java,Python在内的多门语言),支持更多人同时在线评测等。

[参考文献]

[1]沃森,内格尔.C#入门经典[M].4版.齐立波,译.北京:清华大学出版社,2008.

[2]ThinkPHP文档中心.ThinkPHP 3.2.3完全开发文档[EB/OL].(2018-05-06)[2018-11-13].http://document.thinkphp.cn/manual_3_2.html.

[3]吉尔摩.PHP与MySQL程序设计[M].4版.朱涛江,译.北京:人民邮电出版社,2017.

猜你喜欢
程序设计
基于SolidWorks和VBA的电机阶梯轴建模程序设计
高职Java程序设计课程体系建设思考
基于Visual Studio Code的C语言程序设计实践教学探索
从细节入手,谈PLC程序设计技巧
基于LabVIEW的车载充电机控制程序设计
浅谈基于C语言的计算机软件程序设计
高职高专院校C语言程序设计教学改革探索
OBE理念下基于Greenfoot的Java程序设计课程教学改革
模块化程序设计在一体化检定平台中的应用
PLC梯形图程序设计技巧及应用