자바 온라인 시험 시스템 및 디자인 실현(학생 기능)
학생 들 이 시험 을 치 르 는 기능 이 비교적 복잡 하 다.
시험 문 제 는 데이터베이스 가 시험 을 발표 할 때의 조건 에 따라 무 작위 로 발생 하 는 시험 문제 다.매번 시험 문제 의 양 이 다 르 기 때문에 우 리 는 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>
조회 성적 이 비교적 간단 하기 때문에 학생 성적 을 조회 하여 페이지 에 표시 할 뿐 현재 진행 중인 시험 성적 은 비어 있 기 때문이다.총결산
위 에서 말 한 것 은 소 편 이 소개 한 자바 가 온라인 시험 시스템 과 디자인(학생 기능)을 실현 하 는 데 도움 이 되 기 를 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.