SpringBoot+Vue实现前后端分离的在线考试报名系统

时间:2022-11-05 14:54:26

文末获取源码

开发语言:Java

使用框架:spring boot

前端技术:JavaScript、Vue.js 、css3

开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code

数据库:MySQL 5.7/8.0

数据库管理工具:phpstudy/Navicat

JDK版本:Java jdk8

Maven:apache-maven 3.8.1-bin

目录

一、前言介绍 

二、功能需求分析

2.1前端用户需求

2.2管理员功能如下

三、前台用户功能

3.1用户首页模块

3.2考试资讯模块

3.3考试列表模块 

3.4个人信息模块 

四、管理员功能模块

 4.1用户管理模块

4.2考试资讯管理模块

4.3考试信息管理模块

4.4考试报名管理模块

4.5考试成绩管理模块 

五、部分核心代码 

5.1考试信息推荐列表的逻辑代码 

5.2考试安排界面逻辑代码

5.3考试报名管理界面关键代码

5.4用户登录的逻辑代码


一、前言介绍 

在线考试报名系统由用户网上报名模块、考试模块和系统管理模块等三大模块组成。其中系统管理模块是进行考试资讯发布、考试报名,是系统运行的基础;查询子模块实现了学生考试信息推荐。考生通过自己的姓名和密码登陆系统,考试报名,进入考试安排界面后按照管理员预先设置好考试题目,自动生成试卷参加考试,考试完成后可以查看自己的考试成绩。本系统采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,采取MySQL作为后台数据的主要存储单元,采用Spring Boot框架、Vue技术、Ajax技术进行业务系统的编码及其开发,实现了本系统的全部功能。本次报告,首先分析了研究的背景、作用、意义,为研究工作的合理性打下了基础。针对在线考试报名系统的各项需求以及技术问题进行分析,证明了系统的必要性和技术可行性,然后对设计系统需要使用的技术软件以及设计思想做了基本的介绍,最后来实现在线考试报名系统的部署运行使用它。

二、功能需求分析

2.1前端用户需求

(1)注册用户的功能如下:

(2)注册账号:用户填写个人信息,并验证手机号码。

(3)登录:根据账号密码进行登录操作。

(4)在线报名数据:用户可以在线进行报名提交。

(5)考试安排:用户可以根据考试时间进行考试安排。

(6)维护个人信息:用户因个人信息的变更可以随时修改自己注册信息。

(7)考试资讯:用户可以在系统浏览考试资讯信息。

(8)考试成绩:用户可以查看自己在线考试成绩数据。

2.2管理员功能如下

(1)修改密码:管理员可以随时修改自己进入系统的登录密码,以保证系统的安全性。

(2)试题信息进行处理:办理试卷考试成绩审核等。

(3)考试报名管理:对学生提交的考试报名进行审核。

(4)考试信息管理:对考试信息进行维护,添加、删除、修改信息。

(5)考试列表管理:对试卷信息进行分类维护,添加、删除、修改信息。

(6)资讯数据信息管理:发布、删除相关的资讯数据信息。

(7)考试成绩管理:对学生在线考试试卷进行审核,考试成绩的发布。

三、前台用户功能

3.1用户首页模块

SpringBoot+Vue实现前后端分离的在线考试报名系统

3.2考试资讯模块

SpringBoot+Vue实现前后端分离的在线考试报名系统

3.3考试列表模块 

SpringBoot+Vue实现前后端分离的在线考试报名系统

3.4个人信息模块 

SpringBoot+Vue实现前后端分离的在线考试报名系统

四、管理员功能模块

 4.1用户管理模块

SpringBoot+Vue实现前后端分离的在线考试报名系统

4.2考试资讯管理模块

SpringBoot+Vue实现前后端分离的在线考试报名系统

4.3考试信息管理模块

SpringBoot+Vue实现前后端分离的在线考试报名系统

4.4考试报名管理模块

SpringBoot+Vue实现前后端分离的在线考试报名系统

4.5考试成绩管理模块 

SpringBoot+Vue实现前后端分离的在线考试报名系统

五、部分核心代码 

5.1考试信息推荐列表的逻辑代码 

@PostMapping("/add")

    @Transactional

    public Map<String, Object> add(HttpServletRequest request) throws IOException {

        service.insert(service.readBody(request.getReader()));

        return success(1);

    }

    @Transactional

    public Map<String, Object> addMap(Map<String,Object> map){

        service.insert(map);

        return success(1);

}

    public Map<String,Object> readBody(BufferedReader reader){

        BufferedReader br = null;

        StringBuilder sb = new StringBuilder("");

        try{

            br = reader;

            String str;

            while ((str = br.readLine()) != null){

                sb.append(str);

            }

            br.close();

            String json = sb.toString();

            return JSONObject.parseObject(json, Map.class);

        }catch (IOException e){

            e.printStackTrace();

        }finally{

            if (null != br){

                try{

                    br.close();

                }catch (IOException e){

                    e.printStackTrace();

                }

            }

        }

        return null;

}

    public void insert(Map<String,Object> body){

        StringBuffer sql = new StringBuffer("INSERT INTO ");

        sql.append("`").append(table).append("`").append(" (");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            sql.append("`"+humpToLine(entry.getKey())+"`").append(",");

        }

        sql.deleteCharAt(sql.length()-1);

        sql.append(") VALUES (");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            Object value = entry.getValue();

            if (value instanceof String){

                sql.append("'").append(entry.getValue()).append("'").append(",");

            }else {

                sql.append(entry.getValue()).append(",");

            }

        }

        sql.deleteCharAt(sql.length() - 1);

        sql.append(")");

        log.info("[{}] - 插入操作:{}",table,sql);

        Query query = runCountSql(sql.toString());

        query.executeUpdate();

    }

5.2考试安排界面逻辑代码

@RequestMapping(value = {"/avg_group", "/avg"})

public Map<String, Object> avg(HttpServletRequest request) {

        Query count = service.avg(service.readQuery(request), service.readConfig(request));

        return success(count.getResultList());

}

5.3考试报名管理界面关键代码

@RestController

@RequestMapping("auth")

public class AuthController extends BaseController<Auth, AuthService> {

    /**

     * 服务对象

     */

    @Autowired

    public AuthController(AuthService service) {

        setService(service);

    }

}

5.4用户登录的逻辑代码

/**

     * 登录

     * @param data

     * @param httpServletRequest

     * @return

     */

    @PostMapping("login")

    public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {

        log.info("[执行登录接口]");

        String username = data.get("username");

        String email = data.get("email");

        String phone = data.get("phone");

        String password = data.get("password");

        List resultList = null;

        Map<String, String> map = new HashMap<>();

        if(username != null && "".equals(username) == false){

            map.put("username", username);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }

        else if(email != null && "".equals(email) == false){

            map.put("email", email);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }

        else if(phone != null && "".equals(phone) == false){

            map.put("phone", phone);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }else{

            return error(30000, "账号或密码不能为空");

        }

        if (resultList == null || password == null) {

            return error(30000, "账号或密码不能为空");

        }

        //判断是否有这个用户

        if (resultList.size()<=0){

            return error(30000,"用户不存在");

        }

        User byUsername = (User) resultList.get(0);

        Map<String, String> groupMap = new HashMap<>();

        groupMap.put("name",byUsername.getUserGroup());

        List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();

        if (groupList.size()<1){

            return error(30000,"用户组不存在");

        }

        UserGroup userGroup = (UserGroup) groupList.get(0);

        //查询用户审核状态

        if (!StringUtils.isEmpty(userGroup.getSourceTable())){

            String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();

            String res = String.valueOf(service.runCountSql(sql).getSingleResult());

            if (res==null){

                return error(30000,"用户不存在");

            }

            if (!res.equals("已通过")){

                return error(30000,"该用户审核未通过");

            }

        }

        //查询用户状态

        if (byUsername.getState()!=1){

            return error(30000,"用户非可用状态,不能登录");

        }

        String md5password = service.encryption(password);

        if (byUsername.getPassword().equals(md5password)) {

            // 存储Token到数据库

            AccessToken accessToken = new AccessToken();

            accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));

            accessToken.setUser_id(byUsername.getUserId());

            tokenService.save(accessToken);

            // 返回用户信息

            JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));

            user.put("token", accessToken.getToken());

            JSONObject ret = new JSONObject();

            ret.put("obj",user);

            return success(ret);

        } else {

            return error(30000, "账号或密码不正确");

        }

}