作者主页:夜未央5788
简介:Java领域优质创作者、Java项目、学习资料、技术互助
文末获取源码
项目介绍
基于SpringBoot Vue的在线考试管理
角色:管理员、学生、教师
管理员:管理员登录系统后,可以对首页,个人中心,学生管理,教师管理,课程分类管理,课程信息管理,在线考试管理,试题管理,习题管理,考试管理等功能
学生:学生管理,在学生管理页面可以对索引,学生账号,性别,头像,年龄,电话号码等内容进行详情,修改或删除等操作
教师:教师登录进入在线考试系统可以对首页,个人中心,课程信息管理,试题管理,在线考试管理,考试管理等功能
使用人群:
正在做毕设的学生,或者需要项目实战练习的Java学习者
由于本程序规模不大,可供课程设计,毕业设计学习演示之用
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
4.数据库:MySql 5.7/8.0版本均可;
5.是否Maven项目:是;
技术栈
后端: SpringBoot+Mybaits
前端:Vue +ElementUI +Layui +HTML+CSS+JS
使用说明
项目运行:
1. 使用Navicat或者其它工具,在mysql中创建对应sql文件名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,导入成功后请执行maven clean;maven install命令,然后运行;
3. 将项目中application.yml配置文件中的数据库配置改为自己的配置;
4. 运行项目,控制台提示运行成功后再去运行前端项目;
5. 管理员用户名密码:admin/admin
普通用户名密码:user/123456
运行截图
论文
前台界面
后管界面
相关代码
ClasseController
package edu.ccsfu.quiz.controller;
import edu.ccsfu.quiz.domain.Classe;
import edu.ccsfu.quiz.domain.Teacher;
import edu.ccsfu.quiz.service.ClasseService;
import edu.ccsfu.quiz.service.TeacherService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.*;
@Controller
@RequestMapping("/classe")
public class ClasseController {
@Autowired
private ClasseService classeService;
@Autowired
private TeacherService teacherService;
//查看所有班级
@RequestMapping("/getAllClasse")
public String getAllClasse(Model model){
List<Classe> classes = classeService.getAll();
model.addAttribute("classes",classes);
return "classe/classeList";
}
//班级添加或者修改操作,先去添加页面
@RequestMapping("/toAddClasse")
public String toAddClasse(Model model){
List<Teacher> teachers=teacherService.queryTeacherNotAdvisor();
model.addAttribute("teachers",teachers);
return "classe/classeAdd";
}
//添加具体操作
@RequestMapping("/addClasse")
public String addClasse(Classe classe){
classeService.addClasse(classe);
return "redirect:/classe/getAllClasse";
}
//班级去修改页面
@RequestMapping("/toEditClasse/{id}")
public String toEditClasse(@PathVariable("id") Integer id,Model model){
//根据id查询班级
Classe classe=classeService.getClasseById(id);
//过去班级的班主任,回显
int teacherIdd=classe.getTeacherId();
Teacher teacherold=teacherService.getTeacherById(teacherIdd);
//查询可分配班主任得教师
List<Teacher> teachers=teacherService.queryTeacherNotAdvisor();
teachers.add(teacherold);
model.addAttribute("teachers",teachers);
model.addAttribute("classe",classe);
return "classe/classeEdit";
}
//修改具体操作
@RequestMapping("/EditClasse")
public String EditClasse(Classe classe){
classeService.editClasse(classe);
return "redirect:/classe/getAllClasse";
}
//班级删除
@RequestMapping("/deleteClasse/{id}")
public String deleteClasseById(@PathVariable("id") Integer id){
classeService.deleteClasseById(id);
return "redirect:/classe/getAllClasse";
}
}
ExamController
package edu.ccsfu.quiz.controller;
import edu.ccsfu.quiz.domain.*;
import edu.ccsfu.quiz.domain.*;
import edu.ccsfu.quiz.service.ExamService;
import edu.ccsfu.quiz.service.PaperService;
import edu.ccsfu.quiz.service.RecordService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Controller
@RequestMapping("/exam")
@Slf4j
public class ExamController {
@Autowired
private ExamService examService;
@Autowired
private PaperService paperService;
@Autowired
private RecordService recordService;
//前台跳转
@RequestMapping("/toExam")
public String toExam(Model model){
List<Exam> examList = examService.getAll();
System.err.println(examList);
model.addAttribute("examList",examList);
return "exam/examplan";
}
@RequestMapping("/toHist/{id}")
public String toHist(@PathVariable ("id") Integer id,Model model){
List<Record> records=recordService.queryAllExamById(id);
model.addAttribute("records",records);
return "exam/histplan";
}
//从其他页面跳转到home
@RequestMapping("/toHome")
public String tohome(){
return "redirect:/indexprexam";
}
//来到对应考试页面
@RequestMapping("/toDoExam/{id}")
public String toDoExam(@PathVariable ("id") Integer id,Model model,String examId){
List<QuestionPaper> questionPapers = paperService.paperQueryALlQuestionByIdOrderByType(id);
int exId=Integer.parseInt(examId);
Exam examById = examService.getExamById(exId);
Paper paperName = paperService.queryPaperNameById(examById.getPaperId());
model.addAttribute("paperName",paperName);
model.addAttribute("examById",examById);
model.addAttribute("questionPapers",questionPapers);
return "exam/doExam";
}
//提交试卷
@RequestMapping("/submitExam")
public String submitExam(Integer paperId, Integer studentId, HttpServletRequest request){
List<QuestionPaper> questionPapers = paperService.paperQueryALlQuestionByIdOrderByType(paperId);
List<String> ans=new ArrayList<>();
List<String> RightAns=new ArrayList<>();
for (QuestionPaper qb:questionPapers){
RightAns.add(qb.getQuestion().getQuestionOpright());
String parameter="";
String []parameters;
if(qb.getQuestion().getQuestionType().equals("y")){
parameters= request.getParameterValues("optionsSelect" + qb.getQuestionId());
for(String s:parameters){
parameter+=s;
}
}else {
parameter = request.getParameter("optionsSelect" + qb.getQuestionId());
}
ans.add(parameter);
}
//核对答案得到成绩
int k=0; //哨兵
Double y=0.0; //正确数
int score=0; //得分
int a=0; //记录单选题个数
int b=0; //记录多选题个数
int c=0; //记录判断题个数
int totalScore=0;
for (QuestionPaper qb:questionPapers){
//若为单选题则正确+单选题分数
if(qb.getQuestion().getQuestionType().equals("x")){
if(ans.get(k).equals(RightAns.get(k))){
score+=qb.getPaper().getScoreSin();
y++;
}
a++;
k++;
}else if(qb.getQuestion().getQuestionType().equals("y")){
if(ans.get(k).equals(RightAns.get(k))){
score+=qb.getPaper().getScoreChe();
y++;
}
b++;
k++;
}else {
if(ans.get(k).equals(RightAns.get(k))){
score+=qb.getPaper().getScoreJug();
y++;
}
c++;
k++;
}
}
int scoreSin1 = questionPapers.get(0).getPaper().getScoreSin();
int scoreChe1 = questionPapers.get(0).getPaper().getScoreChe();
int scoreJug1 = questionPapers.get(0).getPaper().getScoreJug();
int bool=recordService.queryBooleanToscore(paperId);
if (bool==0){
totalScore=scoreSin1*a+scoreChe1*b+scoreJug1*c; //得到每张试卷总分
Toscore toscore=new Toscore();
toscore.setPaperId(paperId);
toscore.setToscore(totalScore);
recordService.AddToScore(toscore);
}
//保存答题记录
String answer = String.join(",", ans);
Paper paper = paperService.queryPaperNameById(paperId);
String paperName = paper.getPaperName();
Double recordAcc=y/k;
int recordScore=score;
Record record=new Record();
record.setRecordName(paperName);
record.setStudentId(studentId);
record.setPaperId(paperId);
record.setRecordAnswer(answer);
record.setRecordAcc(recordAcc);
record.setRecordScore(recordScore);
recordService.addRecord(record);
return "redirect:/exam/toExam";
}
/**
* 考试后台
* */
//查看所有考试安排后台
@RequestMapping("/getAllExam")
public String getAllExam(Model model){
List<Exam> Exams = examService.getAllS();
model.addAttribute("Exams",Exams);
return "exam/backexamlist";
}
//去往考试添加页面
@RequestMapping("/toAddExam")
public String toAddExam(Model model){
List<Paper> papers = paperService.getAll();
model.addAttribute("papers",papers);
return "exam/AddExam";
}
//添加操作
@RequestMapping("/addExam")
public String addExam(Exam exam, String examBegins,String examEnds) throws ParseException {
try{
String t1 = examBegins.replace("T", " ");
String t2 = examEnds.replace("T", " ");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Date begin = sdf.parse(t1);
Date end = sdf.parse(t2);
exam.setExamBegin(begin);
exam.setExamEnd(end);
examService.AddExam(exam);
return "redirect:/exam/getAllExam";
}catch (Exception e){
e.printStackTrace();
log.error("考试时间格式错误");
return "exam/AddExam";
}
}
@RequestMapping("/deleteExam/{id}")
public String toEditExam(@PathVariable ("id") Integer id,Model model){
examService.deleteById(id);
return "redirect:/exam/getAllExam";
}
}
RecordController
package edu.ccsfu.quiz.controller;
import edu.ccsfu.quiz.domain.*;
import edu.ccsfu.quiz.service.ClasseService;
import edu.ccsfu.quiz.service.PaperService;
import edu.ccsfu.quiz.service.RecordService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Controller
@RequestMapping("/record")
@Slf4j
public class RecordController {
@Autowired
RecordService recordService;
@Autowired
PaperService paperService;
@Autowired
ClasseService classeService;
//获取所有记录
@RequestMapping("/getAllRecord")
public String getAllRecord(Model model){
List<Record> records=recordService.queryAll();
model.addAttribute("records",records);
return "record/RecordList";
}
//删除记录
@RequestMapping("/deleteRecore/{id}")
public String deleteRecore(@PathVariable ("id") Integer id){
recordService.deleteById(id);
return "redirect:/record/getAllRecord";
}
//根据记录id获取试卷详情
@RequestMapping("/toShowExamHist/{id}")
public String toShowExamHist(@PathVariable ("id")Integer id,Model model){
//通过记录id查找试卷和答题记录
Integer papid=recordService.queryByRecordId(id);
String answers=recordService.queryAnsByRecordId(id);
//原始试卷
List<QuestionPaper> questionPapers = paperService.paperQueryALlQuestionByIdOrderByType(papid);
//提交过的答案
List<String> ans = Arrays.asList(answers.split(","));
model.addAttribute("questionPapers",questionPapers);
model.addAttribute("ans",ans);
//2020-1-26-20:40
return "record/showExamHist";
}
//显示所有班级记录
@RequestMapping("/showClaAcc")
public String showClaAcc(Model model){
//查询所有测试名称
List<Record> records=recordService.queryAllExam();
List<ClaAcc> claAccRes=new ArrayList<>();
//按照测试名称查询所有班级
for(Record rec:records){
//通过记录对应考试paperid查找总分***
int paperid=rec.getPaperId();
int toscore=recordService.queryToscore(paperid);
//记录考试名
String exaName=rec.getRecordName();
List<Classe> clas=recordService.queryAllClass(exaName);
//初始化所有人和及格人数
int allScore=0;
int accScore=0;
for(Classe cla:clas){
int claId=cla.getClasseId();
//班级信息
Classe claName=classeService.queryClaNameById(claId);
if (claName ==null){
log.error("找不到id为"+claId+"的班级");
continue;
}
RecordExam recordExam=new RecordExam();
recordExam.setClaId(claId);
recordExam.setExaName(exaName);
double setToscore=toscore*0.6;
recordExam.setToscore(setToscore);
//对应每一个班级,查询考试人数和及格人数
allScore=recordService.queryAllScore(recordExam);
//及格人数默认>60***
accScore=recordService.queryAccScore(recordExam);
double accre=(double)accScore/allScore;
//四舍五入保留2位
double acc = (double) Math.round(accre * 100) / 100;
ClaAcc claAcc=new ClaAcc();
claAcc.setExamName(exaName);
claAcc.setClaName(claName.getClasseName());
claAcc.setToscPer(allScore);
claAcc.setAcscPer(accScore);
claAcc.setAcc(acc);
//每个对象添加到list
claAccRes.add(claAcc);
}
}
model.addAttribute("claAccRes",claAccRes);
return "record/claAcc";
}
}
如果也想学习本系统,下面领取。关注并回复:121springboot