当前位置: 代码迷 >> 综合 >> 【sduoj】系统综述
  详细解决方案

【sduoj】系统综述

热度:65   发布时间:2023-11-26 10:59:38.0

2021SC@SDUSC

文章目录

  • 项目简介
  • 系统功能
  • 人员分工
  • 前端服务器环境搭建
    • 系统配置
    • 环境配置
      • 更新软件列表
      • 安装配置Nginx

项目简介

该项目名为学生程序设计能力提升平台,是山东大学软件学院学生开发的一套程序在线评测系统。

该系统的开发目的是丰富教学活动。在学校与编程相关的课程中,教师可以通过该系统为学生布置一系列编程题,培养学生主动书写代码的习惯,让学生在教师课堂上接受传统课程培养方式的同时,又能通过Online Judge平台亲手测试自己的代码。让学生们能够在实践中不断地提升编程能力。

项目采用前后端分离的开发模式,前端代码保存在Gitee中,后端代码保存在Github中。

系统功能

该项目仍处于开发阶段,目前已经实现的功能有:

  • 创建账号: 用户可通过邮箱注册账号。注册时须提供用户名、密码、邮箱、以及邮箱验证码;登录则需要使用用户名以及密码(后续会考虑添加学号登录以及邮箱登录)。
  • 身份数据: 管理员端需要通过上传excel表格(列名为“学号”和“姓名”)来上传学生数据,并可以获取当前已上传的学生数据(学号、姓名、绑定码),并可以下载存有该信息的Excel表;管理员还可以实现对单一学生数据的新增和删除。
  • 身份绑定: 用户在设置用户信息界面,可以通过学号、姓名和绑定码将该账号与学生信息进行绑定;管理员通过用户id将用户账号与学生身份绑定。
  • 查看题目: 题目存放在题目集中,普通用户可以看到公开题目集, 用户组中的成员可以看到用户组中发布的题目集;进入题目集可以看到题目集中题目;教师可以查看自己创建的题目和教师公开题目,对自己创建的题目可以进行删除操作。
  • 创建题目:需要教师权限,需要题目标题、难度(1~5)、题目描述;题目的测试点需要的信息有名称、分数(总和100分)、输入、输出和提示(当用户某测试点没过时,会获取该测试点的提示信息);上传文件:压缩包,里面包括一到多组.in文件、.out文件、和scores.txt文件,scores.txt中的数据格式为(测试点名称 分数 #提示#),.in文件和.out文件的“.”前的名称与测试点名称保持一致,总分数也要保证100;下载文件时,文件的格式需上传文件的格式一致;刚创建题目时,题目默认是仅为自己可见,教师可以将其设置为所有教师可见或所有人可见。
  • 解题: 选择编程语言,输入程序代码,点击提交。
  • 查看解题结果: 用户可以看到:测试点是否全部通过、使用语言、提交时间、占用内存、耗费时间、每一测试点是否通过(如果未通过,显示错误信息和提示)。
  • 创建用户组: 需要教师权限,需要填写用户组名称、用户组简介。
  • 操作用户组: 批量添加学生:上传Excel表(学号、姓名)将已绑定的账号拉入到用户组中,此时可以下载未绑定的学生信息Excel表;添加单个学生:用户id、学号、姓名;删除学生、删除该用户组;向用户组集中添加题目集(教师私有、教师公开),需设置开始时间和结束时间(时间可以修改)。
  • 编辑题目集: 教师能实现题目集的创建、删除、添加题目(私有、教师公开、公开)。
  • 获取学生作答情况: 教师可以获取该用户组在某个题目集的学生分数列表(需显示学生学号、姓名、每道题目分数、总分)。

人员分工

  • 小栗帽今天吃什么:学生、教师、管理员主界面布局、身份绑定、出题做题、测试点编辑、题目集管理、开放信息设置、前端服务器搭建配置
  • K?tzchen-408:项目创建、Markdown编辑器嵌入、教师导入学生表、全局引入ajax、路由优化、用户组管理
  • alphahao:后端框架搭建,后端用户鉴权处理框架搭建springsecurity,学生身份相关功能,题解提交相关功能,登录注册相关功能,tomcat、nginx、mysql、rabbitmq搭建配置
  • wocaizhale:出题功能、题目的浏览、搭建文件服务器、保存和维护测试点文件
  • ??Nothing:题目集模块、用户组模块、学生信息管理
  • 孤名为義:需求设计、整理文档、系统优化、补充功能
  • 养猪去:判题沙箱程序(c语言开发)的调研、技术选型、文档整理、判题端(Java)的开发、引入rabbitmq等中间件、引入zookeeper、保证系统可扩容性

前端服务器环境搭建

系统配置

CPU:2核
内存:4GB
带宽:5Mbps
操作系统:Ubuntu Server 20.04 LTS 64位

环境配置

更新软件列表

该命令会访问源列表里的每个网址,并读取软件列表,然后保存在本地电脑。

sudo apt-get update

安装配置Nginx

sudo apt-get install nginx

安装成功后,启动nginx

sudo service nginx start

进入nginx根目录,修改nginx配置文件

cd /etc/nginx
sudo vim nginx.conf

在conf文件中的http字段内添加以下内容:

# 自动将http地址重定向至https
server {listen 80;server_name sduoj.aiolia.top;rewrite ^(.*)$ https://$host$1;
}server {listen 443 ssl; # 监听端口server_name sduoj.aiolia.top; # 域名root /usr/local/vueapps/sduoj; # 服务器部署的对应静态资源根目录ssl_certificate cert/aiolia/sduoj.crt; # 该域名对应的SSL证书ssl_certificate_key cert/aiolia/sduoj.key; # SSL证书对应的私钥ssl_session_timeout 5m;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;# 服务器部署的对应静态资源路径location / {root /usr/local/vueapps/sduoj;index index.html;}# node api server 即需要反向代理的IP地址location /api {proxy_pass  http://api.widealpha.top:8080/sdu-pta;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}
}

nginx.conf文件修改完毕后,输入指令重新加载nginx服务器:

sudo service nginx -s reload