Java实现在线考试系统与设计(学生功能)

学生模块功能比较少,就是进行考试和查看自己成绩两个大的功能。

学生进行考试的功能比较复杂(首先做了校验,不在考试时间范围内,不能进行考试)

考试试题是数据库根据发布考试时的条件随机产生的一套试题。因为每次考试题型题量都是不同的,因此我们继续采用JSON的格式去保存数据,当状态为1:表示正在考试;状态为2:表示已经考试结束;状态为3:表示老师已经阅完试卷

(1)当考试考试的时候,会给考上随机产生一套试题,并存储到数据库中,如果考试中电脑突然坏了可以保证重新打开还是之前的试题

(2)考试时间结束会自动提交考试,此时会将有学生成绩的试题保存到数据库中,老师批阅试卷就是从该JSON中读取出来的

(3)老师批阅完试卷以后,状态会变为3,JSON中会加上考生每道题的得分情况(考试倒计时根据考试考试时间和考试时间长度进行计算出来的,如果下午四点考试结束,学生三点半登录系统,就只有半个小时时间进行考试)

@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("考试时间到!\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 = "考试已经开始了" + lh + "时" + lm + "分" + ls + "秒" + ",剩余" + yh + "时" + ym + "分" + ys + "秒";
	 }
	 examTime--;
	 examTimes.innerHTML=examTime;
	 setTimeout(startTime,1000);
 }
 var timer=null;
 //当页面加载后,启动周期性定时器,每过1秒执行startTime
 window.onload=function(){
 	startTime();
 }
 </script>

因为查询成绩比较简单,就是查询出学生成绩,显示到页面上而已,正在进行的考试成绩为空。

总结

以上所述是小编给大家介绍的Java实现在线考试系统与设计(学生功能),希望对大家有所帮助!

(0)

相关推荐

  • 计算机二级考试java软件操作教程 教大家如何学习java

    Java并不难,只是包含的内容比较多.语言本身相当精练,但功能非常强大.为了能够更加有效地使用Java编制程序,你需要学习该语言所包含的库,其中的内容十分丰富.在本书中.你将依次了解语言如何运行以及如何应用它.学习这些内容的顺序经过精心地安排,通过一些相对简单.明了的过程,你就可以获得一定的专业知识,建立运用Java进行程序设计的信心.每一章都尽量避免使用你还没有学习到的东西.这样一来,你不能马上编写嵌入Weh网页的Java程序,但是这确实是一种诱人的想法,有点像冒险跳入深水学习游泳.一般说来,

  • CCF考试试题之门禁系统java解题代码

    问题描述 涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况.每位读者有一个编号,每条记录用读者的编号来表示.给出读者的来访记录,请问每一条记录中的读者是第几次出现. 输入格式 输入的第一行包含一个整数n,表示涛涛的记录条数. 第二行包含n个整数,依次表示涛涛的记录中每位读者的编号. 输出格式 输出一行,包含n个整数,由空格分隔,依次表示每条记录中的读者编号是第几次出现. 样例输入 5 1 2 1 1 3 样例输出 1 1 2 3 1 评测用例规模与约定 1≤n≤1,000,读者的编号

  • Java项目实战之在线考试系统的实现(系统介绍)

    1.本系统和现在有的考试系统有以下几种优势: a.和现在有的系统比较起来,本系统有科目.章节.老师.学生.班级等信息的管理,还有批阅试卷查看已批阅试卷等.传统的考试系统划分并不细,业务功能简单. b.和学校的考试系统还有外面的考试系统比较起来,本系统是B/S结构,学校的考试系统一般为C/S结构,性能方面不如B/S结构,并且C/S接口需要安装客户端,客户端压力很大,我的系统只需要电脑具有浏览器,在同一局域网就可以进行考试. c.从架构方面来讲,我们的系统为分布式架构,传统的考试系统没有我们的架构合

  • Java实现在线考试系统与设计(学生功能)

    学生模块功能比较少,就是进行考试和查看自己成绩两个大的功能. 学生进行考试的功能比较复杂(首先做了校验,不在考试时间范围内,不能进行考试) 考试试题是数据库根据发布考试时的条件随机产生的一套试题.因为每次考试题型题量都是不同的,因此我们继续采用JSON的格式去保存数据,当状态为1:表示正在考试:状态为2:表示已经考试结束:状态为3:表示老师已经阅完试卷 (1)当考试考试的时候,会给考上随机产生一套试题,并存储到数据库中,如果考试中电脑突然坏了可以保证重新打开还是之前的试题 (2)考试时间结束会自

  • Java Online Exam在线考试系统的实现

    一.项目简述 本系统主要实现的功能有: 学生以及老师的注册登录,在线考试,错题查询,学生管理,问题管理,错题管理,错题查询,分数查询,试卷管 理,人工组卷.自动组卷,教师,班级,统计等等管理功能. 二.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持) 项目技术: VUE+Springboot+ SpringMVC + MyBatis + ThymeLeaf + Jav

  • Django框架实现在线考试系统的示例代码

    1.Django的简介 Django是一个基于MVC构造的框架.但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model).模板(Template)和视图(Views),称为 MTV模式.它们各自的职责如下: 层次 职责 模型(Model),即数据存取层 模型(Model),即数据存取层 模板(Template),即表现层 处理与表现相关的决定: 如何在页面或其他类型文档中进行显示. 视图(View),即业务逻辑层 存取模型及调取恰当模板的相

  • Java实战在线选课系统的实现流程

    一.项目简述 功能: 系统分为三个角色.最高权限管理员,学生,教师,包括 学生管理,教师管理,课程管理,选课,退课,成绩查 询.,教学课程,查看选课名单等等功能完全齐备. 二.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持) 项目技术: JSP +Spring + SpringMVC + MyBatis + Bootstrap4+ css + JavaScript +

  • php实现在线考试系统【附源码】

    说明:本篇文章是为了记录下学习开发思路,程序不具备商业价值,明白开发思路,商用需二次升级! 效果图如下: 题库首页展示 试题在线测试 分数统计 通过该小项目目的是练习PHP基础知识,通过对数组操作实现考题信息存储加载,引入模板文件,实现考题数据的调用布局. 1.由于小项目未使用数据库,考题以数组的形式存储在PHP文件中,部分代码如下: <?php//考试题库二return [ //题库标题 'title' => 'PHP基础语法考试题(二)', //答题时限(秒数) 'timeout' =&g

  • Java swing读取txt文件实现学生考试系统

    本文实例为大家分享了Java swing读取txt文件实现学生考试系统的具体代码,供大家参考,具体内容如下 主要实现了一个简单的倒计时答题系统 源码Testquestion 类 public class Testquestion { private String questionText ="";//定义题目 private String standardkey = "";// 定义正确答案 private String selectKey =""

  • Java实战之课程在线学习系统的实现

    目录 一.前言 项目介绍 项目运行 二.效果图展示 三.核心代码 用户管理控制层 角色管理控制层 课程管理控制层 一.前言 项目介绍 采用SpringBoot+Spring+Mybatis+Thyeleaf实现的在线学习系统,一共2个身份. 管理员登录系统后可以管理所有用户信息,管理角色信息,添加修改管理课件信息,学生学习培训批次管理,成绩导入管理 学生登录系统后可以查询自己的个人信息,查询课件列表学习,查询我的培训记录,查询自己的成绩 采用SpringBoot框架实现 前台模板用的thymel

  • Java 实战项目之小说在线阅读系统的实现流程

    一.项目简述 功能包括(管理员和游客角色): 1:用户及主要操作功能 游客可以浏览网站的主页,但是需要注册为会员后部分小 说才能对网络小说进免费行阅读或阅读.用户可以收藏书 架,留言评论,上次阅读,阅读历史,章节选择等等功 能. 2:管理模块 网络小说管理模块包括不同网络小说类别的添加,删除以 及网络小说的上传,删除管理.可以包括武侠小书,都市 言情,穿越小书等各个类等等功能. 二.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ

  • SpringBoot +Vue开发考试系统的教程

    一.考试系统简介 新鲜出炉的一款SpringBoot +Vue的考试系统,支持多种题型:选择题.多选题.判断题.填空题.综合题以及数学公式.支持在线考试,教师在线批改试卷. 二.项目架构 后端技术栈 SpringBoot: SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的创建.运行.调试.部署等. Mybatis: 一个持久层的框架,与数据库进行交互,将数据持久化到关系型数据库中 Shiro: 一个功能强大且易于使用的Java安全框架,进行身份验证

随机推荐