OJ在线判题系统项目

news/2024/12/22 0:18:44/文章来源:https://www.cnblogs.com/Love-XiaoMeng/p/18448744

在线代码测评系统

开源地址

https://gitee.com/xj-oj/oj-project/tree/master

开发环境

  • Java版本:Jdk 17
  • 数据库:MySQL 8.0、Redis 6.2.6
  • 开发工具 :IntelliJ IDEA、Maven 3.8.6

采用技术

  • Spring Boot、MyBatis-Plus、redis
  • vue3、Axios、Element Plus
    img.png

部署运行环境

  • Windows

系统架构设计

img

  • 视图层包括网站主站点和后台管理系统,主站点负责向用户提供服务,是用户看到的系统页面。用户可以在上面进行登录注册、个人信息管理、查看题目、编写代码、提交代码、查看测评状态、查看排名、参加竞赛、查看竞赛结果以及发布文章等主要操作。后台管理系统是专门给系统管理员使用的管理后台,管理员可以在上面进行用户管理、题目管理、竞赛管理、日志管理以及查看系统运行状态等操作。视图层通过Ajax与后端接口进行数据交互。
  • 网络接口层的主要职责是接收用户的请求,根据请求参数的不同,做出不同的响应,响应数据的格式是JSON数据。
  • 业务层包括用户服务、题目服务、竞赛服务、代码服务、测评服务、文件服务、文章服务等功能模块。业务层主要是实现系统功能的代码部分,通过数据映射实现和数据层的交互,从而实现数据的持久化。
  • 数据层是系统最底层,也是最重要的一层,系统中所有的数据均保存在数据层的MySQL服务和Redis服务中。

系统总体设计

本系统主要分为用户和管理员两个主要的模块。用户模块主要包括登录注册、个人中心、题目浏览、代码评测、竞赛参与、文章发布等多个子功能模块。管理员的功能模块包括用户管理、题目管理、测评管理、竞赛管理、文章管理等。本系统详细的功能模块划分图如图所示。

img

代码测评流程图

image-20230919193056867

测评结果设计:

Compile Error:编译错误。用户提交的代码中有语法错误,无法通过编译器检查。

Partial Accepted:部分测评用例通过。表面用户提交的源代码可以通过部分测评用例,还有一部分测评用例无法通过,需要用户考虑其他的可能性。

Accepted:通过。用户提交的源代码经过测试后通过了所有的测评用例,表明用户解决了该题目。

Wrong Answer:答案错误。表示用户提交的源代码的输出结果错误,没有通过任何一个测评用例。

Runtime Error:运行时错误。程序在运行时异常终止,可能的原因有段错误、除0、栈溢出或数组越界等多种错误。

Time Limit Exceeded:超时。用户提交的源代码在测试运行时超出了题目设定的最大运行时间限制,不符合题目的要求。

Memory Limit Exceeded:内存超限。程序在运行时使用的内存空间超出题目设定的内存限制。

System Error:系统错误。在进行代码测评时,测评机器发送错误,这个错误与系统相关。

编译器设置

名称 版本 编译命令
C GCC 4.8.5 /usr/bin/gcc {src_path} -o
C++ G++ 4.8.5 /usr/bin/g++ {src_path} -o
Java JDK 17.0.6 /usr/bin/javac {src_path} -d
Python Python 3.6.8 /usr/bin/python3
Golang Golang 1.20.2 /usr/bin/go build -o {exe_path}
JavaScript Node.js 16.19.1 /usr/bin/node

主要功能实现

(一) 用户模块

  1. 登录注册

注册和登录是系统中其他功能的使用前提,进入注册页面后,用户需要输入用户名、电子邮箱、邮箱验证码、密码和确认密码,只有邮箱验证码和Redis缓存中保存的一致、邮箱未注册、两次输入的密码一致,用户才能注册成功。系统注册页面如图4.1所示。

img

  1. 个人中心

个人中心主要用于向用户展示自己的个人信息。同时用户还可以进行个人资料的编辑和重置密码等操作。如图所示是系统个人中心页面。

img

  1. 查看题目

用户可以在题目列表可以分页查看题目列表,包括题目名称、难度、提交次数、通过率等等信息。题目详情页可以查看题目详细信息和进行代码提交。如图4.3为题目列表页,图为题目详情页。

img

img

  1. 代码测评

代码测评在使用后在如上图4.4页面提交代码后进行的。代码测评的流程如下:

  1. 用户提交代码;
  2. 进行代码安全性检查,检查是否有危害系统运行的代码输入;
  3. 编译代码(不需要编译的语言没有这一步);
  4. 逐一运行测评用例,判断输出结果是否和正确结果一致;
  5. 所有测试用例运行完成后,将结果返回给用户。
  1. 发布文章

发布文章页面中用户需要填写标题、分类、正文等内容。发布文章页面如图所示。

img

(二) 管理员模块

  1. 用户管理

管理员可以对系统中的注册用户进行管理。用户管理页面如图所示。

img

  1. 题目管理

管理员可以对当前系统中的题目进行管理。题目管理页面如图所示。

img

  1. 测评管理

管理员进入测评管理模块后,可以查看题目测评记录。当然这些测评记录都是用户提交代码进行测评时生成的。测评管理页面如图所示。

img

  1. 竞赛管理

管理员是系统中唯一可以对竞赛进行管理的角色。竞赛管理包括查看、创建和删除等操作。创建竞赛时需要设定竞赛的开始和结束时间。竞赛管理页面如图所示。

img

  1. 文章管理

管理员可以对文章进行管理。实现了查看文章列表、删除文章等功能。文章管理页面如图所示。

img

开发过程

整体架构

  • 后端服务
  • 后端管理界面
  • 前端显示界面

后端服务

技术选型

  • SpringBoot
  • MySql
  • Redis

后端管理界面

技术选型

  • Html、Css、 JavaScript
  • thymeleaf
  • 组件库 Layui

前端显示界面

技术选型

  • Vue
  • 组件库 Element-plus
  • 文本编辑器 TODO

人员分工(垂直分工)

项目整体架构,有三端,前端显示界面,后端管理界面,后端代码逻辑

分工方式为,根据业务功能,完成相应三端代码的编写以及MySql表的设计

每个模块都会用到JavaScript、Css、Html、Vue、Java、Sql、MybatisPlus等技术

另外每个模块均由自己完成单元测试

代码执行

  • 各个语言代码的执行逻辑环境和代码编写(C、C++、Python、Java、Go已经实现)
  • 前端首页、关于界面
  • 前端、后端代码脚手架编写
  • 代码执行逻辑解耦、完成代码沙箱
  • 代码执行安全管理
  • 接口文档接入
  • 功能测试

使用到的技术:FileUtils、Runtime、Vue3、Element-Plus、thymeleaf、knife4j

题目测评

  • 测评结果(Evaluation模块内容)
  • 解决跨域问题
  • 完成腾讯cos服务的接入
  • 代码编辑界面

使用到的技术:

image-20240924112142857 image-20240924112223751

代码编辑器 https://github.com/koca/vue-prism-editor/blob/master/README.md

题目管理

  • 题目管理
  • 题目创建、题目测试用例添加

使用到的技术:无特别技术

文章管理

  • 博客创建
  • 个人对自己创建博客的管理(编辑和删除)
  • 博客的浏览
  • 博客的搜索

使用到的技术:

富文本编辑器 wangEditor 文档地址https://www.wangeditor.com/

登录逻辑

  • 前端显示界面登录
  • 后端管理界面登录、
  • 邮箱验证注册
  • 个人信息简介

使用到的技术:

前端登录:Cookies、Redis(不必要可以不讲)

后端登录:拦截器 LoginInterceptor、Cookies

邮箱配置:

image-20240924113300957

用户管理

  • 用户管理
  • 用户排名设计

使用到的技术:无特别技术

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/808788.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Trie

835. Trie字符串统计 模板题: 维护一个字符串集合,支持两种操作:I x 向集合中插入一个字符串 x; Q x 询问一个字符串在集合中出现了多少次。共有 N 个操作,所有输入的字符串总长度不超过 10^5,字符串仅包含小写英文字母。 输入格式 第一行包含整数 N,表示操作数。 接下来…

#2024-2025-1学号20241309《计算机基础与程序设计》第二周学习总结

作业信息这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计这个作业要求在哪里 2024-2025-1计算机基础与程序设计第二周作业这个作业的目标作业正文 2024-2025-1学号20241309《计算机基础与程序设计》第二周学习总结教材学习内容总结 《计算机科学概论》第一章 1.计算系统…

Ubuntu20.04安装LabelImg 以及出现(ModuleNotFoundError: No module named libs.resources)错误

安装 Ubuntu系统安装labelImg: sudo apt install pyqt5-dev-tools接下来,通过 GitHub 下载 LabelImg: git clone https://github.com/tzutalin/labelImg.git cd labelimg-master cd requirements/ sudo pip3 install -r requirements-linux-python3.txt -i https://pypi.tun…

shctf 有感

当我打ezapk的时候 见到了这个代码我看的出这是先进行key异或加密后再转base64和目标对比(其实我漏了一个要先转UTF-8,但是我只会用C语言写base64解码,不会UTF-8解码),百思不得其解怎么写shellcode,听了某大跌建议,直接咨询AI,然后被喂了个python代码,ctrlc+ctrlcv就解…

三千字长文:我知道的输入法技巧都在这了

这些技巧能让你打字更快、更好。这些技巧能让你打字更快、更好。 ‍ 官方设置 目前市面上有很多输入法软件,其中很多功能都是共有的,因为都是基础功能。因此,当选择了一款输入法好,可以先打开设置页面,好好地了解有什么功能。 此外,还可以看输入法官网文档,例如搜狗输入…

通过图片中信息得出地点

图片中会隐藏信息,比如右下角的小票将它翻转,可以看到 erbang Alaf Restaurant,Bangunan,Jalan SS21/39,Selang,这些字眼,于是直接用浏览器搜索 Gerbang正好填补了没看到的缺角, 地址上的Bangunan,Jalan SS21/39符合小票上的字,说明这就是图中的餐厅 作者想说,当要发布照…

实验1:UML与面向对象程序设计原则

[实验任务一]:UML复习 阅读教材第一章复习UML,回答下述问题: 面向对象程序设计中类与类的关系都有哪几种?分别用类图实例说明。 1、关联关系2、聚合关系3、依赖关系4、组合关系[实验任务二]:单一职责原则 登录模块在实际项目开发中很常见,请按照教材28页(PPT49页)利用单…

图片地点

图片中会隐藏信息,比如右下角的小票将它翻转,可以看到 erbang Alaf Restaurant,Bangunan,Jalan SS21/39,Selang,这些字眼,于是直接用浏览器搜索 Gerbang正好填补了没看到的缺角, 地址上的Bangunan,Jalan SS21/39符合小票上的字,说明这就是图中的餐厅 作者想说,当要发布照…

等保2.0理解

等级保护(分等级保护,分等级监管):对信息系统分等级实行安全保护 对安全产品分等级管理 对安全事件分等级响应,处置动作:定级,备案,建设整改,等级测评,监督检查 风险评估,安全监测,通报预警,案事件调查,数据防护,自主可控,供应链安全,效果评价,综合考核,等等…

P10418 [蓝桥杯 2023 国 A] 相连的边 题解

一个比较有趣的树形 DP,情况比较多。 【题目简述】 给定一棵树,求三条相连的边,其边权之和最大。 【思路】 以 X 代表当前节点,S 表示儿子,G 表示孙子,P 表示父节点。首先把树建出来,在以下图中,我们模拟二号点的 DP 过程,考虑以下几种情况:有一条边指向父节点时FG(…

订单交易平台三(登录界面整个实现过程)阶段一(只实现简单的登录功能)

1.在视图函数account进行写代码逻辑(需要了解django中form组件的知识、md5码加密、脚本的编写) 1.1 登录界面后端的编写 """ 在account.py文件 """from django.shortcuts import render, redirect from web import modelsfrom utils.encrypt …