欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實(shí)現(xiàn)在線考試系統(tǒng)與設(shè)計(學(xué)生功能)

 更新時間:2020年02月15日 15:58:56   作者:靈魂_漫步  
這篇文章主要介紹了Java實(shí)現(xiàn)在線考試系統(tǒng)與設(shè)計(學(xué)生功能),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下

學(xué)生模塊功能比較少,就是進(jìn)行考試和查看自己成績兩個大的功能。

學(xué)生進(jìn)行考試的功能比較復(fù)雜(首先做了校驗(yàn),不在考試時間范圍內(nèi),不能進(jìn)行考試)

這里寫圖片描述

這里寫圖片描述

考試試題是數(shù)據(jù)庫根據(jù)發(fā)布考試時的條件隨機(jī)產(chǎn)生的一套試題。因?yàn)槊看慰荚囶}型題量都是不同的,因此我們繼續(xù)采用JSON的格式去保存數(shù)據(jù),當(dāng)狀態(tài)為1:表示正在考試;狀態(tài)為2:表示已經(jīng)考試結(jié)束;狀態(tài)為3:表示老師已經(jīng)閱完試卷

(1)當(dāng)考試考試的時候,會給考上隨機(jī)產(chǎn)生一套試題,并存儲到數(shù)據(jù)庫中,如果考試中電腦突然壞了可以保證重新打開還是之前的試題

(2)考試時間結(jié)束會自動提交考試,此時會將有學(xué)生成績的試題保存到數(shù)據(jù)庫中,老師批閱試卷就是從該JSON中讀取出來的

(3)老師批閱完試卷以后,狀態(tài)會變?yōu)?,JSON中會加上考生每道題的得分情況(考試倒計時根據(jù)考試考試時間和考試時間長度進(jìn)行計算出來的,如果下午四點(diǎn)考試結(jié)束,學(xué)生三點(diǎn)半登錄系統(tǒng),就只有半個小時時間進(jìn)行考試)

這里寫圖片描述

@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";
	}
	
	//進(jìn)入考試頁面,初始化數(shù)據(jù)
	@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小時
		//考試時間所對應(yīng)的毫秒數(shù)
		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()]);
		//當(dāng)前時間如果在考試時間之前,考試還未開始
		if (date.compareTo(publishexam.getExamtime()) <= 0){
			model.addAttribute("message", "對不起當(dāng)前考試還未開始!");
			return "/message";
		}
		
		/*1.當(dāng)前時間>考試時間+考試時長,考試已經(jīng)結(jié)束
		 2.examhis=null,則證明作者第一次點(diǎn)擊開始考試
			如果examhis不為空
				狀態(tài)為1:表示正在考試
				狀態(tài)為2:表示已經(jīng)考試結(jié)束,
				狀態(tài)為3:表示老師已經(jīng)閱完試卷
		*/
		if (date.compareTo(date2) >= 0 || (examhis != null && examhis.getStatus() != 1)){
			model.addAttribute("message", "對不起當(dāng)前考試已經(jīng)結(jié)束!");
			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");
		//將考試信息轉(zhuǎn)成json,改變考試狀態(tài),更新到考試歷史記錄表中
		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實(shí)現(xiàn)倒計時,考試結(jié)束提交試卷
 function startTime(){ 
 	//定義考試剩余時間,時間為毫秒數(shù)
  //examTime = "${examTime}";//對考試剩余時間賦值
 	//var exam = parseInt("${examTime}");
 	var examTime = parseInt(examTimes.innerHTML); 
	 var examTimeLength;//考試時長
	 examTimeLength = "${examTimeLength}"; 
	 if ((examTime)<0){
	 	alert("考試時間到!\n即將提交試卷!");
	 	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 = "考試已經(jīng)開始了" + lh + "時" + lm + "分" + ls + "秒" + ",剩余" + yh + "時" + ym + "分" + ys + "秒";
	 }
	 examTime--;
	 examTimes.innerHTML=examTime;
	 setTimeout(startTime,1000);
 }
 var timer=null;
 //當(dāng)頁面加載后,啟動周期性定時器,每過1秒執(zhí)行startTime
 window.onload=function(){
 	startTime();
 }
 </script>

因?yàn)椴樵兂煽儽容^簡單,就是查詢出學(xué)生成績,顯示到頁面上而已,正在進(jìn)行的考試成績?yōu)榭铡?/p>

這里寫圖片描述

總結(jié)

以上所述是小編給大家介紹的Java實(shí)現(xiàn)在線考試系統(tǒng)與設(shè)計(學(xué)生功能),希望對大家有所幫助!

相關(guān)文章

最新評論