简易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.在本次作业的当中的感想与收获。

一个人真的是太难了

 

posted @ 2020-12-28 22:04  巨嘴怪兽  阅读(279)  评论(0)    收藏  举报