hustoj—添加测试点下载功能

学校oj的判题系统再一次崩溃了,在测试某些程序时一直显示判题状态。从github上更新了判题程序,实现测试点下载功能的程序也就需要重新修改了。

现将需要注意的点记录如下,用作备忘。

 

1.修改数据库

在数据库的solution表中添加两个保存字符串的关键字:

rec:各个测试点的状态

file_path:没有ac的测试点路径,在这里我用逗号分隔各个数据的路径,网页解析的时候拆分就行了。

 

在源代码中不同的数值代感受测试点不同的返回结果,直接保存数字不好操作,我们可以把字符'A'加返回值的字母保存到数据库中。字符串记录各个测试点的测试情况,字符'A'表示当前测试点WT0,字符E'表示当前测试点AC。例字符串"EHHEEE"就表示为第2、第3个测试点超时,其它测试点AC。

#define OJ_WT0 0
#define OJ_WT1 1
#define OJ_CI 2
#define OJ_RI 3
#define OJ_AC 4
#define OJ_PE 5
#define OJ_WA 6
#define OJ_TL 7
#define OJ_ML 8
#define OJ_OL 9
#define OJ_RE 10
#define OJ_CE 11
#define OJ_CO 12
#define OJ_TR 13

 

2.修改judged_client.cc

judged_client.cc程序的功能就是不断是从数据库中读取待评测的记录,然后调用judged程序测试,然后将judged返回的结果再写入到数据库中。

2.1定义全局变量

char rec[100]; //最多只能存100个测试点的状态

char file_path[5000];

judged_client.cc可能是多线程并发的(judged程序是多线程运行的,但是不清楚judged_client.cc是不是多线程的),定义成全局变量可能会出错,不过我们学校的oj对并发容量的要求并不高,目前来说还没有问题。

 

2.2修改main()函数代码

先定以到以下的代码片段:

if (oi_mode) {
                  if (ACflg == OJ_AC) {
                            ++pass_rate;   

                        }
                        if (finalACflg < ACflg) {
                                finalACflg = ACflg;
                        }
                        ACflg = OJ_AC;
                }

很明显,上述代码片段是用来统计分数,pass_rate变量统计通过的数量,ACflg为测试点状态。

将程序改为如下所示:

if (oi_mode) {
                        rec[num_of_test-1]='A'+ACflg;//edit by zhc
                        if (ACflg == OJ_AC) {
                                ++pass_rate;
                        }
                        else{ //edit by zhc
                            strcat(file_path,",");
                            strcat(file_path,infile);
                         }
                        if (finalACflg < ACflg) {
                                finalACflg = ACflg;
                        }
                        ACflg = OJ_AC;
                }

2.3修改 _update_solution_mysql 函数

定位到 _update_solution_mysql 函数之后,修改写入的sql语句。

未修改的代码:

if (oi_mode) {
    sprintf(sql,
"UPDATE %s SET result=%d,time=%d,memory=%d,pass_rate=%f,judger='%s',judgetime=now() WHERE solution_id=%d",
tbname,result,time,memory,pass_rate,judger,solution_id);
	} 

 

 

修改以后的代码:

if (oi_mode) {
    sprintf(sql,
"UPDATE %s SET result=%d,time=%d,memory=%d,pass_rate=%f,judger='%s',rec='%s',file_path='%s',judgetime=now() WHERE solution_id=%d",
tbname,result,time,memory,pass_rate,judger,rec,file_path,solution_id);
	} 

 

 3.网页展示

最后就是读取数据库中的数据显示到网页中去了,其实在我实现测试数据下载功能中,最折腾时间的反而是将数据显示到网页上,个人建议在showsource.php的基础上显示测试数据详情。

网页显示效果如下:

judge_client.cc源码中是有记录每个测试点的完成时间的,优化的时候你们可以在solution表中添加一个字段记录每个测试点的使用时间。

 

总结

修改oj是一个痛并快乐着的过程,这个过程会迫使你去触及以前从未到达的领域,不断地去学习。

上述的功能虽然不是十全十美,但勉强能用,也算是摆脱了总要给学生发题目数据的困扰了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
测试阶段 3 测试用例的分类 3 文本框需求 4 字段为特殊代码校验: 4 文本框为数值型 4 文本框为日期型 5 文本框为时间型 6 密码框 返回目录 6 单选按钮 7 组合列表框/下拉列表 7 数码框(up-down)控件 8 搜索框填充域测试 8 复选框 9 滚动条 9 通过测试: 返回目录 9 失败测试: 10 登陆 10 添加 10 删除 10 查询 返回目录 11 翻页控件 12 树控件的测试外观操作返回目录 12 命令按钮 返回目录 13 一、各种控件在窗体中混和使用时的测试 13 选项卡 返回目录 14 默认焦点 14 TAB顺序 14 快捷键/热键 14 上传文件的测试 14 下载文件的测试 15 【安全性测试】 16 功能测试 v返回目录 16 兼容性测试 17 【性能测试】 17 邮箱输入框字段校验测试 18 验证码输入框字段校验测试 18 替换测试大体相同. 返回目录 19 插入文件 19 链接文件 19 插入对象 19 编辑操作 19 界面测试【UI】 20 窗体 20 标题栏 21 文字 21 控件 21 图片 22 窗口在任务栏上的系统菜单 22 提示对话框测试要点: 23 菜单 23 特殊属性 24 其他 24 新增功能 24 修改功能 24 删除功能 25 查询功能 25 权限检查 26 提示功能检查 26 并发功能 27 导出功能 28 导入功能 28 多币别测试 29 打印功能 29 日志检查 29 导航相关检查 30 返回功能检查 30 重置检查 30 PDF测试 30 发送邮件 31 扫描枪 31 安装测试 31 卸载测试 32 更新 33 键盘操作 33 快捷键支持 34 测试驱动程序设计 34 【易用性测试】 35 导航 功能导航 主要功能的导航是否在明显位置 35 菜单 采用“常用--主要--次要--工具--帮助”的位置排列 35 工具栏 相同或相近功能的工具栏放在一起 36 索引 索引的排列顺序要主次有分 36 按钮 按钮大小基本相近,忌用太长的名称,免得占用过多的界面位置 36 快捷键 常用功能要支持快捷键 36 帮助和支持 获取帮助 操作时要提供及时调用系统帮助的功能 36 通用类 系统业务流程需要易于用户理解 37 错误处理 错误规避 37 错误提示 37 一致性 37 与Windows等标准一致 37 内部操作一致 38 反馈信息 38 工作提示 38 功能提示 38 功能性 38 完备性 38 便捷功能 39 控制 可控性 39 视觉清晰 39 布局 39 资源 39 字体 39 颜色 40 语言 文字表达 40 专项测试角度:push测试(推送测试)、交互模式: 40
hustoj.iso 是一个软件系统镜像文件。Hustoj是一个开源的在线评测系统,它被广泛应用于大学和高中的程序设计教学中。该系统的目标是提供一个方便使用的在线评测和训练环境,使学生能够提交他们的程序代码,并获得即时的评测结果。 hustoj.iso 是Hustoj的系统镜像文件,可以用来部署Hustoj系统。通过将hustoj.iso 文件安装到服务器上,就可以建立一个运行Hustoj系统的评测服务器。用户可以通过web界面访问该服务器,并提交自己的程序代码进行评测hustoj.iso 是一个基于Ubuntu操作系统的镜像文件。它集成了所有Hustoj系统所需要的软件和依赖项,并进行了预配置,使得安装和部署变得更加简单。用户只需要将hustoj.iso文件写入到U盘或光盘中,然后引导服务器从U盘或光盘启动,就可以开始安装Hustoj系统了。 使用hustoj.iso 部署Hustoj系统,可以为学生提供一个良好的在线评测环境,帮助他们进行程序设计的学习和训练。学生可以在该系统中提交自己的程序代码,并获得详尽的评测结果,包括运行时间、内存消耗、错误信息等等。同时,Hustoj还具有包括代码分享、竞赛组织等其他功能,能够满足不同需求的学生。 总之,hustoj.iso 是一个用于部署Hustoj系统的镜像文件,通过安装hustoj.iso,可以搭建一个功能完善、易用的在线评测环境,为程序设计学习提供有力的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值