项目实战---在线OJ
在线OJ 项目功能 :类似于LeetCode及牛客网的在线答题系统,浏览器请求服务器可以获得所有试题信息,包括题目编号、题目名称、题目难度,用户可以选择某一道题进行作答,服务器返回题目描述信息以及预定义好的代码模板,用户编写完代码后浏览器将用户提交的代码返回给服务器,服务器将用户提交的代码与预定义好的题目测试用例结合编译运行,并将结果返回给浏览器告知用户通过率。 上述的功能依赖于几个模块相互配合实现,如下图 接下来就对这几个模块详细的介绍 1.试题模块 在本地创建一个目录保存所有的试题,描述某一道试题时将试题编号、试题名称、试题所在路径、试题难度通过结构体组织起来,试题所在路径中保存着这道题目的描述(desc.txt)、这道题的预定义代码(header.cpp)以及这道题的测试代码(tail.cpp) class Exam { public: std::string _id; std::string _name; std::string _path; std::string _star;//试题难度 }; 所有试题通过unordered_map保存,通过题目编号就可以在unordered_map中得到该试题的所有信息,这样也使查询效率最高。 当浏览器请求所有试题时,试题模块遍历整个unordered_map拿到所有试题信息,然后通过渲染模块返回给浏览器