基于springboot和mysql实现的在线考试系统
1.项目介绍
一个在线考试系统,考生可以注册,成为本平台的一个用户,然后进行考试,考完生成成绩,同时用户可以查询自己考试的试卷,可以查看试卷解析。
升级改版
新增出卷人角色,主要职责是进入系统,出试卷,设置题目,发布考试通知。阅卷人角色,主要职责是进入系统改卷,由系统(使用随机算法)随机分配一个阅卷人进行改卷。当考生开始考生,新增考试时间,在规定的时间内完成考试,否则自动退出。
2.数据库设计
2.1 表结构
exam_user表
exam_score表
exam_score_detail表
exam_paper表
exam_items
2.2 E-R图
3.项目实现
3.1 全局统一异常处理
java
@Component
public class MyExceptionHandler implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response,
Object o,
Exception e) {
MyException myException;
String message = null;
if (e instanceof MyException){
myException = (MyException) e;
message = myException.getMessage();
}else{
message = (e.getMessage()==null||"".equals(e.getMessage()))? "未知异常":e.getMessage();
}
return new ModelAndView("error/error","msg",message);
}
}
3.2 工具类(计算分数)
java
public class CalcScore {
@Autowired
private ExamItemsMapper examItemsMapper;
@Autowired
private ExamScoreMapper examScoreMapper;
@Autowired
private ExamScoreDetailMapper examScoreDetailMapper;
//计算分数的方法。
public ExamScore getScore(Map answer, int paperid, int userid){
int total = 0; //用于存总分。
int rights = 0; //答对题目数。
int errors = 0; //答错题目数。
//查出所有题目的正确答案。
List<ExamItems> examItemsList = examItemsMapper.searchItems(paperid);
//存详细信息的集合。
List<ExamScoreDetail> details = new ArrayList<>();
//比对答案,计算得分。
Iterator keys = answer.keySet().iterator();
while(keys.hasNext()){
ExamScoreDetail examScoreDetail = new ExamScoreDetail();
//获取题号,
String next = (String) keys.next();
//设置题号。
examScoreDetail.setEid(Integer.parseInt(next));
//找到答案对应的题号
for (int i = 0;i<examItemsList.size();i++){
//判断是否是同一道题。
if (examItemsList.get(i).getEid()==Integer.parseInt(next)){
//是同一道题,就存入用户答案。
examScoreDetail.setUanswer((String) answer.get(next));
//如果是相同题号,就进行答案的对比
if (answer.get(next)!=null&&answer.get(next).equals(examItemsList.get(i).getEkeys())){
//答案正确,就累加分数。
total+=examItemsList.get(i).getEscore();
//同时,正确题数也累加。
rights++;
//对了,所得分数就是这个题目的分数
examScoreDetail.setUpoint(examItemsList.get(i).getEscore());
}else{
//否则错误题数累加。
errors++;
//错了,所得分数为0;
examScoreDetail.setUpoint(0);
}
}
}
//添加到list集合中。
details.add(examScoreDetail);
}
//将成绩存入数据库中。
ExamScore examScore = new ExamScore();
examScore.setPaperid(paperid);
examScore.setUserid(userid);
examScore.setScore(total);
examScore.setRights(rights);
examScore.setErrors(errors);
examScoreMapper.insertSelective(examScore);
//遍历设置成绩的id,
for (int i = 0; i<details.size();i++){
//遍历设置成绩id
details.get(i).setScoreid(examScore.getScoreid());
}
//将成绩详情集合存到数据库中
examScoreDetailMapper.insertExamScoreDetailsByList(details);
return examScore;
}
}
3.3 答题卡控制器
ExamPaperCardController
java
@RequestMapping("/exam")
public class ExamPaperCardController {
@Autowired
private IExamItemService iExamItemService;
//答题卷
@RequestMapping("/paper/{paperid}")
public String startExam(@PathVariable int paperid,Model model){
model.addAttribute("items",iExamItemService.getItemsByPaperId(paperid));
model.addAttribute("paperid",paperid);
return "paper/testPaper";
}
//提交答案,运算分数控制器。
@RequestMapping("/{paperid}/result")
public String ExamResult(@PathVariable int paperid, HttpServletRequest request, HttpSession session,Model model){
// key:题号,value:用户答案
Map<String,String> userAnswers = new HashMap<>(); //用于存用户提交的答案。
//对用户的答案和题号进行封装。
for (int i = 18,j = 0 ; i< 33 ;i++,j++){
String an = request.getParameter(i+"");
System.out.println(i+"-->"+an);
userAnswers.put(i+"",an);
}
ExamUser online = (ExamUser) session.getAttribute("online");
//调用service层接口。获取成绩对象
ExamScore examScore = iExamItemService.saveScore(userAnswers, paperid, online.getUserid());
model.addAttribute("score",examScore);
return "paper/score";
}
//查看答案解析;
@RequestMapping("/{paperid}/check")
public String getAngni(@PathVariable int paperid,String papername,Model model,
HttpSession session){
ExamUser online = (ExamUser) session.getAttribute("online");
model.addAttribute("items",iExamItemService.getItemsAndScore(paperid,online.getUserid()));
model.addAttribute("papername",papername);
return "/paper/chechPaper";
}
ExamItemServiceImpl
java
public class ExamItemServiceImpl implements IExamItemService {
@Autowired
private ExamItemsMapper examItemsMapper;
@Autowired
private CalcScore calcScore;
@Override //根据试卷,查询题目.
public List<ExamItems> getItemsByPaperId(int paperid) {
return examItemsMapper.searchItems(paperid);
}
@Override //存答案,计算分数。存分数
public ExamScore saveScore(Map<String, String> map, int paperid, int userid) {
return calcScore.getScore(map,paperid,userid);
}
@Override //获取试卷的解析,and 答案。
public List<ExamItems> getItemsAndScore(int paperid,int userid) {
ExamPaper examPaper = new ExamPaper();
examPaper.setPaperid(paperid);
examPaper.setUserid(userid);
return examItemsMapper.findAllItemsAndScore(examPaper);
}
}
4.项目实现
登录界面
主页面
答题试卷
试卷解析
参考文献
- 基于Spring.NET的中职在线学习考试系统研究与实现(浙江工业大学·黄洁珏)
- 基于JSP技术在线考试系统的开发(武汉理工大学·龙保江)
- 基于B/S结构的网络考试系统设计与实现(黑龙江大学·宗垚)
- 在线考试系统的设计与实现(青岛大学·许光林)
- 基于JAVA考试培训系统的设计与实现(辽宁科技大学·李青军)
- 基于J2EE的网络考试系统的设计与实现(吉林大学·刘莎莎)
- 基于Web的在线考试系统的设计与实现(电子科技大学·廖欧)
- 计算机基础课程web考试系统的设计与实现(内蒙古大学·王春红)
- 基于ASP.NET技术的开放式在线学习及考试系统的研究与实现(中国海洋大学·李娅)
- 达州职业技术学院网上考试系统的设计与实现(电子科技大学·谷潇)
- 基于J2EE技术的考试系统的实现(大连海事大学·齐崧然)
- 数字校园建设中的网络考试系统的设计与实现(山东大学·石春菊)
- 基于JSP技术的在线考试系统设计与实现(华中师范大学·江泽中)
- 基于Java EE架构的在线考试系统设计与实现(西安电子科技大学·龚尚映)
- 基于J2EE的网络考试系统的设计与实现(吉林大学·刘莎莎)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕设货栈 ,原文地址:https://m.bishedaima.com/yuanma/35474.html