前言
考试管理系统是一个信息处理的库系统,通过调用编程语言的库函数来进行编写考试管理系统,能够提高编程效率,降低开发成本。计算机的快速发展已经为考试管理系统在社会发展奠定了基础。落后的手工服务也不能够满足广大用户的需求,随着计算机的快速发展,学校开始突破传统的模式,和计算机技术相结合。紧密联系社会的需求,提供的服务是信息化的,能够满足用户的需求,简化了考试管理系统,间接提高了系统的安全性。随着大数据时代来临,信息存储要比以往大得多。在计算机快速发展的今天,有必要采用一套智能化高,操作简单的考试管理系统,这样可以方便管理员和用户,所以开发一个便于操作的管理系统是很有必要的。
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、系统管理员
系统管理员首先要完成注册登录,才可以使用系统功能。登录后可以维护自己的个人信息,可以修改密码等。系统管理员负责试题管理,包括设置试题题目、设置选项、答案解析等。负责考试的设置,包括考试名称、考试描述、总分数、及格线、考试时长等的设置维护。系统管理员还可以设置系统信息,管理部门、用户以及角色等信息。

数据库设计
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 {@Autowiredprivate 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 {@Autowiredprivate 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);}}
非开源,想获取源码,关注公众号获取微信联系方式






