关于在线OJ训练营项目的设计思路

1. 项目描述

  该系统类似于LeetCode的代码练习功能,提供了一个用户可以在线编写代码并且能够进行编译的环境,在编写代码的同时提供了语法纠错、代码高亮、自动补全等基本功能。
  用户可以通过域名访问服务器,系统内置了多道编程题,用户点击对应题目就可以进行练习。并且题目内含有大量测试样例,服务器会根据用户代码会进行用例的测试,检测用户代码是否符合题意。并且可以将编译出错的原因返回给用户端。

2. 模块

2.1 在线编译器模块

  能够将网页中用户输入的代码内容放入服务器中,并进行编译,运行,比对结果。

实现功能

  • 获取需要编译代码的临时文件
  • 调用g++进行编译,将编译结果进行存储
  • 如果文件编译错误或运行时错误,需要记录到文件中去
  • 运行可执行文件,执行测试用例代码,将运行结果进行记录
  • 将记录结果发送给客户端

2.2 题目管理模块

  管理当前系统中的所有OJ题目及具体题目描述,用例代码。页面以列表形式显示所管理的题目,并且用户点击题目可以跳转到详情页进行代码的编写及提交。

具体功能

  • 获取所有的题目列表 /all_question
  • 点击指定题目,可以获取题目的详细内容,并且可以书写代码 /quesion
  • 调用在线编译模块进行编译和运行 /compile
  • 解析运行结果,如果正确返回正确结果,如果错误返回错误情况 result

2.3 工具模块

  该模块提供了许多具体工具,可以提高开发效率。

具体工具

  • 时间戳工具: 用来生成不重复文件名
    文件名: tmp_ + “时间戳” + 序号 + ‘.类型’ (保证了文件名的唯一性)
  • 日志打印工具: 用来记录代码执行记录
  • 文件读写功能: 重新封装文件读写函数,方便使用
  • URL解析模块: 使用boost库提供的函数进行解析,解析出有效载荷,分离出用户提交代码与用户输入。

3. 模块实现细节

3.1 在线编译

3.1.1 搭建HTTP服务器

  使用第三方库HttpLib进行搭建,搭建出的服务器支持多连接。通过库中的函数进行请求的接收与响应。

server.Post("/compile", [](const Request& req, Response& resp) {
   

});
server.list
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值