码迷,mamicode.com
首页 > 其他好文 > 详细

在线OJ项目

时间:2020-06-15 09:20:49      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:配置   日志模块   并且   信息   三方   编译   展示   错误   cte   

需求:实现一个在线判题系统,用户通过浏览器编写和提交代码,通过网络传输,将代码上传到后台,后台对提交的代码进行编译运行,将编译运行结果反馈给用户
在线OJ前后台的流程:
技术图片

第三方库:httplib,json,ctemplate,boost

项目分为五大模块:
网络服务模块
搭建http服务器:
本人采用的是GitHub上提供的开源的httplib.h库,在搭建http服务的时候,只需要我们包含该头文件就可以使用了
提供http服务,串联试题模块和编译运行模块
1.获取题目列表
2.提交选中的题目
3.提交题目代码和题目描述,代码的编译框
试题模块
1.从配置文件中加载题目
a.配置文件格式:
约定配置文件当中对题目的描述
题目的编号,题目的名字,题目所在的目录,题目难度
b.加载题目的配置文件,使用数据结构保存加载出来的题目的介绍信息
c.针对每一道题目而言,需要根据给出的路径进行加载
2.提供获取整体题目的接口
给网络服务模块提供一个可以获取所有题目描述的接口,展示给用户
3.提供单个题目的接口
给网络服务模块获取单个题目描述和作答的接口,展示给用户
编译运行模块
1.编译
a.将用户提交的代码写到文件中
b.创建子进程,并且进行程序替换为g++程序,进行编译源码文件
c.获取编译结果写到标准输出文件当中或者写入标准错误文件中
2.运行
a.如果代码走到运行阶段,说明一定编译出来可执行程序了,创建子进程,并且让子进程进行程序替换,替换成可执行程序
b.将程序运行结果,保存到标准输出或者标准错误文件中
日志模块
1.提供时间戳服务:为了区分不同的用户提交的代码,当代码写到文件当中的时候,使用时间戳来进行一个区分
工具模块
1.实现切割字符串的函数
2.提供写文件操作
3.提供读文件操作
4.提供URL解码操作

源码地址:https://github.com/wake5up/My-c--code/tree/master/OJ-project

在线OJ项目

标签:配置   日志模块   并且   信息   三方   编译   展示   错误   cte   

原文地址:https://blog.51cto.com/14233078/2504472

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!