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\result
xcopy /y d:\onlinejudge\in.txt d:\onlinejudge\result
xcopy /y d:\onlinejudge\answer.txt d:\onlinejudge\result
cd /d d:\onlinejudge\result
g++ a.cpp
if not exist a.exe (
g++ a.cpp>error.txt 2>&1
echo 4 >result.txt
xcopy /y d:\onlinejudge\result\result.txt d:\onlinejudge
del /f /s /q d:\onlinejudge\result
exit
)
set /a start_time=(1%time:~9,2%-100)*10+(1%time:~6,2%-100)*1000
start d:/tmp.bat
type in.txt|a.exe >out.txt
set /a end_time=(1%time:~9,2%-100)*10+(1%time:~6,2%-100)*1000
set /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.txt
xcopy /y d:\onlinejudge\result\result.txt d:\onlinejudge
xcopy /y d:\onlinejudge\result\time.txt d:\onlinejudge
del /f /s /q d:\onlinejudge\result
exit
)
fc answer.txt out.txt
if %errorlevel% EQU 0 (echo 0 >result.txt) else (echo 1 >result.txt)
echo %used_time% > time.txt
xcopy /y d:\onlinejudge\result\time.txt d:\onlinejudge
xcopy /y d:\onlinejudge\result\result.txt d:\onlinejudge
del /f /s /q d:\onlinejudge\result
exit还有一个tmp.bat用来控制时间的
echo off
cd /d d:/onlinejudge/result
choice /t 1 /d y /n >nul
tasklist /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的值就可以了.
439



被折叠的 条评论
为什么被折叠?



