用来实现OJ判题的windows批处理

来源:互联网 发布:五星广电软件 编辑:程序博客网 时间:2024/05/29 14:01

JAVA WEB的大作业想做一个简单的OJ,首先要实现的是拿到一份源代码后怎么去编译,获取编译错误信息,然后在时间限制内运行得到答案,最后比较答案和标准输出是否一致.我用的是windows的批处理程序,到时候用java调用这个程序得到结果.

第一步:

在d盘下建一个叫onlinejudge的文件夹,然后在这个文件夹下建5个文档,分别是a.cpp,answer.txt,in.txt,result.txt,time.txt,分别用来储存源程序,标准输出,输入,程序结果代码(0->AC,1->WA,2->TLE,3->RE,4->CE,TLE和PE还不知道怎么搞),程序运行时间,再建一个文件夹叫result.

第二步:

写一个command.bat的批处理程序,内容是

xcopy /y d:\onlinejudge\a.cpp d:\onlinejudge\resultxcopy /y d:\onlinejudge\in.txt d:\onlinejudge\resultxcopy /y d:\onlinejudge\answer.txt d:\onlinejudge\resultcd /d d:\onlinejudge\resultg++ a.cppif not exist a.exe (g++ a.cpp>error.txt 2>&1echo 4 >result.txtxcopy /y d:\onlinejudge\result\result.txt d:\onlinejudgedel /f /s /q d:\onlinejudge\resultexit)set /a start_time=(1%time:~9,2%-100)*10+(1%time:~6,2%-100)*1000start d:/tmp.battype in.txt|a.exe >out.txtset /a end_time=(1%time:~9,2%-100)*10+(1%time:~6,2%-100)*1000set /a used_time=%end_time%-%start_time%if %errorlevel% NEQ 0 (if %errorlevel% EQU 1 (echo 2 >result.txt) else (echo 3 >result.txt)echo %used_time% > time.txtxcopy /y d:\onlinejudge\result\result.txt d:\onlinejudgexcopy /y d:\onlinejudge\result\time.txt d:\onlinejudgedel /f /s /q d:\onlinejudge\resultexit)fc answer.txt out.txtif %errorlevel% EQU 0 (echo 0 >result.txt) else (echo 1 >result.txt)echo %used_time% > time.txtxcopy /y d:\onlinejudge\result\time.txt d:\onlinejudgexcopy /y d:\onlinejudge\result\result.txt d:\onlinejudgedel /f /s /q d:\onlinejudge\resultexit
还有一个tmp.bat用来控制时间的

echo offcd /d d:/onlinejudge/resultchoice /t 1 /d y /n >nultasklist /nh|find /i "a.exe"if errorlevel 1 (echo success) else (taskkill /f /im a.exe)exit

第三步:

java程序往a.cpp里写程序,再调用command.bat,然后读取result.txt和time.txt的值就可以了.

1 0