在线判题系统

本文介绍了在线判题系统的各个关键模块,包括编译运行模块、题目管理模块、API模块和辅助模块。编译运行模块涉及用户代码提交、编译、运行及结果返回;题目管理模块实现了题目的增删改查;API模块提供了HTTP接口实现前后端交互;辅助模块封装了JDBC操作、文件读写和HTTP请求内容提取。
摘要由CSDN通过智能技术生成

1.编译运行模块

a. 用户提交代码模块:

完成用户代码的输入,只需设置Question类的实例化对象中的code属性,用get和set方法

b.编译运行的整个过程
创建一个Task类:
成员变量有目录、要编译执行的类名、要编译执行的文件名、程序标准输出放置的文件、程序标准错误放置的文件、程序编译出错详细信息放置的文件

public class Task {
   
    // 此处罗列出需要的临时文件(用于进程间通信)文件名约定
    // 所有的临时文件要放到这个目录中
    private String WORK_DIR;
    // 要编译执行的类的名字, 影响到源代码的文件名
    private String CLASS = "Solution";
    // 要编译执行的文件名
    private String CODE;
    // 程序标准输出放置的文件
    private String STDOUT;
    // 程序标准错误放置的文件
    private String STDERR;
    // 程序编译出错的详细信息放置的文件
    private String COMPILE_ERROR;

    public Task() {
   
        // 先生成唯一的id, 根据这个 id 来拼装出目录的名字
        WORK_DIR = "./tmp/" + UUID.randomUUID().toString() + "/";
        // 然后再生成后续的这些文件名
        CODE = WORK_DIR + CLASS + ".java";
        STDOUT = WORK_DIR + "stdout.txt";
        STDERR = WORK_DIR + "stderr.txt";
        COMPILE_ERROR = WORK_DIR + "compile_error.txt";
    }

成员方法的参数是自己构造的Question类(code:用户在网络上编辑的这段代码),返回值是Answer类(errno、reason、stdout、stderr)
CompileAndRun方法

 // Question 表示用户提交的代码
    // Answer 表示代码的编译运行结果
    public Answer compileAndRun(Question question) throws IOException, InterruptedException {
   
        Answer answer = new Answer();
        // 0. 给这些临时文件准备好一个目录
        //    判定 WORD_DIR 是否存在. 如果存在就跳过. 不存在就创建目录
        File file = new File(WORK_DIR);
        if (!file.exists()) {
   
            // 创建对应的目录
            file.mkdirs();
        }
        // 1. 先要准备好需要用到的临时文件
        //    要编译的源代码的文件(首先搞这个)
        //    编译出错要放进一个文件
        //    最终运行的标准输出标准错误也要分别放到文件中
        FileUtil.writeFile(CODE, question.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值