자바 온라인 시험 시스템 및 디자인 실현(학생 기능)

학생 모듈 의 기능 이 비교적 적은 것 은 바로 시험 을 치 르 는 것 과 자신의 성적 을 보 는 두 가지 큰 기능 이다.
학생 들 이 시험 을 치 르 는 기능 이 비교적 복잡 하 다.
这里写图片描述
这里写图片描述
시험 문 제 는 데이터베이스 가 시험 을 발표 할 때의 조건 에 따라 무 작위 로 발생 하 는 시험 문제 다.매번 시험 문제 의 양 이 다 르 기 때문에 우 리 는 JSON 형식 으로 데 이 터 를 저장 하고 상태 가 1 이면 시험 중 임 을 나타 낸다.상 태 는 2:시험 이 끝 났 음 을 나타 낸다.상 태 는 3:선생님 이 이미 시험 지 를 다 읽 었 음 을 나타 낸다.
(1)시험 을 볼 때 시험 에 무 작위 로 시험 문 제 를 만들어 데이터베이스 에 저장한다.만약 에 시험 중 에 컴퓨터 가 갑자기 고장 나 면 다시 여 는 것 이 이전의 시험 문제 라 는 것 을 보증 할 수 있다.
(2)시험 시간 이 끝나 면 자동 으로 시험 이 제출 되 며,이때 학생 성적 이 있 는 시험 문 제 를 데이터베이스 에 저장 합 니 다.선생님 이 채점 한 시험 지 는 해당 JSON 에서 읽 은 것 입 니 다.
(3)선생님 이 시험 지 를 채점 하고 나 면 상태 가 3 으로 바 뀌 고 JSON 에는 수험생 의 문제 당 점수 상황(시험 카운트다운 은 시험 시간 과 시험 시간 에 따라 계산 되 며 오후 4 시 에 시험 이 끝나 면 학생 들 이 3 시 반 에 시스템 에 로그 인하 면 30 분 밖 에 시험 을 볼 수 없다)
这里写图片描述

@InitBinder
	public void initBinder(WebDataBinder binder) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
	}
	
	@RequestMapping("/list")
	public String showExam(HttpServletRequest request,Integer curr, Model model){
		if (curr == null){
			curr = 1;
		}
		HttpSession session = request.getSession();
		Student student = (Student) session.getAttribute("studentInfo");
		Integer classesid = student.getClassesid();
		if (classesid != null){
			PageInfo<Publishexam> publishexamList = publishExamService.selectAll(classesid, curr, 5);
			model.addAttribute("publishexamList", publishexamList);
		}
		model.addAttribute("studentInfo", student);
		return "/exam/list";
	}
	
	//      ,     
	@SuppressWarnings("unchecked")
	@RequestMapping("/exam")
	public String exam(HttpServletRequest request,int id,Model model){
		
		//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};
		
		PublishexamWithBLOBs publishexam = publishExamService.selectByKey(id);
		HttpSession session = request.getSession();
		Student student = (Student) session.getAttribute("studentInfo");
		
		//               
		Examhis examhis = examhisService.studentIsNotExam(student.getId(), publishexam.getSubjectId(), publishexam.getExamtime());
		List<Text> textList = null;
		ArrayList<TextModel> list = JsonUtils.toBean(publishexam.getExam(), ArrayList.class, TextModel.class);
		Date date = new Date();
		Date date2 = new Date();
		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 = new Examhis();
			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 = new ArrayList<Text>();		
			for (TextModel textModel : list) {
				List<Text> text = textService.beginExam(textModel,publishexam.getSubjectId());
				for (Text text2 : text) {
					text2.setTexId(textModel.getTextModelId());
				}
				textList.addAll(text);
			}
			String json = JsonUtils.toJson(textList);
			examhis.setExamtest(json);
			examhisService.insert(examhis);
		}else{
			textList = JsonUtils.toBean(examhis.getExamtest(), ArrayList.class, Text.class);
		}
		
		int sum = 0;
		for (TextModel textModel : list) {
			sum += textModel.getGrade()*textModel.getTextCount();
		}
		List<Textmodel> 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
	public AjaxResult examEnd(HttpServletRequest request, ExamList examList, int id){
		PublishexamWithBLOBs publishexam = publishExamService.selectByKey(id);
		HttpSession session = request.getSession();
		Student student = (Student) session.getAttribute("studentInfo");
		//       json,      ,           
		Examhis examhis = examhisService.studentIsNotExam(student.getId(), publishexam.getSubjectId(), publishexam.getExamtime());
		List<Exam> list = examList.getExamList();
		list.remove(0);
		for (Exam exam : list) {
			exam.setText(textService.selectOne(exam.getTextId()));
			if (exam.getAnswer() == null){
				exam.setAnswer(" ");
			}
		}
		String json = JsonUtils.toJson(list);
		examhis.setExamtest(json);
		examhis.setStatus(2);
		examhisService.update(examhis);
		return AjaxResult.successInstance("        ");
	}

 <script type="text/javascript">
 //JS     ,        
 function startTime(){ 
 	//        ,      
  //examTime = "${examTime}";//         
 	//var exam = parseInt("${examTime}");
 	var examTime = parseInt(examTimes.innerHTML); 
	 var examTimeLength;//    
	 examTimeLength = "${examTimeLength}"; 
	 if ((examTime)<0){
	 	alert("     !
!"); document.forms[0].submit(); }else{ //var lm = Math.floor((examTimeLength - examTime) / 60000); var lh = Math.floor(((examTimeLength - examTime) / 3600) % 60) var lm = Math.floor(((examTimeLength - examTime) / 60) % 60); var ls = (examTimeLength - examTime) % 60; var yh = Math.floor((examTime / 3600) % 60); var ym = Math.floor((examTime / 60) % 60); var ys = examTime % 60; document.getElementById("tTime").innerHTML = " " + lh + " " + lm + " " + ls + " " + ", " + yh + " " + ym + " " + ys + " "; } examTime--; examTimes.innerHTML=examTime; setTimeout(startTime,1000); } var timer=null; // , , 1 startTime window.onload=function(){ startTime(); } </script>
조회 성적 이 비교적 간단 하기 때문에 학생 성적 을 조회 하여 페이지 에 표시 할 뿐 현재 진행 중인 시험 성적 은 비어 있 기 때문이다.
这里写图片描述
총결산
위 에서 말 한 것 은 소 편 이 소개 한 자바 가 온라인 시험 시스템 과 디자인(학생 기능)을 실현 하 는 데 도움 이 되 기 를 바 랍 니 다!

좋은 웹페이지 즐겨찾기