Java Online Exam在线考试系统的实现
作者:qq_1334611189
读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用java+springboot+vue+jsp+mysql+maven实现Online Exam在线考试系统,大家可以在过程中查缺补漏,提升水平
一、项目简述
本系统主要实现的功能有: 学生以及老师的注册登录,在线考试,错题查询,学生管理,问题管理,错题管理,错题查询,分数查询,试卷管 理,人工组卷。自动组卷,教师,班级,统计等等管理功能。
二、项目运行
环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)
项目技术: VUE+Springboot+ SpringMVC + MyBatis + ThymeLeaf + JavaScript + JQuery + Ajax + maven等等
课程信息控制器:
/** * yy */ @RestController @RequestMapping(value = "/v1/subjects") public class SubjectController { private static Logger logger = LoggerFactory.getLogger(SubjectController.class); @Autowired SubjectService subjectService; @ApiOperation(value = "获取科目列表", notes = "") @RequestMapping(value = "", method = RequestMethod.GET) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')") public PageInfo<Subject> getSubjectList(@RequestParam(required = false) Integer pageIndex, @RequestParam(required = false) Integer pageSize, @RequestParam(required = false) Integer limit, @RequestParam(required = false) Integer offset) { if(pageIndex != null && pageSize != null) { PageHelper.startPage(pageIndex, pageSize); } List<Subject> subjects = subjectService.getSubjectList(); PageInfo pageInfo = new PageInfo(subjects); return pageInfo; } @ApiOperation(value = "根据名字获取科目信息", notes = "根据科目名称获取科目详细信息") @ApiImplicitParam(name = "name", value = "科目名称", required = true, dataType = "String", paramType = "path") @RequestMapping(value = "/{name}/name", method = RequestMethod.GET) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')") public List<Subject> getSubjectByName(@PathVariable String name) { return subjectService.getSubjectFuzzy(name); } @ApiOperation(value = "获取课程信息", notes = "根据课程id获取课程详细信息") @ApiImplicitParam(name = "idOrName", value = "课程ID或名称", required = true, dataType = "String", paramType = "path") @RequestMapping(value = "/search/{idOrName}", method = RequestMethod.GET) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')") public List<Subject> getSubjectForSearch(@PathVariable String idOrName) { List<Subject> subjects = new ArrayList<Subject>(); Subject subject = subjectService.getSubjectByName(idOrName); if (subject == null) { try { subject = subjectService.getSubjectById(idOrName); } catch (Exception e) { } } if (subject != null) { subjects.add(subject); } return subjects; } @ApiOperation(value = "创建课程", notes = "创建课程") @ApiImplicitParam(name = "subject", value = "课程实体Subject", required = true, dataType = "Subject") @RequestMapping(value = "", method = RequestMethod.POST) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')") public ResponseEntity<?> postSubject(@RequestBody Subject subject) { if(subjectService.getSubjectByName(subject.getName()) != null) { return new ResponseEntity<Object>(new Dto("课程已存在!"), HttpStatus.INTERNAL_SERVER_ERROR); } subjectService.saveSubject(subject); return new ResponseEntity(HttpStatus.CREATED); } @ApiOperation(value = "获取课程信息", notes = "根据课程id获取课程详细信息") @ApiImplicitParam(name = "id", value = "课程ID", required = true, dataType = "String", paramType = "path") @RequestMapping(value = "/{id}", method = RequestMethod.GET) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')") public Subject getSubject(@PathVariable String id) { return subjectService.getSubjectById(id); } @ApiOperation(value = "更新课程信息", notes = "根据课程id更新用户信息") @ApiImplicitParam(name = "subject", value = "课程实体", required = true, dataType = "Subject") @RequestMapping(value = "", method = RequestMethod.PUT) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')") public ResponseEntity<?> putSubject(@RequestBody Subject subject) { subjectService.updateSubject(subject); return new ResponseEntity(HttpStatus.OK); } @ApiOperation(value = "删除课程", notes = "根据课程id删除课程") @ApiImplicitParam(name = "id", value = "课程ID", required = true, dataType = "Long", paramType = "path") @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')") public ResponseEntity<?> deleteSubject(@PathVariable String id) { try { subjectService.deleteSubject(id); }catch (RuntimeException e) { return new ResponseEntity(new Dto("该课程包含有考试,不能删除"), HttpStatus.INTERNAL_SERVER_ERROR); } return new ResponseEntity(HttpStatus.OK); } }
题目信息控制器:
/** * yy */ @RestController @RequestMapping(value = "/v1/questions") public class QuestionController { private static Logger logger = LoggerFactory.getLogger(QuestionController.class); @Autowired QuestionService questionService; @Autowired PaperAnswerPaperService paperAnswerPaperService; @ApiOperation(value = "获取题目分页列表", notes = "") @RequestMapping(value = "", method = RequestMethod.GET) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')") public PageInfo<Question> getQuestionListByPage(@RequestParam(required = false) Integer pageIndex, @RequestParam(required = false) Integer pageSize, @RequestParam(required = false) Integer limit, @RequestParam(required = false) Integer offset) { if(pageIndex != null && pageSize != null) { PageHelper.startPage(pageIndex, pageSize); } List<Question> questions = questionService.getQuestionList(); PageInfo pageInfo = new PageInfo(questions); return pageInfo; } @ApiOperation(value = "获取试卷题目分页列表", notes = "") @RequestMapping(value = "/papers/{paperId}", method = RequestMethod.GET) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')") public PageInfo<Question> getQuestionListByPaper(@PathVariable String paperId, @RequestParam(required = false) Integer pageIndex, @RequestParam(required = false) Integer pageSize, @RequestParam(required = false) Integer limit, @RequestParam(required = false) Integer offset) { if(pageIndex != null && pageSize != null) { PageHelper.startPage(pageIndex, pageSize); } List<Question> questions = questionService.getQuestionListByPaper(paperId); PageInfo pageInfo = new PageInfo(questions); return pageInfo; } @ApiOperation(value = "获取试卷题目数量", notes = "") @RequestMapping(value = "/papers/{paperId}/count", method = RequestMethod.GET) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')") public ResponseEntity<?> getQuestionCountByPaper(@PathVariable String paperId) { Integer count = questionService.countByPaperId(paperId); return new ResponseEntity<Object>(count, HttpStatus.OK); } @ApiOperation(value = "创建题目", notes = "创建题目") @ApiImplicitParams({ @ApiImplicitParam(name = "question", value = "题目实体Question", required = true, dataType = "Question"), @ApiImplicitParam(name = "id", value = "试卷id", required = true, dataType = "String", paramType = "path") }) @RequestMapping(value = "/{id}", method = RequestMethod.POST) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')") public ResponseEntity<?> postQuestion(@PathVariable("id") String id, @RequestBody Question question) { questionService.saveQuestion(id, question); return new ResponseEntity(HttpStatus.CREATED); } @ApiOperation(value = "获取题目信息", notes = "根据题目id获取题目详细信息") @ApiImplicitParam(name = "id", value = "题目ID", required = true, dataType = "String", paramType = "path") @RequestMapping(value = "/{id}", method = RequestMethod.GET) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')") public Question getQuestion(@PathVariable String id) { return questionService.getQuestion(id); } @ApiOperation(value = "根据试卷id和题目编号获取题目信息", notes = "根据题目id获取题目详细信息") @ApiImplicitParams({ @ApiImplicitParam(name = "paperId", value = "试卷ID", required = true, dataType = "String", paramType = "path"), @ApiImplicitParam(name = "number", value = "题目编号", required = true, dataType = "String", paramType = "path") }) @RequestMapping(value = "/papers/{paperId}/questions/{number}", method = RequestMethod.GET) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')") public Question getQuestionByPaperIdAndQuestionId(@PathVariable String paperId, @PathVariable Integer number, @RequestParam(required = false) String answerPaperId) { PaperAnswerPaper paperAnswerPaper = null; //传入的是答卷Id if(answerPaperId != null) { // TODO: 2017-04-17 paperAnswerPaper = paperAnswerPaperService.getByAnswerPaperId(answerPaperId); if(paperAnswerPaper != null) { return questionService.getQuestionByPaperIdAndQuestionNumber(paperAnswerPaper.getPaperId(), number); }else { logger.error("根据答卷id获取答卷失败"); } } return questionService.getQuestionByPaperIdAndQuestionNumber(paperId, number); } @ApiOperation(value = "获取题目信息", notes = "根据题目name获取题目详细信息") @ApiImplicitParam(name = "name", value = "试卷name", required = true, dataType = "String", paramType = "path") @RequestMapping(value = "/name/{name}", method = RequestMethod.GET) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')") public List<Question> getQuestionByName(@PathVariable String name) { //模糊查询 return questionService.getQuestionFuzzy(name); } @ApiOperation(value = "获取题目信息", notes = "根据试卷id获取所有题目") @ApiImplicitParam(name = "paperId", value = "试卷ID", required = true, dataType = "String", paramType = "path") @RequestMapping(value = "/papers/{paperId}/questions", method = RequestMethod.GET) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')") public List<Question> getQuestionByPaperId(@PathVariable String paperId) { return questionService.getQuestionByPaperId(paperId); } @ApiOperation(value = "获取题目信息", notes = "根据试卷id获取所有题目,但不返回答案") @ApiImplicitParam(name = "paperId", value = "试卷ID", required = true, dataType = "String", paramType = "path") @RequestMapping(value = "/papers/{paperId}/ignore", method = RequestMethod.GET) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')") public List<Question> getQuestionByPaperIdIgnoreAnswer(@PathVariable String paperId) { return questionService.getQuestionByPaperIdIgnoreAnswer(paperId); } @ApiOperation(value = "更新题目信息", notes = "根据题目id更新题目信息") @ApiImplicitParam(name = "question", value = "题目实体", required = true, dataType = "Question") @RequestMapping(value = "", method = RequestMethod.PUT) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')") public ResponseEntity<?> putQuestion(@RequestBody Question question) { questionService.updateQuestion(question); return new ResponseEntity(HttpStatus.OK); } @ApiOperation(value = "删除题目", notes = "根据题目id删除试卷") @ApiImplicitParam(name = "id", value = "题目ID", required = true, dataType = "String", paramType = "path") @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')") public ResponseEntity<?> deleteQuestion(@PathVariable String id) { questionService.deleteQuestion(id); return new ResponseEntity(HttpStatus.OK); } }
考试控制层,负责试卷提交等:
/** * 考试控制层,负责试卷提交等 */ @RestController @RequestMapping("/v1/exam") public class ExamController { @Autowired ExamService examService; @Autowired AnswerPaperService answerPaperService; @Autowired AnswerQuestionService answerQuestionService; @Autowired AnswerPaperQuestionService answerPaperQuestionService; @Autowired QuestionService questionService; @Autowired PaperService paperService; @Autowired WrongQuestionService wrongQuestionService; @Autowired PaperAnswerPaperService paperAnswerPaperService; @ApiOperation(value = "根据试卷id和题目编号获取题目信息", notes = "根据题目id获取题目详细信息") @ApiImplicitParams({ @ApiImplicitParam(name = "paperId", value = "试卷ID", required = true, dataType = "String", paramType = "path"), @ApiImplicitParam(name = "number", value = "题目编号", required = true, dataType = "String", paramType = "path") }) @RequestMapping(value = "/questions/{number}", method = RequestMethod.GET) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')") public Question getQuestionByPaperIdAndQuestionId(@RequestParam String paperId, @RequestParam String username, @RequestParam(required = false) String answerPaperId, @PathVariable Integer number) { Question question = null; AnswerQuestion answerQuestion = null; if(answerPaperId == null) { Paper paper = paperService.getPaperById(paperId); if(paper != null) { AnswerPaper answerPaper = answerPaperService.findByAnswerUserAndPaperName(username, paper.getName()); if(answerPaper != null) { answerQuestion = answerQuestionService.getAnswerQuestionByPaperIdAndQuestionNumber(answerPaper.getId(), number); } } }else { answerQuestion = answerQuestionService.getAnswerQuestionByPaperIdAndQuestionNumber(answerPaperId, number); } if(answerQuestion == null) { question = questionService.getQuestionByPaperIdAndQuestionNumber(paperId, number); if(question != null) { //答案不返回 question.setAnswer(""); } } else { question = new Question(); question.setId(answerQuestion.getId()); question.setNumber(answerQuestion.getNumber()); question.setTitle(answerQuestion.getTitle()); question.setScore(answerQuestion.getScore()); question.setType(answerQuestion.getType()); question.setOptionA(answerQuestion.getOptionA()); question.setOptionB(answerQuestion.getOptionB()); question.setOptionC(answerQuestion.getOptionC()); question.setOptionD(answerQuestion.getOptionD()); question.setAnswer(answerQuestion.getAnswer()); } return question; } @RequestMapping(value = "/submit/{type}/{username}", method = RequestMethod.POST) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')") public ResponseEntity<?> submit(@RequestBody Paper paper, @PathVariable String type, @PathVariable String username, @RequestParam(required = false) String answerPaperId) { /** * 更改试卷状态,finished:true */ if(type.equals("official")) { /** * 正式考试 */ AnswerPaper answerPaper = new AnswerPaper(); if(answerPaperId != null) { answerPaper.setId(answerPaperId); }else { return new ResponseEntity<Object>(HttpStatus.INTERNAL_SERVER_ERROR); } answerPaper.setAnswerTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); answerPaper.setPaperName(paper.getName()); answerPaper.setAnswerUser(username); answerPaper.setChecked("false"); answerPaper.setFinished("true"); answerPaper.setType("official"); examService.updateAnswerPaper(answerPaper); } else if(type.equals("simulate")) { /** * 模拟考试 */ AnswerPaper answerPaper = new AnswerPaper(); if(answerPaperId != null) { answerPaper.setId(answerPaperId); }else { return new ResponseEntity<Object>(HttpStatus.INTERNAL_SERVER_ERROR); } answerPaper.setAnswerTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); answerPaper.setPaperName(paper.getName()); answerPaper.setAnswerUser(username); answerPaper.setChecked("false"); answerPaper.setFinished("true"); answerPaper.setType("simulate"); examService.updateAnswerPaper(answerPaper); }else if(type.equals("practice")) { /** * 1.接收提交的试卷 * 2.计算成绩 * 3.记录考试记录 * 4.返回计算结果 */ int score = 0; //正确题目数 double right = 0.0; //错误题目数 double wrong = 0.0; double correctRate = 0.0; List<Question> questions = questionService.getQuestionByPaperId(paper.getId()); AnswerPaper answerPaper = answerPaperService.findByAnswerUserAndPaperName(username, paper.getName()); List<AnswerQuestion> answerQuestions = answerQuestionService.findByAnswerPaperId(answerPaper.getId()); /*保存题目信息,返回给前端*/ List<DtoRightAndWrong> results = new ArrayList<DtoRightAndWrong>(); DtoRightAndWrong dtoRightAndWrong = null; //遍历提交的试卷的题目 for(AnswerQuestion answerQuestion : answerQuestions) { //遍历包含正确答案的题目 for(Question question : questions) { /** * 1.题目序号相同 * 2.结果与答案相同 */ if(answerQuestion.getNumber().equals(question.getNumber())) { if(answerQuestion.getAnswer().equals(question.getAnswer())) { /*累计得分*/ score += Integer.parseInt(question.getScore()); right ++; }else { wrong ++; //记录错题 dtoRightAndWrong = new DtoRightAndWrong(); dtoRightAndWrong.setQuestion(question); dtoRightAndWrong.setAnswerQuestion(answerQuestion); results.add(dtoRightAndWrong); //保存错题 WrongQuestion wrongQuestion = new WrongQuestion(); try{ BeanUtils.copyProperties(wrongQuestion, answerQuestion); wrongQuestion.setUsername(username); wrongQuestion.setRightAnswer(question.getAnswer()); wrongQuestion.setAnalysis(question.getAnalysis()); if(wrongQuestionService.getWrongQuestion(wrongQuestion.getId()) == null) { wrongQuestionService.saveQuestion(wrongQuestion); } }catch (Exception e) { System.out.println(wrongQuestion.toString()); } } } } } //计算正确率 correctRate = (right/(right + wrong)) * 100; DtoResult result = new DtoResult(); result.setScore(score); result.setRight(right); result.setWrong(wrong); result.setCorrectRate(correctRate); result.setResults(results); Paper paper1 = paperService.getPaperById(paper.getId()); //更新参与人数 paper1.setPeoples(String.valueOf(Integer.parseInt(paper1.getPeoples()) + 1)); paperService.updatePaper(paper1); return new ResponseEntity<Object>(result, HttpStatus.OK); } Paper paper1 = paperService.getPaperById(paper.getId()); //更新参与人数 paper1.setPeoples(String.valueOf(Integer.parseInt(paper1.getPeoples() + 1))); paperService.updatePaper(paper1); return new ResponseEntity<Object>(HttpStatus.OK); } /** * 提交题目 * @param username * @param dtoAnswerPaper * @return */ @RequestMapping(value = "/submit/one/{username}", method = RequestMethod.POST) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')") public ResponseEntity<?> submitOne(@PathVariable String username, @RequestBody DtoAnswerPaper dtoAnswerPaper) { Paper paper = dtoAnswerPaper.getPaper(); Question question = dtoAnswerPaper.getQuestion(); //判断数据库是否保存了这次答卷 AnswerPaper answerPaper = answerPaperService.getAnswerPaperByNameAndUser(paper.getName(), username); AnswerQuestion answerQuestion = null; AnswerPaperQuestion answerPaperQuestion = null; List<AnswerQuestion> answerQuestions = null; //重新生成id String answerPaperId = IdGen.uuid(); String answerQuestionId = IdGen.uuid(); //答卷为空,则执行保存 if(answerPaper == null) { answerPaper = new AnswerPaper(); answerPaper.setId(answerPaperId); answerPaper.setAnswerTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); answerPaper.setPaperName(paper.getName()); answerPaper.setType(paper.getType()); answerPaper.setAnswerUser(username); answerPaper.setChecked("false"); answerPaper.setFinished("false"); //保存答卷 answerPaperService.saveAnswerPaper(answerPaper); // TODO: 2017-04-17 保存试卷答卷 PaperAnswerPaper paperAnswerPaper = new PaperAnswerPaper(); paperAnswerPaper.setPaperId(paper.getId()); paperAnswerPaper.setAnswerPaperId(answerPaperId); paperAnswerPaperService.save(paperAnswerPaper); //新记录 answerQuestion = new AnswerQuestion(); //初始化信息 answerQuestion.setId(answerQuestionId); answerQuestion.setTitle(question.getTitle()); answerQuestion.setType(question.getType()); answerQuestion.setNumber(question.getNumber()); answerQuestion.setOptionA(question.getOptionA()); answerQuestion.setOptionB(question.getOptionB()); answerQuestion.setOptionC(question.getOptionC()); answerQuestion.setOptionD(question.getOptionD()); answerQuestion.setContent(question.getContent()); answerQuestion.setScore(question.getScore()); answerQuestion.setAnalysis(question.getAnalysis()); answerQuestion.setAnswer(question.getAnswer()); answerPaperQuestion = new AnswerPaperQuestion(); answerPaperQuestion.setAnswerPaperId(answerPaper.getId()); answerPaperQuestion.setAnswerQuestionId(answerQuestionId); //保存 answerQuestionService.saveAnswerQuestion(answerQuestion); answerPaperQuestionService.saveAnswerPaperQuestion(answerPaperQuestion); return new ResponseEntity<Object>(answerPaper, HttpStatus.OK); } else { answerQuestions = answerQuestionService.findByAnswerPaperId(answerPaper.getId()); if(answerQuestions != null && answerQuestions.size() > 0) { int count = 0; AnswerQuestion existAnswerQuestion = null; for(AnswerQuestion question1 : answerQuestions) { if (question1.getNumber().equals(question.getNumber())) { count++; existAnswerQuestion = question1;//保存当前存在的记录 } } //记录不存在 if(count == 0) { //新记录 answerQuestion = new AnswerQuestion(); answerPaperQuestion = new AnswerPaperQuestion(); answerQuestion = new AnswerQuestion(); //初始化信息 answerQuestion.setId(answerQuestionId); answerQuestion.setTitle(question.getTitle()); answerQuestion.setType(question.getType()); answerQuestion.setNumber(question.getNumber()); answerQuestion.setOptionA(question.getOptionA()); answerQuestion.setOptionB(question.getOptionB()); answerQuestion.setOptionC(question.getOptionC()); answerQuestion.setOptionD(question.getOptionD()); answerQuestion.setContent(question.getContent()); answerQuestion.setScore(question.getScore()); answerQuestion.setAnalysis(question.getAnalysis()); answerQuestion.setAnswer(question.getAnswer()); answerPaperQuestion = new AnswerPaperQuestion(); answerPaperQuestion.setAnswerPaperId(answerPaper.getId()); answerPaperQuestion.setAnswerQuestionId(answerQuestionId); //保存 answerQuestionService.saveAnswerQuestion(answerQuestion); answerPaperQuestionService.saveAnswerPaperQuestion(answerPaperQuestion); } else { //记录存在,则执行更新 // TODO: 2017/3/30 //更新当前存在的记录 existAnswerQuestion.setAnswer(question.getAnswer()); answerQuestionService.updateAnswerQuestion(existAnswerQuestion); } } } return new ResponseEntity<Object>(answerPaper, HttpStatus.OK); } }
答卷控制层,用于获取已经提交的答卷:
/** * 答卷控制层,用于获取已经提交的答卷 */ @RestController @RequestMapping("/v1/answer-papers") public class AnswerPaperController { @Autowired AnswerPaperService answerPaperService; @Autowired AnswerQuestionService answerQuestionService; /** * 根据ID查找 * @param id * @return */ @RequestMapping(value = "/{id}", method = RequestMethod.GET) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')") public AnswerPaper getAnswerPaper(@PathVariable String id) { return answerPaperService.getAnswerPaperById(id); } /** * 根据name查找 * @param name * @return */ @RequestMapping(value = "/name/{name}", method = RequestMethod.GET) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')") public List<AnswerPaper> getAnswerPaperByName(@PathVariable String name) { return answerPaperService.getAnswerPaperFuzzy(name); } /** * 根据答卷id和题目编号获取题目信息 * @param paperId * @param number * @return */ @RequestMapping(value = "/papers/{paperId}/questions/{number}", method = RequestMethod.GET) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')") public AnswerQuestion getQuestionByPaperIdAndQuestionId(@PathVariable String paperId, @PathVariable Integer number) { AnswerQuestion answerQuestion = answerQuestionService.getAnswerQuestionByPaperIdAndQuestionNumber(paperId, number); return answerQuestion; } /** * 已分页方式获取数据 * @param username * @param pageIndex * @param pageSize * @param limit * @param offset * @return */ @RequestMapping(value = "/users/{username}", method = RequestMethod.GET) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')") public PageInfo<AnswerPaper> getListByUser(@PathVariable("username") String username, @RequestParam(required = false) Integer pageIndex, @RequestParam(required = false) Integer pageSize, @RequestParam(required = false) Integer limit, @RequestParam(required = false) Integer offset) { if(pageIndex != null && pageSize != null) { PageHelper.startPage(pageIndex, pageSize); } List<AnswerPaper> answerPapers = answerPaperService.getAnswerPaperListByAnswerUser(username); PageInfo pageInfo = new PageInfo(answerPapers); return pageInfo; } @RequestMapping(value = "/users/{username}/type/{type}", method = RequestMethod.GET) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')") public PageInfo<AnswerPaper> getListByUserAndType(@PathVariable("username") String username, @PathVariable("type") String type, @RequestParam(required = false) Integer pageIndex, @RequestParam(required = false) Integer pageSize, @RequestParam(required = false) Integer limit, @RequestParam(required = false) Integer offset) { if(pageIndex != null && pageSize != null) { PageHelper.startPage(pageIndex, pageSize); } List<AnswerPaper> answerPapers = answerPaperService.getAnswerPaperListByAnswerUserAndType(username, type); PageInfo pageInfo = new PageInfo(answerPapers); return pageInfo; } /** * 获取未批改或已批改的答卷数量, * @return */ @RequestMapping("/check") @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')") public DtoTask countUnCheckAnswerPaper() { DtoTask dtoTask = new DtoTask(); Integer checked = answerPaperService.countCheck("true"); Integer unChecked = answerPaperService.countCheck("false"); dtoTask.setChecked(checked); dtoTask.setUnChecked(unChecked); return dtoTask; } /** * 以分页方式获取数据 * @param pageIndex * @param pageSize * @param limit * @param offset * @return */ @RequestMapping(value = "", method = RequestMethod.GET) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')") public PageInfo<AnswerPaper> getListByUser(@RequestParam(required = false) Integer pageIndex, @RequestParam(required = false) Integer pageSize, @RequestParam(required = false) Integer limit, @RequestParam(required = false) Integer offset) { if(pageIndex != null && pageSize != null) { PageHelper.startPage(pageIndex, pageSize); } List<AnswerPaper> answerPapers = answerPaperService.getAnswerPaperList(); PageInfo pageInfo = new PageInfo(answerPapers); return pageInfo; } /** * 更新 * @param answerPaper * @return */ @RequestMapping(value = "", method = RequestMethod.PUT) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')") public ResponseEntity<?> putPaper(@RequestBody AnswerPaper answerPaper) { answerPaperService.updatePaper(answerPaper); return new ResponseEntity(HttpStatus.OK); } /** * 计算考试成绩 * @param id * @return */ @RequestMapping(value = "/{id}/calculate", method = RequestMethod.PUT) @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "') or hasAuthority('" + Role.ROLE_STUDENT + "')") public ResponseEntity<?> CalculationScore(@PathVariable String id) { /** * 计算成绩 */ List<AnswerQuestion> questions = answerQuestionService.findByAnswerPaperId(id); if(questions != null && questions.size() > 0) { int score = 0; try { for(AnswerQuestion question : questions) { score += Integer.parseInt(question.getMarkScore()); } } catch (Exception e) { // TODO: 2017/4/1 } /** * 保存成绩 */ AnswerPaper answerPaper = new AnswerPaper(); answerPaper.setId(id); answerPaper.setScore(Integer.toString(score)); answerPaper.setChecked("true"); answerPaperService.updatePaper(answerPaper); } else { // TODO: 2017/4/1 } return new ResponseEntity<Object>(HttpStatus.OK); } @RequestMapping(value = "/analysis/paper") @PreAuthorize("hasAuthority('" + Role.ROLE_TEACHER + "') or hasAuthority('" + Role.ROLE_ADMIN + "')") public List<PaperAnalysis> analysisPaper() { return answerPaperService.analysisPaper(); } }
以上就是Java Online Exam在线考试系统的实现的详细内容,更多关于Java 在线考试系统的资料请关注脚本之家其它相关文章!