Java Online Exam在線考試系統(tǒng)的實現(xiàn)
一、項目簡述
本系統(tǒng)主要實現(xiàn)的功能有: 學生以及老師的注冊登錄,在線考試,錯題查詢,學生管理,問題管理,錯題管理,錯題查詢,分數(shù)查詢,試卷管 理,人工組卷。自動組卷,教師,班級,統(tǒng)計等等管理功能。
二、項目運行
環(huán)境配置: 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 = "根據(jù)名字獲取科目信息", notes = "根據(jù)科目名稱獲取科目詳細信息")
@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 = "根據(jù)課程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 = "創(chuàng)建課程", notes = "創(chuàng)建課程")
@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 = "根據(jù)課程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 = "根據(jù)課程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 = "根據(jù)課程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 = "獲取試卷題目數(shù)量", 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 = "創(chuàng)建題目", notes = "創(chuàng)建題目")
@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 = "根據(jù)題目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 = "根據(jù)試卷id和題目編號獲取題目信息", notes = "根據(jù)題目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("根據(jù)答卷id獲取答卷失敗");
}
}
return questionService.getQuestionByPaperIdAndQuestionNumber(paperId, number);
}
@ApiOperation(value = "獲取題目信息", notes = "根據(jù)題目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 = "根據(jù)試卷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 = "根據(jù)試卷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 = "根據(jù)題目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 = "根據(jù)題目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 = "根據(jù)試卷id和題目編號獲取題目信息", notes = "根據(jù)題目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) {
/**
* 更改試卷狀態(tài),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;
//正確題目數(shù)
double right = 0.0;
//錯誤題目數(shù)
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());
//更新參與人數(shù)
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());
//更新參與人數(shù)
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();
//判斷數(shù)據(jù)庫是否保存了這次答卷
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();
//答卷為空,則執(zhí)行保存
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 {
//記錄存在,則執(zhí)行更新
// TODO: 2017/3/30
//更新當前存在的記錄
existAnswerQuestion.setAnswer(question.getAnswer());
answerQuestionService.updateAnswerQuestion(existAnswerQuestion);
}
}
}
return new ResponseEntity<Object>(answerPaper, HttpStatus.OK);
}
}
答卷控制層,用于獲取已經(jīng)提交的答卷:
/**
* 答卷控制層,用于獲取已經(jīng)提交的答卷
*/
@RestController
@RequestMapping("/v1/answer-papers")
public class AnswerPaperController {
@Autowired
AnswerPaperService answerPaperService;
@Autowired
AnswerQuestionService answerQuestionService;
/**
* 根據(jù)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);
}
/**
* 根據(jù)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);
}
/**
* 根據(jù)答卷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;
}
/**
* 已分頁方式獲取數(shù)據(jù)
* @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;
}
/**
* 獲取未批改或已批改的答卷數(shù)量,
* @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;
}
/**
* 以分頁方式獲取數(shù)據(jù)
* @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在線考試系統(tǒng)的實現(xiàn)的詳細內容,更多關于Java 在線考試系統(tǒng)的資料請關注腳本之家其它相關文章!
相關文章
Java實現(xiàn)操作JSON的便捷工具類完整實例【重寫Google的Gson】
這篇文章主要介紹了Java實現(xiàn)操作JSON的便捷工具類,基于重寫Google的Gson實現(xiàn),涉及java針對json數(shù)據(jù)的各種常見轉換操作實現(xiàn)技巧,需要的朋友可以參考下2017-10-10
SpringCloudAlibaba整合Feign實現(xiàn)遠程HTTP調用的簡單示例
這篇文章主要介紹了SpringCloudAlibaba 整合 Feign 實現(xiàn)遠程 HTTP 調用,文章中使用的是OpenFeign,是Spring社區(qū)開發(fā)的組件,需要的朋友可以參考下2021-09-09
Java動態(tài)數(shù)組ArrayList實現(xiàn)動態(tài)原理
ArrayList是一種動態(tài)數(shù)組,它可以在運行時自動調整大小以適應元素的添加和刪除,在Java中,你可以使用ArrayList類來實現(xiàn)動態(tài)數(shù)組,本文將給大家介紹一下ArrayList動態(tài)數(shù)組,是怎么實現(xiàn)動態(tài)的2023-08-08
Spring為singleton?bean注入prototype?bean
這篇文章主要介紹了Spring為singleton?bean注入prototype?bean,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-07-07
Java實戰(zhàn)寵物醫(yī)院預約掛號系統(tǒng)的實現(xiàn)流程
只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+JSP+Spring+SpringBoot+MyBatis+html+layui+maven+Mysql實現(xiàn)一個寵物醫(yī)院預約掛號系統(tǒng),大家可以在過程中查缺補漏,提升水平2022-01-01

