hanbangze 发表于 2022-8-26 21:52

用C++编写一款OJ系统

相信OJ对熟悉计算机的朋友来讲都是一个很熟悉的名字,可你有没有想过,自己能不能作一款OJ系统呢?其实很简单。
大多数评判机都是linux的,所以我们也在linux上编写这玩意。
整个代码,只需要掌握一个技能:数据重定向。如果你想知道这是什么玩意,那就自己去百度吧。
整个程序的运行效果是这样的:



代码如下:
//The program requires three parameters.Usage:
//./OJ user_program input_file answer
//Example:
//./OJ a.cpp a.in a.out
//Notice:
//You may need to use data redirection to save the result.
#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;
int main(int argc,char *argv[])
{
        string program_path=argv;
       
        string compile_cmd="g++ -o check_program "+program_path;
        system(&compile_cmd);
        ifstream check_ce("check_program");
        if(!check_ce)
        {
                cout<<"Compile Error"<<endl;
                return 0;
        }
        ofstream output("user.ans");
        output.close();
        string check_cmd="./check_program >user.ans <";
        check_cmd+=argv;
        system(&check_cmd);
        ofstream user_md5("usermd5");
        user_md5.close();
        system("md5sum user.ans >usermd5");
        ofstream answer_md5("answermd5");
        answer_md5.close();
        string verification="md5sum ";
        verification+=argv;
        verification+=" >answermd5";
        system(&verification);
        ifstream user_get("usermd5");
        string usermd5;
        user_get>>usermd5;
        ifstream ans_get("answermd5");
        string ansmd5;
        ans_get>>ansmd5;
        if(usermd5==ansmd5)
        {
                cout<<"Accepted"<<endl;
        }
        else
        {
                cout<<"Wrong Answer"<<endl;
        }
        system("rm check_program");
        system("rm answermd5");
        system("rm user.ans");
        system("rm usermd5");
        return 0;
}

制作不易,给个评分吧~~~

wuditieniu 发表于 2023-7-8 08:17

这个肯定不能算作是online judge的,只能算作是代码验证正误的一个脚本,而且还只能离线运行,和真正的oj差了十万八千里了

hanbangze 发表于 2022-8-30 21:18

coolcalf 发表于 2022-8-28 13:11
QJ 是什么意思,抢劫?

OJ可以判断你的程序是否存在逻辑错误或语法错误

dork 发表于 2022-8-27 11:09

连半成品都不算

qingfeng0923 发表于 2022-8-27 12:29

啊这,好家伙

seawaycao 发表于 2022-8-27 12:53

谢谢分享!

zgszwp 发表于 2022-8-27 13:11

加油阿,给力

coolcalf 发表于 2022-8-27 13:49

Qiang Jie ?

hanbangze 发表于 2022-8-27 17:06

coolcalf 发表于 2022-8-27 13:49
Qiang Jie ?

您这句话是什么意思?我不太理解。

coolcalf 发表于 2022-8-28 13:11

hanbangze 发表于 2022-8-27 17:06
您这句话是什么意思?我不太理解。

QJ 是什么意思,抢劫?

shenwang250 发表于 2022-8-29 11:02

大神都是真没朴实无华吗?
页: [1] 2
查看完整版本: 用C++编写一款OJ系统