重庆科技学院本科毕业设计 3 系统设计
开始读取考生考卷等待教师对主观题评定接受教师的评定信息保存评定信息否保存成功是计算成绩保存成绩信息否保存成功是结束 图3.12查看/修改学生试卷流程
教师提交评定的关键代码设计及说明如下: //获取学生学号
String Uid = request.getParameter(\ //获取session中的课程名称
String course = (String)session.getAttribute(\ TestUtil tu = new TestUtil();
TestSetUtil tsu = new TestSetUtil(); Record record = new Record(); RecordUtil ru = new RecordUtil(); //获取试卷设置信息
TestSet ts = tsu.getTestSet(course); float singleTotal = 0;//单选题总分 float multiplyTotal = 0;//多选题总分 float judgeTotal = 0;//判断题总分 float jdTotal = 0;//简答题总分 float programTotal=0;//编程题总分 float total=0;
for(int i=0;i Float.parseFloat(request.getParameter(\ singleTotal+=score; 23 重庆科技学院本科毕业设计 3 系统设计 } for(int i=0;i float score = Float.parseFloat(request.getParameter(\ multiplyTotal+=score; } for(int i=0;i float score = Float.parseFloat(request.getParameter(\ judgeTotal+=score; } for(int i=0;i float score = Float.parseFloat(request.getParameter(\ jdTotal+=score; int Qid = Integer.parseInt(request.getParameter(\ tu.updateTest(Uid, Qid, score);//修改试卷库中相应简答题的分数 } for(int i=0;i Float.parseFloat(request.getParameter(\ programTotal+=score; int Qid = Integer.parseInt(request.getParameter(\ tu.updateTest(Uid, Qid, score); } total = singleTotal+multiplyTotal+judgeTotal+jdTotal+programTotal; record.setUid(Uid); record.setCourse(course); record.setScore(total); record.setSingle(singleTotal); record.setMultiply(multiplyTotal); record.setJudge(judgeTotal); record.setJd(jdTotal); record.setProgram(programTotal); //System.out.print(record.getUid()+record.getCourse()); if(ru.updateRecord(record)) { response.sendRedirect(request.getContextPath() 24 重庆科技学院本科毕业设计 3 系统设计 +\}else { response.sendRedirect(request.getContextPath() +\} 3.4.5分数段统计模块设计 当教师对考卷的主观题评定后,系统能自动生成分数段统计信息供给老师查看。统计分数段包括及格率、60-69分、70-79、80-89和90分以上,在统计数量的同时并计算出占数考人数量的比例。 其统计功能的关键代码及说明如下: //获取要统计的分数段 String scoreString = request.getParameter(\ //获取要统计的课程名称 String course = (String)session.getAttribute(\ RecordUtil ru = new RecordUtil(); //得到考生总数 int count = ru.getCount(course); int pass = 0;//要统计的分数段人数 if(\如果统计的是及格率 { pass = ru.getPass(course); }else { int score = Integer.parseInt(scoreString); pass = ru.getCountByScore(course,score); } //计算比例,由于要用count作为除数,所以必须排出count为0的情况 String percent = count==0?\float)pass)/((float)count)*100+\ 3.4.6试题维护模块设计 试题维护是后台管理员的重要功能,它包括对试题的添加,修改,删除操作。在进行此操作时系统会先将考试试题读出,再提供给管理中员操作。试题维护流程图如图3.13所示。 25 重庆科技学院本科毕业设计 3 系统设计 开始读取考题信息选择操作添加考题信息修改考题信息册除考试信息等待管理员输入信息等待管理员输入信息确认删除?是获取输入信息否添加考题信息获取输入信息否修改考题信息删除考题信息否 删除成功添加成功?是重新绑定数据修改成功?是是否重新绑定数据重新绑定数据结束 图3.13考题维护流程 关键代码如下: 添加考题关键代码及说明如下: //获取课程名称,由于课程名称可能包含有汉字,所以要对其进行编码,这里我们用gbk进行编码 String kemu = request.getParameter(\ String ch_course = \ String course = new String(request.getParameter(ch_course).getBytes(\ //获取题目类型 int type = Integer.parseInt(request.getParameter(\ String ques = new String(request.getParameter(\ //选项A String keyA = null; //选项B String keyB = null; //选项C String keyC = null; //选项D String keyD = null; //参考答案 26 重庆科技学院本科毕业设计 3 系统设计 String answer = \ QuestionUtil qu = new QuestionUtil(); Question question = new Question(); if(type==1)//单选题 { keyA = new String(request.getParameter(\im(); keyB = new String(request.getParameter(\im(); keyC = new String(request.getParameter(\im(); keyD = new String(request.getParameter(\im(); answer = request.getParameter(\}else if(type==2)//多选题 { keyA = new String(request.getParameter(\im(); keyB = new String(request.getParameter(\im(); keyC = new String(request.getParameter(\im(); keyD = new String(request.getParameter(\im(); String[] str_answer = request.getParameterValues(\ for(int i = 0;i < str_answer.length;i++) { answer = answer + str_answer[i]; } }else if(type==3)//判断题 { answer = request.getParameter(\}else//简答题,设计题 { 27