1. 项目的完整设计方案

  1.1 系统总体架构

    本项目的设计,放弃了C/S系统,而是采用B/S系统,即浏览器/服务器系统。之所以采用B/S的体系结构,主要考虑到系统的方便性,用户无需安装客户端即可使用该系统,这样给本系统的用户减少了很多不必要的麻烦,而且方便对系统进行更新维护。使用的框架主要是Mybatis+Spring+SpringMVC框架,即当今较为流行的SSM框架,SSM框架基于MVC模型。MVC模型的结构包括Model模型层,View视图层,Controller控制层。在线答题平台的架构主要分为6个层次,包括前端UI、展示层、业务层、数据层、数据库和运行环境,如下图为系统的系统架构图:

在线答题系统 python 在线答题系统流程图_流程图

   1.2 运行环境和技术选型说明

    本系统搭建时选用时选用Java作为开发语言,采用SSM框架,前端我们暂定html+css+JavaScript开发,后续使用什么框架待定。同时,本项目的一个重难点是分布式独立靶机的搭建,因为CTF中的web方向与PWN方向的答题环节需要搭建在在线环境中,每个用户要去答题,则需要生成一个独立的在线环境,各用户之间的操作不会影响到别人的在线环境,用户最终要从在线环境中抽丝剥茧找到最终的答案即flag,这就需要到了分布式独立靶机,

比传统虚拟机更加轻便,传统虚拟机启动耗时为分钟级别,而Docker容器启动仅为秒级别,这极大的提高了用户体验。且每个容器相互隔离,每个容器都有自己的文件系统,容器之间进程不会相互影响,能够给不同的用户提供不同的环境,使得相互之间的操作互不干扰。Docker实现了“一次构建、随处运行”,因此我们可以将用户所需的靶机环境封装进入一个镜像,当发出靶机构建请求时,便会构建该镜像的实例即容器,进而成功搭建靶机环境。

在线答题系统 python 在线答题系统流程图_Docker_02

    综上,本项目各项技术与工具选择如下:

  • Java采用Jdk1.8版本
  • 开发工具选择IntelliJ IDEA 2020.3 x64
  • 数据库选择使用mysql5.7版本
  • 服务器暂选用阿里云服务器,2G内存 1核 硬盘40G 的轻量应用服务器,公网IP为106.15.248.81:8000
  • 服务器搭载镜像版本为Ubuntu 20.04
  • 采用Docker技术搭建分布式动态独立靶机         

    因为本系统采用B/S系统,因此用户通过web浏览器便可使用我们的系统。

   1.3 用户接口API

    本系统采用B/S架构,系统提供给普通用户的接口WEB API如下图所示:

在线答题系统 python 在线答题系统流程图_数据库_03

    系统提供给管理员的接口WEB API如下图所示:

在线答题系统 python 在线答题系统流程图_Docker_04

2. 概念原型的不同视图 

  2.1 依赖视图

    本系统采用MVC框架,下图展现了软件模块之间的依赖关系与MVC模型的逻辑流。

在线答题系统 python 在线答题系统流程图_在线答题系统 python_05

  2.2 执行视图(流程图展示)

    2.2.1 用户登录注册流程图

在线答题系统 python 在线答题系统流程图_流程图_06

 

     2.2.2 用户答题流程图(左)与积分兑换流程图(右)

在线答题系统 python 在线答题系统流程图_数据库_07

    2.2.3 加入战队流程图(左)与组队比赛流程图(右)

 

在线答题系统 python 在线答题系统流程图_数据库_08

  2.3 部署视图

  • 项目部署于阿里云服务器上,用户可通过web浏览器(google,firefox等)访问本项目的公网IP:106.15.248.81:8000。在阿里云服务器80端口上部署apache2服务。
  • 在阿里云服务器8000端口上进行Docker环境的搭建,用户可通过向8000端口发出靶机搭建请求,Docker会自动搭建独立式分布靶机环境。
  • 同时服务器与本地数据库进行连接,将网站与用户相关数据存入本地数据库。

在线答题系统 python 在线答题系统流程图_数据库_09

  2.4 工作分配视图

在线答题系统 python 在线答题系统流程图_数据库_10

 

3. 项目的数据库设计

  3.1.数据库的概念数据模型(E-R图)

在线答题系统 python 在线答题系统流程图_数据库_11

   3.2.数据库的物理数据模型(仅给出关键数据库设计)

    用户信息(user)表

属性名

类型

是否可为空

描述

user_id

integer

N

用户编号

username

varchar

N

用户名

nickname

varchar

N

昵称

password

varchar

N

密码

sex

varchar

Y

性别

email

varchar

Y

邮箱

telephone

varchar

Y

手机号

school

varchar

Y

学校

introduction

varchar

Y

个人简介

user_points

integer

N

用户积分

solved_problems

integer

N

解题数

user_images

varchar

N

用户头像

team_id

integer

Y

队伍编号

    题目(problem)表

属性名

类型

是否可为空

描述

problem_id

integer

N

题目编号

problem_titile

varchar

N

题目标题

difficulty

integer

N

难度系数

problem_description

varchar

N

题目描述

problem_scene

varchar

Y

题目场景

problem_appendix

varchar

Y

题目附件

problem_answer

varchar

N

题目答案

problem_points

varchar

N

题目积分

problem_type_id

integer

N

题目类型编号

problem_area

varchar

N

题目区域类型

    用户答案(user_answer)表

属性名

类型

是否可为空

描述

answer_id

integer

N

用户答案编号

user_id

integer

N

用户编号

problem_id

integer

N

题目编号

answer_content

varchar

N

答案内容

answer_time

time

N

解题时间

    竞赛(contest)表

属性名

类型

是否可为空

描述

contest_id

integer

N

竞赛编号

contest_title

varchar

N

竞赛主题

sponsor

varvhar

N

主办方

start_time

time

N

竞赛开始时间

end_time

time

N

竞赛结束时间

contest_introduction

varchar

Y

竞赛介绍

team_nums

integer

N

参赛队伍数

    队伍(team)表

属性名

类型

是否可为空

描述

team_id

integer

N

队伍编号

team_name

varchar

N

战队名称

leader_id

integer

N

队长id

team_nums

integer

N

战队人数

team_points

integer

N

战队积分

team_create_time

time

N

战队创建时间

    商城商品(goods)表

属性名

类型

是否可为空

描述

goods_id

integer

N

商品编号

goods_name

varchar

N

商品名

goods_points

integer

N

商品所需积分

goods_stock

integer

N

商品库存

goods_offer

varchar

N

商品提供方

    题解(explanation)表

属性名

类型

是否可为空

描述

explanation_id

integer

N

题解编号

explanation_content

varchar

N

题解内容

problems_id

integer

N

题目编号

user_id

integer

N

发布者编号

explanation_time

varchar

N

发布时间

4.项目的实现视图 

   项目源代码的目录文件结构如下图所示:

在线答题系统 python 在线答题系统流程图_流程图_12

    项目名称为ctfplatform,main目录向下细分为如下几个目录:

      java.cn.ctf(存放后端代码)

  • controller:存放控制层代码,控制器与前端进行交互,进行请求参数的响应与处理。
  • dao:存放持久层代码,与数据库进行交互。
  • domain:存放实体类的代码。
  • service:用于处理业务逻辑。
  • test:测试代码。
  • utils:存放一些工具类与算法类的实现代码。           

      webapp(存放前端代码)

  • css:存放css样式文件。
  • images:存放需要的image等图片文件。
  • js:存放JavaScript代码。
  • pages:存放页面html文件。 
  • web.xml:进行前端与后端的交互。       

      resources(存放配置文件)

      External Libraries目录:存放依赖包。

5. 系统概念原型的核心工作机制

  普通用户:

  • 普通用户可以注册账号,注册成功后进行登录
  • 用户可以查看题库的题目,根据兴趣选择某个题目进行答题,输入最终的结果查看正确与否。
  • 用户可以进一步的查看该题目的相关题解或者在题目下方评论区发表自己的意见。若用户有更好的题解,用户可以发布自己的题解。
  • 若用户欣赏某个题目或者题解,可以进行收藏与点赞。
  • 用户回答对了题目可以获得题目对应的积分,用户可以去商城中利用积分兑换商品。
  • 用户可以查看自己的收藏列表,查看自己收藏的题目。
  • 用户还有自己的个人中心,其中可以查看答题记录,已答的题目数目,个人积分等。
  • 用户也可以上传题目,管理员审核通过后,便可以上线题目。
  • 另外本平台提供Rank榜单,根据答题数目与积分进行排序,用户可以查看排行榜。

   管理员:  

  • 管理员用户主要对一些东西进行审核,管理员可以进行题目的管理,进行增删改查。
  • 对题解进行管理,发布正确的题解。
  • 审核评论区,删除不正当发言。
  • 管理员也可以发布公告,告知一些重要的事情。
  • 商品若有更新,管理员也可以对商城进行更新。
  • 管理员也可查看注册用户信息。