管理界面使用指南

By cong258258,LauYeeYu,Alan-Liang,更新于 2025.4.10。

班级管理

2024 年 2 月,ACM Class OnlineJudge 引入了基于班级的权限机制。此后,除提交管理外,所有比赛及题目管理均包含于班级管理中。

如果需要新建班级,请联系服务器运维(「关于」页面上有运维人员的信息)。

如果任课老师有多个教学班,您需要考虑创建一个还是多个班级。同一次作业/比赛/考试只能布置给一个班级,所以如果这些教学班有共同的作业或考试,请只创建一个班级。创建班级后,您可以在班级内部给学生分组,并给不同分组的学生布置不同的作业。

修改基本信息

在对应班级页面的「管理」标签下的「基本信息」栏中,可以修改基本信息,包括班级名称和班级简介(支持 markdown)。班级简介会显示在班级的主页上。

修改分组

此功能主要用于给班级内不同学生布置不同作业。比如 ACM 班的程序设计课程会有 A/B 班的区分,作业的内容或要求有时会有所不同,那么可以使用分组功能。如果班级没有分组,那么在设立作业、比赛和考试时无需设置分组。

在对应班级页面的「管理」标签下的「分组」栏中,可以创建、修改或删除分组。

一个作业、比赛或考试可以指定给某些分组。指定分组后,不在分组中的学生视为班级外的学生,不会自动加入,不会在首页展示,手动加入后也不会计入排名(如果没有启用「为所有用户排名」)。

修改成员

成为班级内学生是一个双向的过程,需要管理员设置成员,且学生主动加入班级。您可以参考加入班级相关部分

在对应班级页面的「管理」标签下的「成员」栏中,可以修改成员。可以添加、删除、修改成员及管理员。具体参见输入框上方的文字提示。

班级管理员可以给学生添加实名信息,在评测状态、作业等榜单上,会在学生昵称旁显示实名信息。实名信息仅对本班级及具有相同标签的班级的管理员可见,学生和其他班级的管理员不能查看。(不过,OJ 运维组可以查看所有实名信息。)

在添加实名信息后,对应学工号的用户将会在首页看到一个「待加入的班级」提示,同时班级列表中的「旁听」按钮变为「加入」按钮。用户点击「加入」后,将成为班级的正式成员。

只有添加实名信息且用户也加入班级后,才能正常统计成绩,及查看用户所有提交:

这样设计主要有两个考虑:一是,一位同学(相同的学号)可能有多个用户,但一般只使用一个用户加入班级;二是,学生加入班级后,班级管理员将可以查看学生全部提交的代码,这个操作需要学生本人确认。

题目管理

题目有一个所属的班级,默认情况下只有所属班级的管理员才拥有完整的权限。其他班级仍然可以在作业、比赛和考试中使用对应的题目。

一个题目具有以下信息:

题目权限

本班级的管理员无需特殊授权即可管理题目。

此外,本班级的管理员可以赋予其他人更高的权限(可以随时赋予或收回权限):

标签相同的班级管理员默认拥有只读权限。一般来说,这意味着您可以下载同一课程在之前的学期里上传的题目、查看这些题目下所有的提交代码,但不能修改这些题目。

如果您对无权管理的题目有疑问或修改建议,请直接联系 OJ 运维组。

新增题目

在对应班级页面的「管理」标签下的「题目」栏中,直接点击下方「新建题目」。点击「新建题目」后,题目就已经存在,如果不小心新建了题目,需要删除题目,可以在题目页面「基本信息」标签下的「删除题目」处输入该题的题号以删除该题。但请注意,已经有提交记录或包含在比赛/作业中的题目不能被删除

修改题目

在对应班级页面的「管理」标签下的「题目」栏中,输入题目的题号,点击右侧「跳转」。系统将显示已经存在于数据库中的信息,可以在此基础上进行修改。修改完毕请点击各标签下的「保存」按钮。

删除题目

在对应班级页面的「管理」标签下的「题目」栏中,输入题目的题号,点击右侧「跳转」。在「基本信息」标签下的「删除题目」处输入该题的题号以删除该题。但请注意,已经有提交记录或包含在比赛/作业中的题目不能被删除

样例

题目可添加一组或多组样例。一组样例包含名称、输入、输出和描述。如果输入/输出过大,或者不是纯文本,请将输入/输出字段留空,并在描述中说明下载地址等信息。输入和输出均为空时,题面将不显示输入和输出。

在支持多组样例前,样例分为「样例输入」和「样例输出」两个字段。您可以在「样例(旧版)」下查看这两个字段。在存在新版样例信息时,旧版样例信息不会显示在题面上。我们已将大部分题目的样例自动迁移到了新版样例,但仍有少数既有题目需要手动迁移。如果您发现迁移过程导致的数据错误,请及时联系 OJ 运维组。

另请注意

比赛与作业管理

在 ACM Class OnlineJudge 中,作业、比赛和考试本质是上是一样的,仅在渲染方式上有所不同。考试是一种更加严格的比赛,在分类上属于比赛。

作业、比赛和考试均有其所属的班级,只有所属班级的管理员才能对其进行管理。如果在班级内新建了作业、比赛或考试,那么对应的学生就会自动加入,无需学生主动加入(管理员不会被自动加入)。具体来说,如果没有设置分组,那么所有班级内的学生都会自动加入;如果设置了分组,那么只有被指定的分组的学生会自动加入。其他的学生(包括非指定分组和其他班级的学生)仍然可以通过报名加入。

考试的特性:

  1. 同一时刻非管理员用户只能报名同一场考试,在考试结束前暂时无法加入新的作业、比赛或考试。
  2. 考试时,非管理员用户只能查看自己在考试题目上的提交,因此无法查看别人在考试题目上的提交(哪怕提交时设置为公开),也无法查看自己不在考试列表里题目的提交。
  3. 考试时,非管理员用户在排行榜上不能看到非正式选手(即「打星选手」)的信息,防止班级外用户出现在排行榜上,影响考生发挥。

比赛和作业的唯一区别在于,显示在比赛列表还是作业列表中。管理员可以修改比赛或作业的排行榜显示选项 (赛制):

罚时类似于 ICPC 赛制下的罚时:对于每道通过的题目,罚时为 (题目 AC 时间 - 比赛起始时间) + AC 前的错误提交次数 × 20 分钟。与 ICPC 不同的是,编译错误也会计算 20 分钟的罚时。未通过的题目罚时为 0。选手在比赛中的罚时为各个题目罚时的和。

我们不建议同时开启计算罚时和计算部分分。这样会使骗分选手在排名上高于正解选手,因为未通过的题目不计入罚时。

ACM 班所使用的赛制如下:

在之前,ACMOJ 的赛制与显示类别 (比赛/作业) 绑定,为了计算部分分,有一部分助教将作业的类别设置为了比赛。现在请不要这样操作。

新建一场比赛

在对应班级页面的「管理」标签下的「比赛与作业」栏中,点击下方「新建比赛」,分别填写名称、起始时间(默认为当前时刻)、结束时间(请避免结束时间早于起始时间)、比赛描述,选择类型与设置。然后在下面的「题目」部分添加需要加入的题目。

修改一场比赛

在比赛页面点击「管理」。系统将显示已经存在于数据库中的信息,可以在此基础上进行修改。修改完毕请点击「修改比赛」。

删除一场比赛

在比赛页面点击「管理」,在下方找到「删除比赛」,输入比赛编号以删除比赛。

修改比赛题号

在比赛页面点击「管理」,在「题目」部分中,

修改参赛学生列表

如果班级没有分组,那么此项无法更改,默认所有班级内成员参赛。

如果班级有分组,请在比赛页面点击「管理」,在「人员与分组」部分中勾选对应分组。

注意:如果勾选了全部分组/无分组,那么将不会显示所有分组的情况,但是所有班级内学生都会被包括在内。

设置作业要求

您可以为作业设置完成要求。设置要求后,学生将能在主页上看到自己的作业是否已完成,管理员也可以在比赛页面上查看每位学生的作业完成情况。

OJ 支持两种统计完成情况的方法:完成题目数/得到的分数,和 Python 表达式。

Python 表达式格式

您可以在表达式内使用下列函数或变量:

您应该返回一个 bool,若为 True 则表示学生完成了作业,若为 False 则表示未完成。

为了 OJ 的安全性,您只可以使用下列语法:

不能使用数组下标(a[0])、定义函数或定义变量。

以下是一些示例:假设一次作业有五道题目,1461、1462、6437、6438 和 5033。

迟交

您可以设定接受迟交,并为迟交设定截止时间。按时完成的学生和补交完成的学生会在显示中区分:

设置迟交时,强烈建议同时在系统中设置完成情况统计,否则如果学生在作业截止后、迟交截止前通过了新的、本不需要完成的题目,或者取得了更高的分数,则学生会被记为迟交,因为 OJ 无法判定学生是否按时完成了作业。

例如,一次作业有两道题目,可任选一道完成,但未在 OJ 上设置。一位学生按时通过了一道题目,在截止时间之后,又通过了另一道题目,则此时学生提交的第二题会被认为是迟交。如果设置了作业完成条件,则提交的第二题不会显示在完成情况表上。

导出提交数据

在比赛页面点击「管理」,在下方找到「导出提交数据」,点击即可导出提交数据。

导出的代码为每个学生每道题目符合要求(包括时间范围和提交语言,若允许迟交则包括迟交)的最晚一次最高分提交。例如,四次提交得分分别为 40、80、80、60,则将导出第三次提交的代码。

此功能会使用较多的服务器资源,敬请各位管理员不要频繁进行导出。

注意:如学生有部分符合要求的提交仍在评测,请等待评测完成后再进行导出,否则可能会导出错误的提交版本(因为评测完成前会被视为 0 分)。

导出的文件名为 export-id.zip,其中 id 为作业、比赛或考试的编号。在此压缩包内,每个题目的提交会分别放在以题号为名称的目录下,每个目录内的文件名为 学工号-实名-用户名-提交编号-P题目编号-提交状态-得分(-late).后缀。在每个文件中,其头部会用注释的方式包含提交一些信息,包括用户、题目、时间、状态、得分、评测详细信息、每个评测点的情况等。

评测数据管理

ACM Class OnlineJudge 支持多种教学特化的强大评测方式。功能包括但不限于:编译时长限制;运行时间、内存、磁盘使用限制与统计;Valgrind 内存泄漏检测;Git 仓库编译评测;Verilog 评测;hpp 头文件评测;各种自定义 special judge。

简单而言,如果你需要评测的是简单的 OI 题(包括若干个输入文件,若干个标答输出文件,不使用 SPJ,通过 stdout 与输出文件进行全文对比),那么你可以使用数据 (GUI) 选项卡来进行上传;否则,我们强烈推荐你使用自由度更高的数据 (ZIP) 上传方式

无论使用 GUI 还是 ZIP 上传的数据,管理界面都会自动提取您配置的数据点信息(从您填写的表格或从 ZIP 中的 config.json),将其更新在题面的「时空磁盘限制(运行时)」一栏中。

数据 (GUI)

填写题号,编译时长,SPJ 类型等内容,填写评测组配置与数据点配置后,点击打包上传所有数据。

数据(ZIP)

评测管理

由于评测系统架构经历重大升级,在 2023 年 2 月 6 日之前提交的评测无法在当前评测系统中进行管理。当前评测系统下,评测管理仅对 2023 年 2 月 6 日之后的提交有效。

有多处可以进行评测管理:

请注意,取消成绩后,如需让成绩生效,请在「管理」页面的「评测」标签下重测。

图床

联系 ACM OJ 开发组