简易OJ系统(福州大学软件工程实践作业)
1 .在开始实现程序之前,在下述PSP表格记录下你估计将後序的各个模块的开发上耗费的时间。然 后在你实现煮序之后,在附录提供的PSP表格记录下你在程序的各个模块上实际花费的时间。
| 模块 | 预计时间 | 实现时间 |
| 前端 | 两周 | 一周半 |
| 后端 | 两周 | 两周 |
2.记录每周的学习条(见附录)
3.评测模块接口的设计与实现过程。设计包括代码如何组织,比如会有几个类,几个函数,他们之间 关系如何,关键函数是否需要画出瞧图?说明你的设计的关键(不必列出源代码),以及独到之 处。
大体可分为四步:
第一步:利用js向后端judge.php发起评测请求,并将用户代码作为参数进行发送
第二步:用GET方式获取到js从前端传递过来的代码后,利用php的文件操作将其写入本地的文件中
第三步:php执行外部指令,调用写好的python评测脚本,python评测脚本会找到刚刚写入代码的文件,并用编译器将其编译为可执行程序,随后开一个子进程,将子进程的输入重定向到测试样例的输入文件,得到子进程的输出后与测试样例的的输出文件进行比对,然后返回比对结果。
第四步:php获取到python脚本传回来的比对结果后,再将其传递给前端的js,由js控制html来向用户反馈评测结果。
4.评测模块部分单元测试展示。展示出项目部分单元测试代码,并说明测试的函数,构造测關据的 思路。并将单元测试得到的测试覆盖率截图,发表在博客中。
unction judge(code) {
var status = document.getElementById("status");
var status_ani=document.getElementById("status_ani");
status.style.color = "darkgrey";
status.innerHTML = "评测中";
status_ani.style.display="block";
if (typeof ActiveXObject != "undefined") {
var version = [
'Msxml2.XMLHTTP.6.0',
'Msxml2.XMLHTTP.5.0',
'Msxml2.XMLHTTP.3.0',
'Msxml2.XMLHTTP',
'Microsoft.XMLHTTP'
];
for (var i = 0; i < version.length; i++) {
try {
var obj = new ActiveXObject(version[i]);
if (typeof obj != "undefined")
break;
} catch (e) { }
}
} else var obj = new XMLHttpRequest();
obj.onreadystatechange = function () {
if (obj.readyState == 4 && obj.status == 200) {
status_ani.style.display="none";
var res=obj.responseText[0];
if (res == "1") {
status.style.color = "green";
status.innerHTML = "答案正确";
}
else {
status.style.color = "red";
status.innerHTML = "答案错误";
}
}
}
code = encodeURIComponent(code);
obj.open("get", "/judge/judge.php?code=" + code, true);
obj.send();
}
1·创建请求对象
2、设置回调函数
3、防止中文乱码,对获取到的代码进行编码
4、发生请求
5.评测模块部分异常处理说明。在博客中详细介绍每种异常的设计目标。每种异常都要选择T•单元 测试样例发布在博客中,并指明错误对应的场景。
在创建请求对象的时候,为了防止浏览器兼容性的问题进行了异常处理,如果浏览器支持创建ActiveXObject 对象,否则创建XMLHttpRequest对象
6.遇到的困难及解决方法。
在搭建apache、PHP和Mysql的时候因为不熟悉系统不会搭建,就在博客上寻找别人的教程
7.在本次作业的当中的感想与收获。
一个人真的是太难了

浙公网安备 33010602011771号