记 Jiangnan Online Judge 的开发

2018年4月7日

Jiangnan Online Judge,简称 JNOJ 是一个使用 PHP ,基于 yii2 写的在线测评系统。参加过相关算法竞赛的人对 OJ 都不感到陌生。OJ 可以让用户可以在线提交程序多种程序(如C、C++、Java)源代码,系统对源代码进行编译和执行, 并通过预先设计的测试数据来检验程序源代码的正确性。

这是在 2017 年末开发的,当时开发它用于举办校内的算法编程竞赛。当时距离比赛开始时间太短,为了能够在短时间内开发好快速上线,选择了 yii2 框架来开发。在开发前,曾找过网上的开源 OJ,没有一个满意的,界面丑代码更丑,没有任何一点易用性,也不易扩展功能。

现 OJ 支持的特性如下:

  • 滚榜 – 在比赛结束后,提供滚动榜单的功能
  • 线上线下赛不同场景 – 为线下举办的比赛增加限制:如限制参加比赛的账户,参加比赛的账户不能自己修改个人信息
  • 线下赛打印功能 – 为线下赛提供打印代码的功能
  • 题目打印功能 – 创建比赛后,可以将题目信息一键导出为 PDF,以供打印
  • 公告弹窗提示 – 在比赛过程中,发布公告时可以给所有在线用户发布弹窗提示有新公告
  • 作业 – 可以用于教学练习
  • 记录出错数据 – 可以查看提交方案的出错数据
  • 新闻门户首页 – 首页显示新闻,各种公告等
  • 支持多语言 – 现支持 C、C++、Java、Python3
  • 全站使用 Markdown 编辑器,支持 MathJax 数学公式
  • 题目描述多组样例 – 在一道题目的样例描述中,可以提供多组样例描述
  • 对比赛发布题解 – 在比赛页面提供题解页面,在比赛结束后显示
  • 问题标签 – 给问题添加标签,方便查询
  • 以及其它 OJ 该有的功能都有了

增加了很多国内开源 OJ 所没有的特性。当然主要还是为了适应比赛,比如滚榜,不同的场景用户,公告弹窗等。这些对于举办一场线下比赛来说,都是及其重要的。而对于新闻门户这样的功能,则是为了在学校能够跟别的学生互动。

作业其实跟比赛是一样的,区别只是比赛只能在后台由管理员创建,而作业是任何用户都可以创建。

有一些插件,用的是别人开发出来的,比如判题机用的是 hustoj 中的,并在此基础上进行重构。而滚榜则是别人放在 GitHub 上的一个插件。现在,JNOJ 在用于正式比赛方面的功能都已经完善,可以说,完胜国内绝大部分学校的 OJ。

当然,不仅仅如此。我也在给这个 OJ 开发一个出题平台。这个出题平台的作用是方便出题人出题,并减轻网站负责人的负担。经常混迹 Codeforces 的人,可能也会有接触到 Codeforces 的 Polygon System。我也给这个出题平台命名为多边形系统,用于给 JNOJ 来出题。

以往出题都是由出题人出好题目,然后再把题目发给网站负责人,让网站负责人来将题目信息导入 OJ ,并上传题目的测试数据。而通过这个多边形出题系统,任何用户都可以很方便地使用 OJ 来出题,多边形系统的题目数据表跟 OJ 的题目库不是同一个数据表,出好题后管理员在后台一键将其导入 OJ 的题目库中。题目的测试数据也是可以通过该系统来生成。这样一来可以减轻网站负责人的负担,而且题目都是在 OJ 编写,可以直接预览到该题目的最终呈现样子。

附 JNOJ 源码:https://github.com/shi-yang/jnoj

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注