Java实现在线考试系统与设计(学生功能)
学生模块功能比较少,就是进行考试和查看自己成绩两个大的功能。
学生进行考试的功能比较复杂(首先做了校验,不在考试时间范围内,不能进行考试)
@InitBinder publicvoidinitBinder(WebDataBinderbinder){ SimpleDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"); binder.registerCustomEditor(Date.class,newCustomDateEditor(dateFormat,true)); } @RequestMapping("/list") publicStringshowExam(HttpServletRequestrequest,Integercurr,Modelmodel){ if(curr==null){ curr=1; } HttpSessionsession=request.getSession(); Studentstudent=(Student)session.getAttribute("studentInfo"); Integerclassesid=student.getClassesid(); if(classesid!=null){ PageInfopublishexamList=publishExamService.selectAll(classesid,curr,5); model.addAttribute("publishexamList",publishexamList); } model.addAttribute("studentInfo",student); return"/exam/list"; } //进入考试页面,初始化数据 @SuppressWarnings("unchecked") @RequestMapping("/exam") publicStringexam(HttpServletRequestrequest,intid,Modelmodel){ //0表示0.5小时,1表示1小时,2表示1.5小时,3表示2小时,4表示2.5小时,5表示3小时 //考试时间所对应的毫秒数 long[]dateLong={30*60*1000,60*60*1000,90*60*1000,120*60*1000,150*60*1000,180*60*1000}; PublishexamWithBLOBspublishexam=publishExamService.selectByKey(id); HttpSessionsession=request.getSession(); Studentstudent=(Student)session.getAttribute("studentInfo"); //在考试记录表中添加一条考试信息 Examhisexamhis=examhisService.studentIsNotExam(student.getId(),publishexam.getSubjectId(),publishexam.getExamtime()); List textList=null; ArrayList list=JsonUtils.toBean(publishexam.getExam(),ArrayList.class,TextModel.class); Datedate=newDate(); Datedate2=newDate(); date2.setTime(publishexam.getExamtime().getTime()+dateLong[publishexam.getExamlength()]); //当前时间如果在考试时间之前,考试还未开始 if(date.compareTo(publishexam.getExamtime())<=0){ model.addAttribute("message","对不起当前考试还未开始!"); return"/message"; } /*1.当前时间>考试时间+考试时长,考试已经结束 2.examhis=null,则证明作者第一次点击开始考试 如果examhis不为空 状态为1:表示正在考试 状态为2:表示已经考试结束, 状态为3:表示老师已经阅完试卷 */ if(date.compareTo(date2)>=0||(examhis!=null&&examhis.getStatus()!=1)){ model.addAttribute("message","对不起当前考试已经结束!"); return"/message"; } if(examhis==null){ examhis=newExamhis(); examhis.setStudentid(student.getId()); examhis.setStudentname(student.getName()); examhis.setSubjectid(publishexam.getSubjectId()); examhis.setSubjectname(publishexam.getSubjectName()); examhis.setClassesid(student.getClassesid()); examhis.setClassesname(student.getClassesname()); examhis.setPublishexamid(id); examhis.setExamtime(publishexam.getExamtime()); examhis.setStatus(1); textList=newArrayList (); for(TextModeltextModel:list){ List text=textService.beginExam(textModel,publishexam.getSubjectId()); for(Texttext2:text){ text2.setTexId(textModel.getTextModelId()); } textList.addAll(text); } Stringjson=JsonUtils.toJson(textList); examhis.setExamtest(json); examhisService.insert(examhis); }else{ textList=JsonUtils.toBean(examhis.getExamtest(),ArrayList.class,Text.class); } intsum=0; for(TextModeltextModel:list){ sum+=textModel.getGrade()*textModel.getTextCount(); } List textModelList=textModelService.selectTextModel(list); model.addAttribute("textModelList",textModelList); model.addAttribute("studentInfo",student); model.addAttribute("textList",textList); model.addAttribute("publishexam",publishexam); model.addAttribute("sum",sum); model.addAttribute("examTimeLength",dateLong[publishexam.getExamlength()]/1000); model.addAttribute("examTime",(date2.getTime()-date.getTime())/1000); return"/exam/exam"; } //提交考试方法 @RequestMapping(value="/examEnd",method=RequestMethod.POST) @ResponseBody publicAjaxResultexamEnd(HttpServletRequestrequest,ExamListexamList,intid){ PublishexamWithBLOBspublishexam=publishExamService.selectByKey(id); HttpSessionsession=request.getSession(); Studentstudent=(Student)session.getAttribute("studentInfo"); //将考试信息转成json,改变考试状态,更新到考试历史记录表中 Examhisexamhis=examhisService.studentIsNotExam(student.getId(),publishexam.getSubjectId(),publishexam.getExamtime()); List list=examList.getExamList(); list.remove(0); for(Examexam:list){ exam.setText(textService.selectOne(exam.getTextId())); if(exam.getAnswer()==null){ exam.setAnswer(""); } } Stringjson=JsonUtils.toJson(list); examhis.setExamtest(json); examhis.setStatus(2); examhisService.update(examhis); returnAjaxResult.successInstance("您已成功提交考试"); }
//JS实现倒计时,考试结束提交试卷 functionstartTime(){ //定义考试剩余时间,时间为毫秒数 //examTime="${examTime}";//对考试剩余时间赋值 //varexam=parseInt("${examTime}"); varexamTime=parseInt(examTimes.innerHTML); varexamTimeLength;//考试时长 examTimeLength="${examTimeLength}"; if((examTime)<0){ alert("考试时间到!\n即将提交试卷!"); document.forms[0].submit(); }else{ //varlm=Math.floor((examTimeLength-examTime)/60000); varlh=Math.floor(((examTimeLength-examTime)/3600)%60) varlm=Math.floor(((examTimeLength-examTime)/60)%60); varls=(examTimeLength-examTime)%60; varyh=Math.floor((examTime/3600)%60); varym=Math.floor((examTime/60)%60); varys=examTime%60; document.getElementById("tTime").innerHTML="考试已经开始了"+lh+"时"+lm+"分"+ls+"秒"+",剩余"+yh+"时"+ym+"分"+ys+"秒"; } examTime--; examTimes.innerHTML=examTime; setTimeout(startTime,1000); } vartimer=null; //当页面加载后,启动周期性定时器,每过1秒执行startTime window.onload=function(){ startTime(); }
因为查询成绩比较简单,就是查询出学生成绩,显示到页面上而已,正在进行的考试成绩为空。
总结
以上所述是小编给大家介绍的Java实现在线考试系统与设计(学生功能),希望对大家有所帮助!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。