Sfoglia il codice sorgente

增加及格分优秀分必填;修复客观题统计未区分AB卷;

ting.yin 6 anni fa
parent
commit
16957fd1d5

+ 3 - 3
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamQuestionDao.java

@@ -12,9 +12,9 @@ import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
 
 public interface ExamQuestionDao extends JpaRepository<ExamQuestion, Integer>, JpaSpecificationExecutor<ExamQuestion> {
 
-    @Query("select sum(q.totalScore) as totalScore from ExamQuestion q where q.examId=?1 and q.subjectCode=?2 and q.mainNumber=?3")
-    public Double queryFullScoreByExamIdAndSubjectCodeAndMainNumber(Integer examId, String subjectCode,
-            Integer mainNumber);
+    @Query("select sum(q.totalScore) as totalScore from ExamQuestion q where q.examId=?1 and q.subjectCode=?2 and q.mainNumber=?3 and q.paperType=?4 ")
+    public Double queryFullScoreByExamIdAndSubjectCodeAndMainNumberAndPaperType(Integer examId, String subjectCode,
+            Integer mainNumberz,String paperType);
 
     @Query("select q from ExamQuestion q where q.examId=?1 and  q.subjectCode=?2 and q.objective=?3 "
             + "order by q.paperType, q.mainNumber, q.subNumber")

+ 4 - 6
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/dao/ReportSubjectGroupDao.java

@@ -15,17 +15,15 @@ import java.util.List;
  * @author xuwenjin
  * @date 2019-04-18
  */
-public interface ReportSubjectGroupDao
-        extends PagingAndSortingRepository<ReportSubjectGroup, Integer>, JpaSpecificationExecutor<ReportSubjectGroup> {
+public interface ReportSubjectGroupDao extends PagingAndSortingRepository<ReportSubjectGroup, Integer>,
+        JpaSpecificationExecutor<ReportSubjectGroup> {
 
     @Modifying
     @Query("delete from ReportSubjectGroup r where r.examId=?1 ")
     void deleteByExamId(Integer exmaId);
 
-    @Query("select q.mainNumber,q.mainTitle,count(q.mainNumber) as subNumber from ExamQuestion q where q.examId=?1 and q.subjectCode=?2 and q.objective=?3 and q.paperType is not null group by q.mainNumber,q.mainTitle  "
+    @Query("select q.mainNumber,q.mainTitle,q.paperType,count(q.mainNumber) as subNumber from ExamQuestion q where q.examId=?1 and q.subjectCode=?2 and q.objective=?3 group by q.mainNumber,q.mainTitle,q.paperType  "
             + "order by q.mainNumber")
-    public List<Object[]> countGroupByMainNum(Integer examId, String subjectCode,
-                                              boolean objective);
-
+    public List<Object[]> countGroupByMainNum(Integer examId, String subjectCode, boolean objective);
 
 }

+ 16 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/model/ReportSubjectQuestion.java

@@ -92,6 +92,13 @@ public class ReportSubjectQuestion implements Serializable {
     @Column(name = "full_score_rate")
     private Double fullScoreRate;
 
+    /**
+     * 卷型
+     */
+    @ExcelField(title = "卷型", align = 2, sort = 80)
+    @Column(name = "paper_type", nullable = true, length = 32)
+    private String paperType;
+
     /**
      * 是否客观
      */
@@ -185,4 +192,13 @@ public class ReportSubjectQuestion implements Serializable {
     public void setObjective(Boolean objective) {
         this.objective = objective;
     }
+
+    public String getPaperType() {
+        return paperType;
+    }
+
+    public void setPaperType(String paperType) {
+        this.paperType = paperType;
+    }
+
 }

+ 1 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/service/ReportSubjectQuestionService.java

@@ -19,6 +19,6 @@ public interface ReportSubjectQuestionService {
 
     List<ReportSubjectQuestion> findByQuery(ReportSubjectQuery query);
 
-    void saveReportSubjectObjectiveQuestionData(Integer examId, String subjectCode, Boolean objective);
+    void saveReportSubjectQuestionData(Integer examId, String subjectCode, Boolean objective);
 
 }

+ 2 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/service/impl/ReportServiceImpl.java

@@ -116,10 +116,10 @@ public class ReportServiceImpl implements ReportService {
             reportSubjectClassService.saveReportSubjectClassData(examId, subjectCode);
 
             //保存客观题成绩分析
-            reportSubjectQuestionService.saveReportSubjectObjectiveQuestionData(examId, subjectCode, true);
+            reportSubjectQuestionService.saveReportSubjectQuestionData(examId, subjectCode, true);
 
             //保存主观题成绩分析
-            reportSubjectQuestionService.saveReportSubjectObjectiveQuestionData(examId, subjectCode, false);
+            reportSubjectQuestionService.saveReportSubjectQuestionData(examId, subjectCode, false);
 
             //保存大题型成绩分析
             reportSubjectGroupService.saveReportSubjectGroupData(examId, subjectCode);

+ 146 - 42
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/service/impl/ReportSubjectGroupServiceImpl.java

@@ -1,33 +1,37 @@
 package cn.com.qmth.stmms.biz.report.service.impl;
 
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+
 import cn.com.qmth.stmms.biz.common.BaseQueryService;
 import cn.com.qmth.stmms.biz.exam.dao.ExamQuestionDao;
 import cn.com.qmth.stmms.biz.exam.dao.ExamStudentDao;
 import cn.com.qmth.stmms.biz.exam.dao.ExamSubjectDao;
+import cn.com.qmth.stmms.biz.exam.dao.MarkGroupDao;
 import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
+import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
 import cn.com.qmth.stmms.biz.report.dao.ReportSubjectGroupDao;
 import cn.com.qmth.stmms.biz.report.model.ReportSubjectGroup;
 import cn.com.qmth.stmms.biz.report.query.ReportSubjectQuery;
 import cn.com.qmth.stmms.biz.report.service.ReportSubjectGroupService;
 import cn.com.qmth.stmms.biz.utils.DoubleUtil;
 
-import org.apache.commons.lang.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.stereotype.Service;
-
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-
 /**
  * 大题型统计分析 service 实现
  *
@@ -48,6 +52,9 @@ public class ReportSubjectGroupServiceImpl extends BaseQueryService<ReportSubjec
 
     @Autowired
     private ExamSubjectDao examSubjectDao;
+    
+    @Autowired
+    private MarkGroupDao groupDao;
 
 
     @Override
@@ -81,9 +88,9 @@ public class ReportSubjectGroupServiceImpl extends BaseQueryService<ReportSubjec
     @Override
     public void saveReportSubjectGroupData(Integer examId, String subjectCode) {
         //保存客观题统计分析
-        saveReportSubjectGroupData(examId, subjectCode, true);
+        saveReportSubjectObjectiveGroupData(examId, subjectCode);
         //保存主观题统计分析
-        saveReportSubjectGroupData(examId, subjectCode, false);
+        saveReportSubjectSubjectiveGroupData(examId, subjectCode);
     }
 
     /**
@@ -91,22 +98,139 @@ public class ReportSubjectGroupServiceImpl extends BaseQueryService<ReportSubjec
      *
      * @param examId      考试Id
      * @param subjectCode 科目Code
-     * @param objective   客观题,主观题
+     * @param subjective   主观题
      */
-    private void saveReportSubjectGroupData(Integer examId, String subjectCode, Boolean objective) {
+    private void saveReportSubjectSubjectiveGroupData(Integer examId, String subjectCode) {
+
         ExamSubject subject = examSubjectDao.findByExamIdAndCode(examId, subjectCode);
-        List<Object[]> questionGroups = reportSubjectGroupDao.countGroupByMainNum(examId, subjectCode, objective);
+        List<MarkGroup> groups = groupDao.findByExamIdAndSubjectCode(examId, subjectCode);
+        
         List<ExamStudent> examStudentList = examStudentDao.findByExamIdAndSubjectCodeAndUploadTimeNotNullAndAbsent(examId, subjectCode, false);
         Integer studentCount = examStudentList.size();
         Integer begin = 0;
+        for (int i = 0; i < groups.size(); i++) {
+            MarkGroup group = groups.get(i);
+            //满分
+            Double fullScore = group.getTotalScore();
+            Integer questionCount = examQuestionDao.findByExamIdAndSubjectCodeAndObjectiveAndMainNumber(examId, subjectCode, false, group.getNumber()).size();
+            Double[] totalScoreArray = new Double[studentCount];
+            //题型 总分
+            Double totalScore = 0d;
+            //0分人数
+            Integer zeroScoreCount = 0;
+            //满分人数
+            Integer fullScoreCount = 0;
+            //方差
+            Double variance = 0d;
+            for (int j = 0; j < studentCount; j++) {
+                ExamStudent student = examStudentList.get(j);
+                String[] answers = null;
+                    if (StringUtils.isNotBlank(student.getSubjectiveScoreList())) {
+                        answers = student.getSubjectiveScoreList().split(";");
+                    }
+                Double score = 0d;
+                for (int k = begin; k < begin + questionCount; k++) {
+                    Double s = 0d;
+                    if (answers != null) {
+                            s = Double.parseDouble(answers[k]);
+                    }
+                    score = DoubleUtil.sum(score, s);
+                }
+                if (score.doubleValue() == 0) {
+                    zeroScoreCount++;
+                }
+                if (score.doubleValue() == fullScore.doubleValue()) {
+                    fullScoreCount++;
+                }
+                totalScoreArray[j] = score;
+                totalScore = DoubleUtil.sum(totalScore, score);
+            }
+            //最大分
+            Double maxScore = Collections.max(Arrays.asList(totalScoreArray));
+            //最小分
+            Double minScore = Collections.min(Arrays.asList(totalScoreArray));
+            //平均分
+            Double avgScore = DoubleUtil.div(totalScore, studentCount, 2);
+            //计算方差
+            for (int j = 0; j < studentCount; j++) {
+                ExamStudent student = examStudentList.get(j);
+                String[] answers = null;
+                    if (StringUtils.isNotBlank(student.getSubjectiveScoreList())) {
+                        answers = student.getSubjectiveScoreList().split(";");
+                    }
+                Double score = 0d;
+                for (int k = begin; k < begin + questionCount; k++) {
+                    Double s = 0d;
+                    if (answers != null) {
+                            s = Double.parseDouble(answers[k]);
+                    }
+                    score = DoubleUtil.sum(score, s);
+                }
+                variance = DoubleUtil.sum(variance, DoubleUtil.mul(DoubleUtil.sub(score, avgScore), DoubleUtil.sub(score, avgScore)));
+            }
+            //标准差
+            Double sd = DoubleUtil.format(Math.sqrt(variance / studentCount), "0.00");
+            //差异系数
+            Double cv = 0d;
+            if (avgScore.doubleValue() > 0) {
+                cv = DoubleUtil.mul(DoubleUtil.div(sd, avgScore, 4), 100);
+            }
+            //得分率
+            Double scoreRate = 0d;
+            if(fullScore != 0){
+                scoreRate = DoubleUtil.div(avgScore,fullScore, 2);
+            }
+            ReportSubjectGroup reportSubjectGroup = new ReportSubjectGroup();
+            reportSubjectGroup.setExamId(examId);
+            reportSubjectGroup.setSubjectCode(subjectCode);
+            reportSubjectGroup.setSubjectName(subject.getName());
+            reportSubjectGroup.setGroupName(group.getTitle());
+            reportSubjectGroup.setGroupNumber(group.getNumber());
+            reportSubjectGroup.setMaxScore(maxScore);
+            reportSubjectGroup.setMinScore(minScore);
+            reportSubjectGroup.setAvgScore(avgScore);
+            reportSubjectGroup.setTotalScore(fullScore);
+            reportSubjectGroup.setSD(sd);
+            reportSubjectGroup.setCV(cv);
+            reportSubjectGroup.setScoreRate(scoreRate);
+            reportSubjectGroup.setZeroCount(zeroScoreCount);
+            reportSubjectGroup.setFullCount(fullScoreCount);
+
+            begin += questionCount;
+            reportSubjectGroupDao.save(reportSubjectGroup);
+        }
+
+    
+        
+    }
+
+    /**
+     * 保存题型统计分析
+     *
+     * @param examId      考试Id
+     * @param subjectCode 科目Code
+     * @param objective   客观题
+     */
+    private void saveReportSubjectObjectiveGroupData(Integer examId, String subjectCode) {
+        ExamSubject subject = examSubjectDao.findByExamIdAndCode(examId, subjectCode);
+        List<Object[]> questionGroups = reportSubjectGroupDao.countGroupByMainNum(examId, subjectCode, true);
+        List<ExamStudent> examStudentList = examStudentDao.findByExamIdAndSubjectCodeAndUploadTimeNotNullAndAbsent(examId, subjectCode, false);
+        Integer studentCount = examStudentList.size();
+        Integer begin = 0;
+        Map<Integer,ExamQuestion> map = new HashMap<Integer, ExamQuestion>();
         for (int i = 0; i < questionGroups.size(); i++) {
             Object[] obj = questionGroups.get(i);
             ExamQuestion question = new ExamQuestion();
             question.setMainNumber(Integer.parseInt(obj[0].toString()));
             question.setMainTitle(obj[1].toString());
-            question.setSubNumber(Integer.parseInt(obj[2].toString()));
+            question.setPaperType(obj[2].toString());
+            question.setSubNumber(Integer.parseInt(obj[3].toString()));
+            if(map.get(question.getMainNumber())!=null){
+                continue;
+            }
+            map.put(question.getMainNumber(), question);
             //满分
-            Double fullScore = examQuestionDao.queryFullScoreByExamIdAndSubjectCodeAndMainNumber(examId, subjectCode, question.getMainNumber());
+            Double fullScore = examQuestionDao.queryFullScoreByExamIdAndSubjectCodeAndMainNumberAndPaperType(examId, subjectCode, question.getMainNumber(),question.getPaperType());
             Integer questionCount = question.getSubNumber();
             Double[] totalScoreArray = new Double[studentCount];
             //题型 总分
@@ -120,24 +244,14 @@ public class ReportSubjectGroupServiceImpl extends BaseQueryService<ReportSubjec
             for (int j = 0; j < studentCount; j++) {
                 ExamStudent student = examStudentList.get(j);
                 String[] answers = null;
-                if (objective) {
                     if (StringUtils.isNotBlank(student.getObjectiveScoreList())) {
                         answers = student.getObjectiveScoreList().split(";");
                     }
-                } else {
-                    if (StringUtils.isNotBlank(student.getSubjectiveScoreList())) {
-                        answers = student.getSubjectiveScoreList().split(";");
-                    }
-                }
                 Double score = 0d;
                 for (int k = begin; k < begin + questionCount; k++) {
                     Double s = 0d;
                     if (answers != null) {
-                        if (objective) {
                             s = Double.parseDouble(answers[k].split(":")[1]);
-                        } else {
-                            s = Double.parseDouble(answers[k]);
-                        }
                     }
                     score = DoubleUtil.sum(score, s);
                 }
@@ -160,24 +274,14 @@ public class ReportSubjectGroupServiceImpl extends BaseQueryService<ReportSubjec
             for (int j = 0; j < studentCount; j++) {
                 ExamStudent student = examStudentList.get(j);
                 String[] answers = null;
-                if (objective) {
                     if (StringUtils.isNotBlank(student.getObjectiveScoreList())) {
                         answers = student.getObjectiveScoreList().split(";");
                     }
-                } else {
-                    if (StringUtils.isNotBlank(student.getSubjectiveScoreList())) {
-                        answers = student.getSubjectiveScoreList().split(";");
-                    }
-                }
                 Double score = 0d;
                 for (int k = begin; k < begin + questionCount; k++) {
                     Double s = 0d;
                     if (answers != null) {
-                        if (objective) {
                             s = Double.parseDouble(answers[k].split(":")[1]);
-                        } else {
-                            s = Double.parseDouble(answers[k]);
-                        }
                     }
                     score = DoubleUtil.sum(score, s);
                 }

+ 10 - 4
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/service/impl/ReportSubjectQuestionServiceImpl.java

@@ -14,12 +14,12 @@ import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 
 import cn.com.qmth.stmms.biz.common.BaseQueryService;
-import cn.com.qmth.stmms.biz.exam.dao.ExamQuestionDao;
 import cn.com.qmth.stmms.biz.exam.dao.ExamStudentDao;
 import cn.com.qmth.stmms.biz.exam.dao.ExamSubjectDao;
 import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
+import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
 import cn.com.qmth.stmms.biz.report.dao.ReportSubjectQuestionDao;
 import cn.com.qmth.stmms.biz.report.model.ReportSubjectQuestion;
 import cn.com.qmth.stmms.biz.report.query.ReportSubjectQuery;
@@ -42,7 +42,7 @@ public class ReportSubjectQuestionServiceImpl extends BaseQueryService<ReportSub
     private ExamStudentDao examStudentDao;
 
     @Autowired
-    private ExamQuestionDao examQuestionDao;
+    private ExamQuestionService questionService;
     
     @Autowired
     private ExamSubjectDao examSubjectDao;
@@ -79,9 +79,9 @@ public class ReportSubjectQuestionServiceImpl extends BaseQueryService<ReportSub
     }
 
     @Override
-    public void saveReportSubjectObjectiveQuestionData(Integer examId, String subjectCode, Boolean objective) {
+    public void saveReportSubjectQuestionData(Integer examId, String subjectCode, Boolean objective) {
         ExamSubject subject = examSubjectDao.findByExamIdAndCode(examId, subjectCode);
-        List<ExamQuestion> examQuestionObjectiveList = examQuestionDao.findByExamIdAndSubjectCodeAndObjective(examId, subjectCode, objective);
+        List<ExamQuestion> examQuestionObjectiveList = questionService.findByExamAndSubjectAndObjective(examId, subjectCode, objective);
 
         List<ExamStudent> examStudentList = examStudentDao.findByExamIdAndSubjectCodeAndUploadTimeNotNullAndAbsent(examId, subjectCode, false);
 
@@ -104,6 +104,9 @@ public class ReportSubjectQuestionServiceImpl extends BaseQueryService<ReportSub
 
                 for (int j = 0; j < studentCount; j++) {
                     ExamStudent student = examStudentList.get(j);
+                    if(!question.getPaperType().equalsIgnoreCase(student.getPaperType())){
+                        continue;
+                    }
                     Double score = 0d;
                     if (objective) {
                         if (StringUtils.isNotBlank(student.getObjectiveScoreList())) {
@@ -129,6 +132,9 @@ public class ReportSubjectQuestionServiceImpl extends BaseQueryService<ReportSub
                 Double avgScore = DoubleUtil.div(sumScore, examStudentList.size(), 2);
                 for (int j = 0; j < studentCount; j++) {
                     ExamStudent student = examStudentList.get(j);
+                    if(!question.getPaperType().equalsIgnoreCase(student.getPaperType())){
+                        continue;
+                    }
                     Double score = 0d;
                     if (objective) {
                         if (StringUtils.isNotBlank(student.getObjectiveScoreList())) {

+ 1 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ScoreController.java

@@ -204,7 +204,7 @@ public class ScoreController extends BaseExamController {
         if (lockService.trylock(LockType.EXAM, examId)) {
             ScoreCalculateThread thread = new ScoreCalculateThread(examId, lockService, studentService,
                     questionService, markService, checkStudentService,
-                    reportService);
+                    reportService,examService);
             taskExecutor.submit(thread);
         }
         return new ModelAndView("redirect:/admin/exam/score");

+ 9 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/admin/thread/ScoreCalculateThread.java

@@ -9,10 +9,12 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import cn.com.qmth.stmms.biz.exam.model.CheckStudent;
+import cn.com.qmth.stmms.biz.exam.model.Exam;
 import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
 import cn.com.qmth.stmms.biz.exam.service.CheckStudentService;
 import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
+import cn.com.qmth.stmms.biz.exam.service.ExamService;
 import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
 import cn.com.qmth.stmms.biz.lock.LockService;
 import cn.com.qmth.stmms.biz.mark.service.MarkService;
@@ -43,11 +45,13 @@ public class ScoreCalculateThread implements Runnable {
     private Map<String, List<ExamQuestion>> subjectiveMap;
 
     private CheckStudentService checkStudentService;
+    
+    private ExamService examService;
 
     public ScoreCalculateThread(int examId, LockService lockService, ExamStudentService studentService,
             ExamQuestionService questionService, 
             MarkService markService, CheckStudentService checkStudentService,
-            ReportService reportService) {
+            ReportService reportService,ExamService examService) {
         this.examId = examId;
         this.lockService = lockService;
         this.studentService = studentService;
@@ -55,6 +59,7 @@ public class ScoreCalculateThread implements Runnable {
         this.markService = markService;
         this.checkStudentService = checkStudentService;
         this.reportService = reportService;
+        this.examService = examService;
         this.objectiveMap = new HashMap<String, List<ExamQuestion>>();
         this.subjectiveMap = new HashMap<String, List<ExamQuestion>>();
     }
@@ -88,6 +93,9 @@ public class ScoreCalculateThread implements Runnable {
             
             // 生成报表数据
             reportService.generateReportData(examId);
+            Exam exam = examService.findById(examId);
+            exam.setNeedCalculate(true);//每次导入都需要重新统分
+            examService.save(exam);
         } catch (Exception e) {
             log.error("calculate exception for examId=" + examId, e);
         } finally {

+ 2 - 2
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/examEdit.jsp

@@ -57,13 +57,13 @@
 		<div class="control-group">
 			<label class="control-label">及格分</label>
 			<div class="controls">
-				<input name="passScore" type="number" value="${exam.passScore }"/>
+				<input name="passScore" type="number" value="${exam.passScore }"class="required"/>
 			</div>
 		</div>
 		<div class="control-group">
 			<label class="control-label">优秀分</label>
 			<div class="controls">
-				<input name="excellentScore" type="number" value="${exam.excellentScore }"/>
+				<input name="excellentScore" type="number" value="${exam.excellentScore }" class="required"/>
 			</div>
 		</div>
 		<c:if test="${exam.id!=null }">

+ 2 - 2
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/examForm.jsp

@@ -56,13 +56,13 @@
 		<div class="control-group">
 			<label class="control-label">及格分</label>
 			<div class="controls">
-				<input name="passScore" type="number" value="${exam.passScore }"/>
+				<input name="passScore" type="number" value="60" class="required"/>
 			</div>
 		</div>
 		<div class="control-group">
 			<label class="control-label">优秀分</label>
 			<div class="controls">
-				<input name="excellentScore" type="number" value="${exam.excellentScore }"/>
+				<input name="excellentScore" type="number" value="85" class="required"/>
 			</div>
 		</div>
 		<c:if test="${exam.id!=null }">