1.功能需求
一、用户信息管理模块
1.用户基本的登录注册
2.用户信息管理:用户可以修改自己的个人信息
3.班级管理:管理员可以划分班级,任课教师可以申请权限
4.考试信息管理
5.成绩查询
二、试题库管理模块
1.试题管理
1)试题添加
2)试题删除
3)试题批量导入, 按照word或者Excel模板编辑试题,即可以让用户将试题一次性批量导入,大大提高建立题库的速度
4)试题浏览
5)试题备份
2.知识点管理:教师可对课程需要考察的知识点进行增删改查
3.能力点管理:教师可对课程需要考察的能力点进行增删改查
4.映射关系管理:教师和管理员可对映射关系进行增删改查
三、试卷管理模块
1.试卷创建
2.试卷组卷
- 手动组卷
- 选择映射关系实现自动组卷
3.试卷批阅
4.试卷导入导出
5.成绩统计
6.成绩导出
四、考试管理模块
1.在线考试网站
2.考试设置
1)设置考试时间
2)考试规则
3)试卷选择
2.所用技术
SpringBoot+mysql+myabtis+Vue
3,部分功能展示
<template>
<el-container>
<el-header height="220">
<el-row>
<el-select @change="typeChange" clearable v-model="queryInfo.questionType" placeholder="请选择题目类型">
<el-option
v-for="item in questionType"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
<el-select @change="bankChange" clearable v-model="queryInfo.questionBank" placeholder="请选择题库"
style="margin-left: 5px">
<el-option
v-for="item in allBank"
:key="item.id"
:label="item.bankName"
:value="item.bankName">
</el-option>
</el-select>
<el-input v-model="queryInfo.questionContent" @blur="contentChange" placeholder="题目内容"
style="margin-left: 5px;width: 220px"
prefix-icon="el-icon-search"></el-input>
</el-row>
<el-row style="margin-top: 10px">
<el-button type="primary" icon="el-icon-plus" @click="addQuTableVisible = true">添加</el-button>
<el-button type="success" icon="el-icon-upload" @click="batchImportVisible" style="margin-left: 10px">批量导入</el-button>
<el-button type="warning" icon="el-icon-back" @click="backupQuestionBank" style="margin-left: 10px">备份</el-button>
</el-row>
</el-header>
<el-main>
<!--操作的下拉框-->
<el-select @change="operationChange" clearable v-if="selectionTable.length !== 0" v-model="operation"
:placeholder="'已选择' + selectionTable.length + '项'" style="margin-bottom: 25px;">
<el-option v-for="(item,index) in optionInfo" :key="index" :value="item.desc">
<span style="float: left">{
{
item.label }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">{
{
item.desc }}</span>
</el-option>
</el-select>
<el-table
ref="questionTable"
highlight-current-row
v-loading="loading"
:border="true"
:data="questionInfo"
tooltip-effect="dark"
style="width: 100%;" @selection-change="handleTableSectionChange">
<el-table-column align="center"
type="selection"
width="55">
</el-table-column>
<el-table-column align="center"
label="题目类型">
<template slot-scope="scope">
<span v-if="scope.row.quType === 1">单选题</span>
<span v-else-if="scope.row.quType === 2">多选题</span>
<span v-else-if="scope.row.quType === 3">判断题</span>
<span v-else-if="scope.row.quType === 4">简答题</span>
</template>
</el-table-column>
<el-table-column align="center" label="题目内容">
<template slot-scope="scope">
<span class="quContent" @click="updateQu(scope.row.id)">{
{
scope.row.quContent }}</span>
</template>
</el-table-column>
<el-table-column align="center"
label="难度">
<template slot-scope="scope">
<span v-if="scope.row.level === 1">简单</span>
<span v-if="scope.row.level === 2">中等</span>
<span v-if="scope.row.level === 3">困难</span>
</template>
</el-table-column>
<el-table-column align="center"
prop="quBankName"
label="所属题库">
</el-table-column>
<el-table-column align="center"
prop="createPerson"
label="创建人">
</el-table-column>
<el-table-column align="center"
label="创建时间">
<template slot-scope="scope">
{
{
scope.row.createTime }}
</template>
</el-table-column>
</el-table>
<!--分页-->
<el-pagination style="margin-top: 25px"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="queryInfo.pageNo"
:page-sizes="[10, 20, 30, 50]"
:page-size="queryInfo.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
</el-main>
<el-dialog title="更新题目" :visible.sync="updateQuTableVisible" width="50%" center>
<el-card>
<el-form :model="updateQuForm" ref="updateQuForm" :rules="updateQuFormRules">
<el-form-item label="题目类型" label-width="120px" prop="questionType">
<el-select v-model="updateQuForm.questionType" disabled @change="updateQuForm.answer = []"
placeholder="请选择">
<el-option
v-for="item in questionType"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="难度等级" label-width="120px" prop="questionLevel">
<el-select v-model="updateQuForm.questionLevel" placeholder="请选择">
<el-option :value="parseInt(1)" label="简单"></el-option>
<el-option :value="parseInt(2)" label="中等"></el-option>
<el-option :value="parseInt(3)" label="困难"></el-option>
</el-select>
</el-form-item>
<el-form-item label="归属题库" label-width="120px" prop="bankId">
<el-select multiple v-model="updateQuForm.bankId" placeholder="请选择">
<el-option v-for="item in allBank" :key="item.bankId"
:label="item.bankName" :value="item.bankId"></el-option>
</el-select>
</el-form-item>
<el-form-item label="题目内容" label-width="120px" prop="questionContent">
<el-input v-model="updateQuForm.questionContent" style="margin-left: 5px" type="textarea"
:rows="2"></el-input>
</el-form-item>
<el-form-item label="题目图片" label-width="120px">
<el-upload
:action="uploadImageUrl + '/teacher/uploadQuestionImage'"
:on-preview="uploadPreview"
:on-remove="handleUpdateRemove"
:headers="headers"
:before-upload="beforeAvatarUpload"
list-type="picture"
:on-success="updateUploadImgSuccess"
name="file">
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过10M</div>
</el-upload>
</el-form-item>
<el-form-item label="整题解析" label-width="120px" prop="analysis">
<el-input v-model="updateQuForm.analysis" style="margin-left: 5px" type="textarea"
:rows="2"></el-input>
</el-form-item>
<el-button v-if="updateQuForm.questionType!==4" type="primary" plain size="small" icon="el-icon-plus"
style="margin-left: 40px" @click="addUpdateAnswer">
添加
</el-button>
<!--存放答案表单的信息-->
<el-form-item prop="answer" v-if=