SpringBoot +Vue开发考试系统的教程

一、前言

SpringBoot+Vue开发考试系统是一个基于Java语言和Vue框架的在线考试系统,采用前后端分离模式进行开发设计,前端部分使用Vue实现,后端部分使用SpringBoot实现,使用Maven进行项目管理,数据库采用MySQL,实现了在线考试、成绩查询、试卷管理等基本功能。

二、创建SpringBoot项目

1.在IDEA中创建SpringBoot项目,选择Spring initializr并添加所需依赖。

<!-- 添加SpringBoot、MySQL等依赖 -->
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
</dependencies>

2.创建数据库及表

在MySQL中创建数据库exam,然后创建user表和exam_info表。

-- 创建user表
CREATE TABLE `user` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `username` varchar(50) NOT NULL UNIQUE,
    `password` varchar(50) NOT NULL,
    `role` int(1) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 创建exam_info表
CREATE TABLE `exam_info` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `title` varchar(50) NOT NULL,
    `create_time` datetime NOT NULL,
    `update_time` datetime NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.实现SpringBoot后端功能

在SpringBoot项目中,主要需要实现登录、考试、试卷管理、成绩查询等功能。具体实现细节可以查看开源项目:https://github.com/Davina2020/OnlineExam

三、创建Vue项目

1.使用Vue CLI创建项目

使用Vue CLI创建项目,选择手动配置,添加需要的依赖。

// 添加element-ui等依赖
"dependencies": {
  "vue": "^2.6.10",
  "element-ui": "^2.12.0",
  "axios": "^0.19.2",
  "vue-router": "^3.1.3"
},
"devDependencies": {
  "@vue/cli-plugin-babel": "^4.2.0",
  "@vue/cli-plugin-eslint": "^4.2.0",
  "@vue/cli-service": "^4.2.0",
  "babel-eslint": "^10.0.3",
  "eslint": "^6.7.2",
  "eslint-plugin-vue": "^6.1.2",
  "sass": "^1.26.0",
  "sass-loader": "^8.0.2",
  "vue-template-compiler": "^2.6.10"
}

2.编写Vue前端代码

在Vue项目中,主要需要实现登录、考试、试卷管理、成绩查询等功能。具体实现细节可以查看开源项目:https://github.com/Davina2020/OnlineExam_vue

四、整合SpringBoot和Vue项目

1.启动后端SpringBoot项目

在IDEA中启动SpringBoot项目,访问http://localhost:8080/,可看到接口信息。

2.启动前端Vue项目

在命令行中输入npm run serve启动Vue项目,访问 http://localhost:8081/,可看到登录页面。

3.配置Webpack打包和跨域设置

在Vue项目中,通过Webpack打包为静态资源文件,然后将打包文件放到SpringBoot项目的/resources/static/目录下。同时,在SpringBoot项目的application.properties中添加跨域配置。

# 增加Cors跨域配置
spring.security.cors.allow-credentials=true
spring.security.cors.allowed-headers=Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With, Origin, Accept
spring.security.cors.allowed-methods=POST, GET, PUT, DELETE
spring.security.cors.allowed-origins=*

4.整合Vue和SpringBoot

在Vue项目中,修改访问路径为后端接口地址。

// 在Vue项目中修改axios请求路径
axios.defaults.baseURL = 'http://localhost:8080/api/';

完成整合后,运行SpringBoot项目并访问http://localhost:8080/,即可看到前端Vue页面。

五、示例说明

以下是开源项目OnlineExam中的代码,展示了如何实现在线考试功能。

1.前端页面

考试页面Exam.vue实现了试卷题目的展示和答题功能,同时有计时器和交卷功能。

<template>
  <div class="exam">
    <div class="exam-header">
      <el-row>
        <el-col :span="12">
          <h2>{{ examName }}</h2>
        </el-col>
        <el-col :span="12">
          <h2>倒计时:{{ time }}分钟</h2>
        </el-col>
      </el-row>
    </div>
    <div class="exam-body">
      <div v-for="(question,index) in questions" :key="index">
        <h3>{{index+1}}、{{question.title}} ({{question.score}}分)</h3>
        <el-radio-group v-model="answers[index]" :disabled="time<=0">
          <el-radio v-for="(option, key) in question.options" :key="key" :label="key" :disabled="time<=0">{{option}}</el-radio>
        </el-radio-group>
      </div>
    </div>
    <div class="exam-footer">
      <el-row>
        <el-col :span="12">
          <el-button type="danger" @click="submit" :disabled="time<=0">交卷</el-button>
        </el-col>
        <el-col :span="12">
          <h2>总分:{{score}}分</h2>
        </el-col>
      </el-row>
    </div>
  </div>
</template>

<script>
import axios from 'axios'
import { mapState } from 'vuex'
export default {
  data() {
    return {
      examId: '',
      examName: '',
      time: '',
      questions: [],
      answers: [],
      score: 0
    }
  },
  computed: {
    ...mapState(['user'])
  },
  methods: {
    getQuestions() {
      axios.get('/exam/questions', {
        params: {
          examId: this.examId
        }
      }).then(res => {
        this.questions = res.data
        for (let i = 0; i < this.questions.length; i++) {
          this.answers.push('')
        }
      })
    },
    submit() {
      axios.post('/exam/submit', {
        userId: this.user.id,
        examId: this.examId,
        answers: this.answers
      }).then(res => {
        this.$message({
          message: '交卷成功',
          type: 'success'
        })
        this.score = res.data
      })
    }
  },
  created() {
    this.examId = this.$route.query.id
    axios.get('/exam/info', {
      params: {
        id: this.examId
      }
    }).then(res => {
      this.examName = res.data.title
      this.time = res.data.time
    })
    this.getQuestions()
    setInterval(() => {
      this.$http.post('/exam/time', {
        examId: this.examId
      }).then(res => {
        this.time = res.data
        if (this.time <= 0) {
          this.submit()
        }
      })
    }, 1000 * 60)
  }
}
</script>

2.后端代码

在后端接口ExamController中,实现获取试卷题目和提交试卷答案功能。

@RestController
@RequestMapping("/exam")
public class ExamController {
    @Autowired
    ExamService examService;
    @Autowired
    AnswerService answerService;

    @GetMapping("/info")
    public ExamInfoVO getExamInfo(@RequestParam("id") int id) {
        return examService.getExamInfo(id);
    }

    @GetMapping("/questions")
    public List<QuestionVO> getQuestions(@RequestParam("examId") int examId) {
        return examService.getQuestions(examId);
    }

    @PostMapping("/submit")
    public double submitExam(@RequestBody AnswerForm answerForm) {
        return answerService.submitAnswer(answerForm);
    }
}

以上就是SpringBoot+Vue开发考试系统的教程,希望对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot +Vue开发考试系统的教程 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • 基于Python制作图像完美超分处理工具

    下面是“基于Python制作图像完美超分处理工具”的完整攻略: 1. 确定需求和目标 首先需要明确制作的图像超分处理工具的需求和目标,例如需要支持哪些图像格式、超分处理的放大倍数等。同时需要确定使用哪些Python第三方库和算法来实现超分处理功能。 2. 数据准备 准备用于训练和测试超分处理模型的数据,并对数据进行预处理和清洗。为了提升模型效果,可以使用数据…

    python 2023年6月3日
    00
  • 浅谈Python中的函数传递问题

    浅谈Python中的函数传递问题 在Python中,函数传递问题是一个常见的话题。在函数调用时,参数可以通过值传递或引用传递。本文将深入探讨Python中的传递问题,包括参数的传递方式、可变对象和不可变对象的区别、以及函数参数的默认值等。 参数的传递方式 在Python中,函数参数可以通过值传递或引用传递。当参数通过值传递时,函数接收到的是参数的副本,而不是…

    python 2023年5月13日
    00
  • Python编写单元测试代码实例

    当我们编写Python代码时,测试是至关重要的,因为它可以确保代码的正确性,并且能够避免代码的错误蔓延。单元测试是一种测试代码的方法,我们可以在Python中使用unittest库来编写单元测试代码。 以下是编写Python单元测试代码的完整攻略: 1. 安装unittest库 在Python中,unittest是一个内置库,因此无需安装。 2. 编写测试用…

    python 2023年5月31日
    00
  • 爬虫是什么?浅谈爬虫及绕过网站反爬取机制

    爬虫是什么? 爬虫是一种自动获取网站上数据的程序。通俗来讲,爬虫就是在模拟人的操作,去访问网站,获取需要的信息。爬虫可以自动化地爬取数据、分析数据、存储数据等,大大提高了数据获取和处理的效率。 浅谈爬虫及绕过网站反爬机制 爬虫的分类 爬虫根据其实现技术和应用场景,可以分为多种类型,包括通用爬虫和聚焦爬虫、静态网页爬虫和动态网页爬虫、逆向爬虫和贴心爬虫等。 其…

    python 2023年5月14日
    00
  • Python企业编码生成系统之主程序模块设计详解

    当谈到Python企业编码生成系统的主程序模块设计时,我们需要考虑几个方面,这包括程序整体框架和每个功能模块的设计。下面,我将详细介绍Python企业编码生成系统主程序模块设计的完整攻略。 整体框架设计 在设计整体框架时,我们需要完成以下三个方面: 1. 程序结构 我们建议使用MVC(Model-View-Controller)设计模式来构建Python企业…

    python 2023年5月20日
    00
  • 使用python实现哈希表、字典、集合操作

    使用Python实现哈希表、字典和集合操作是Python编程中比较常见的操作。下面是使用Python实现这些数据结构的完整攻略: 哈希表 哈希表的实现可以使用Python内置的字典类dict来实现。通过dict类实现一个简单的哈希表,可以按照以下步骤进行: 创建一个空的dict对象 使用hash()函数将key值转换成整数,作为哈希表的索引 将key和val…

    python 2023年5月13日
    00
  • Python numpy.broadcast_to()函数

    以下是Python numpy.broadcast_to()函数的详细攻略。 numpy.broadcast_to() 函数 numpy.broadcast_to() 函数将数组广播到新形状。它在原始数组上返回只读视图,不改变原始数组。 语法 numpy.broadcast_to(array, shape, subok=False) 参数说明 array:要…

    python-answer 2023年3月25日
    00
  • Python封装原理与实现方法详解

    Python封装原理与实现方法详解 什么是封装? 封装(Encapsulation)是OOP(面向对象编程)的三大特性之一,它将数据和行为打包在一起形成一个不可分割的整体,从而使得数据只能被规定的方式所访问/修改,而不允许程序中的其他部分对数据进行直接的操作。 封装的优点 封装在OOP中扮演着非常重要的角色,有以下几个优点: 实现了信息隐藏:将对象的内部细节…

    python 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部