zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

JAVASpringBootVue系统 实现 基于 设计 在线
2023-09-14 09:14:05 时间

博主介绍:✌全网粉丝3W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战✌

博主作品:《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源码解读、热门面试题、架构设计等。除此之外还有不少文章等你来细细品味,更多惊喜等着你哦

🍅文末获取联系🍅精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟

 Java项目案例《100套》

https://blog.csdn.net/qq_57756904/category_12173599.html

uniapp小程序《100套》

https://blog.csdn.net/qq_57756904/category_12199600.html 

 ✨【微服务】Nacos为什么丢弃短连接(http)而选择拥抱长连接(gRPC)

目录

一、前言

二、系统设计

1、系统运行环境

2、系统架构设计

三、需求分析简介

1、考试学员

2、系统管理员

四、数据库设计

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、用户控制器

2、角色控制器

七、获取源码


一、前言

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

    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);
    }
}

七、获取源码

 大家点赞收藏关注评论啦 、关注下方公众号获取联系方式👇🏻👇🏻