暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

基于Java+SpringBoot+Vue在线培训考试系统设计与实现

卡布奇诺海晨 2023-01-16
947

前言

   考试管理系统是一个信息处理的库系统,通过调用编程语言的库函数来进行编写考试管理系统,能够提高编程效率,降低开发成本。计算机的快速发展已经为考试管理系统在社会发展奠定了基础。落后的手工服务也不能够满足广大用户的需求,随着计算机的快速发展,学校开始突破传统的模式,和计算机技术相结合。紧密联系社会的需求,提供的服务是信息化的,能够满足用户的需求,简化了考试管理系统,间接提高了系统的安全性。随着大数据时代来临,信息存储要比以往大得多。在计算机快速发展的今天,有必要采用一套智能化高,操作简单的考试管理系统,这样可以方便管理员和用户,所以开发一个便于操作的管理系统是很有必要的。

    21世纪是大数据时代,在信息管理方面,数据量非常多,因此要对大量数据进行处理,所以人们利用计算机开发大量管理系统。计算机的最大好处在于自动化,因此使用计算机处理数据,大大地提高了效率,还提高了系统的安全性。对于越复杂的数据处理,就越能体现计算机的优势。考试管理系统中数据众多,需要处理很多数据。刚开始,对信息处理方式主要是手工的方式进行管理。由于数据量巨大并且还用人工的方式进行管理,则容易出现问题。而且当数据量多起来的时候,数据容易丢失,查找起来也不容易。这样会导致效率低下。

  CeaM在线学习考试系统应运而生,是一款基于JAVA开发的,使用SpringBoot+Vue开发的一款多角色在线培训考试系统平台,系统集成了用户管理、角色管理、部门管理、题库管理、试题管理、试题导入导出、考试管理、在线考试、错题训练等功能,考试流程完善。

系统设计

1、系统运行环境

开发系统:Windows10

架构模式:MVC/前后端分离

JDK版本:Java JDK1.8

开发工具:IDEA

数据库版本:mysql5.7

数据库可视化工具:SQL yog或Navicat for MySQL

服务器:SpringBoot自带 apache tomcat

主要技术:Java、SpringBoot、MyBatis-plus、MySQL、Shiro、Html、Vue、Elementui等

2、系统架构设计

系需求分析简介

1、考试学员

    考试学员首先要完成注册登录,才可以使用系统功能。登录后可以维护自己的个人信息,可以修改密码等。完善个人信息后,可以参与考试,考生应该认证浏览试题信息按要求答题,交卷后系统将自动评卷并且返回学员考试结果。考试学员可以查看自己的考试结果。

2、系统管理员

    系统管理员首先要完成注册登录,才可以使用系统功能。登录后可以维护自己的个人信息,可以修改密码等。系统管理员负责试题管理,包括设置试题题目、设置选项、答案解析等。负责考试的设置,包括考试名称、考试描述、总分数、及格线、考试时长等的设置维护。系统管理员还可以设置系统信息,管理部门、用户以及角色等信息。

数据库设计

部分数据库实体E-R图

1、用户信息属性

2、考试信息属性

3、试题信息属性

功能截图

1、登录/注册样式

2、考试学员

2.1、准备考试界面

2.2、考试答题界面

    交卷后系统自动改卷并且显示考试结果

2.3、我的成绩界面

2.4、个人资料

3、管理员

3.1、试题管理

3.2、考试管理

3.3、系统设置

3.4、部门管理

3.5、角色管理

3.6、用户管理

代码实现

1、用户控制器

    @Api(tags = {"管理用户"})
    @RestController
    @RequestMapping("/exam/api/sys/user")
    public class SysUserController extends BaseController {

    @Autowired
    private SysUserService baseService;

    /**
    * 用户登录
    * @return
    */
    @CrossOrigin
    @ApiOperation(value = "用户登录")
    @RequestMapping(value = "/login", method = {RequestMethod.POST})
    public ApiRest<SysUserLoginDTO> login(@RequestBody SysUserLoginReqDTO reqDTO) {
    SysUserLoginDTO respDTO = baseService.login(reqDTO.getUsername(), reqDTO.getPassword());
    return super.success(respDTO);
    }

    /**
    * 用户登录
    * @return
    */
    @CrossOrigin
    @ApiOperation(value = "用户登录")
    @RequestMapping(value = "/logout", method = {RequestMethod.POST})
    public ApiRest logout(HttpServletRequest request) {
    String token = request.getHeader("token");
    System.out.println("+++++当前会话为:"+token);
    baseService.logout(token);
    return super.success();
    }

    /**
    * 获取会话
    * @return
    */
    @ApiOperation(value = "获取会话")
    @RequestMapping(value = "/info", method = {RequestMethod.POST})
    public ApiRest info(@RequestParam("token") String token) {
    SysUserLoginDTO respDTO = baseService.token(token);
    return success(respDTO);
    }

    /**
    * 修改用户资料
    * @return
    */
    @ApiOperation(value = "修改用户资料")
    @RequestMapping(value = "/update", method = {RequestMethod.POST})
    public ApiRest update(@RequestBody SysUserDTO reqDTO) {
    baseService.update(reqDTO);
    return success();
    }


    /**
    * 保存或修改系统用户
    * @return
    */
    @ApiOperation(value = "保存或修改")
    @RequestMapping(value = "/save", method = {RequestMethod.POST})
    public ApiRest save(@RequestBody SysUserSaveReqDTO reqDTO) {
    baseService.save(reqDTO);
    return success();
    }


    /**
    * 批量删除
    * @param reqDTO
    * @return
    */
    @ApiOperation(value = "批量删除")
    @RequestMapping(value = "/delete", method = { RequestMethod.POST})
    public ApiRest edit(@RequestBody BaseIdsReqDTO reqDTO) {
    //根据ID删除
    baseService.removeByIds(reqDTO.getIds());
    return super.success();
    }

    /**
    * 分页查找
    * @param reqDTO
    * @return
    */
    @ApiOperation(value = "分页查找")
    @RequestMapping(value = "/paging", method = { RequestMethod.POST})
    public ApiRest<IPage<SysUserDTO>> paging(@RequestBody PagingReqDTO<SysUserDTO> reqDTO) {

    //分页查询并转换
    IPage<SysUserDTO> page = baseService.paging(reqDTO);
    return super.success(page);
    }

    /**
    * 修改状态
    * @param reqDTO
    * @return
    */
    @ApiOperation(value = "修改状态")
    @RequestMapping(value = "/state", method = { RequestMethod.POST})
    public ApiRest state(@RequestBody BaseStateReqDTO reqDTO) {

    // 条件
    QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
    wrapper.lambda()
    .in(SysUser::getId, reqDTO.getIds())
    .ne(SysUser::getUserName, "admin");


    SysUser record = new SysUser();
    record.setState(reqDTO.getState());
    baseService.update(record, wrapper);

    return super.success();
    }


    /**
    * 保存或修改系统用户
    * @return
    */
    @ApiOperation(value = "学员注册")
    @RequestMapping(value = "/reg", method = {RequestMethod.POST})
    public ApiRest<SysUserLoginDTO> reg(@RequestBody SysUserDTO reqDTO) {
    SysUserLoginDTO respDTO = baseService.reg(reqDTO);
    return success(respDTO);
    }

    /**
    * 快速注册,如果手机号存在则登录,不存在就注册
    * @return
    */
    @ApiOperation(value = "快速注册")
    @RequestMapping(value = "/quick-reg", method = {RequestMethod.POST})
    public ApiRest<SysUserLoginDTO> quick(@RequestBody SysUserDTO reqDTO) {
    SysUserLoginDTO respDTO = baseService.quickReg(reqDTO);
    return success(respDTO);
    }
    }

    2、角色控制器

      @Api(tags = {"管理用户"})
      @RestController
      @RequestMapping("/exam/api/sys/role")
      public class SysRoleController extends BaseController {

      @Autowired
      private SysRoleService baseService;




      /**
      * 分页查找
      * @param reqDTO
      * @return
      */
      @ApiOperation(value = "分页查找")
      @RequestMapping(value = "/paging", method = { RequestMethod.POST})
      public ApiRest<IPage<SysRoleDTO>> paging(@RequestBody PagingReqDTO<SysRoleDTO> reqDTO) {

      //分页查询并转换
      IPage<SysRoleDTO> page = baseService.paging(reqDTO);
      return super.success(page);
      }

      /**
      * 查找列表,每次最多返回200条数据
      * @return
      */
      @ApiOperation(value = "查找列表")
      @RequestMapping(value = "/list", method = { RequestMethod.POST})
      public ApiRest<List<SysRoleDTO>> list() {

      //分页查询并转换
      QueryWrapper<SysRole> wrapper = new QueryWrapper<>();

      //转换并返回
      List<SysRole> list = baseService.list(wrapper);

      //转换数据
      List<SysRoleDTO> dtoList = BeanMapper.mapList(list, SysRoleDTO.class);

      return super.success(dtoList);
      }
      }

      非开源,想获取源码,关注公众号获取微信联系方式


      文章转载自卡布奇诺海晨,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论