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());
ListtextList=null;
ArrayListlist=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){
Listtext=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();
}
ListtextModelList=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());
Listlist=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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。