在線考試系統之生成試卷(每次生成的試卷考題無序)

一、生成試卷

public void saveByCourseId(String courseId, Long examId) {
   //取出各個題型的數量
   QuestionRule questionRule = questionRuleDao.findCurrentQuestionRule();
   Integer singlCount = questionRule.getSinglCount();//單選題數量
   Integer moreCount = questionRule.getMoreCount();//多選題數量
   Integer judgeCount = questionRule.getJudgeCount();//判斷題數量
   
   //取出數據
   //List<Question> singlList = questionService.findByCourseId(courseId,Question.Type.singl.ordinal());
   //List<Question> moreList = questionService.findByCourseId(courseId,Question.Type.more.ordinal());
   //List<Question> judgeList = questionService.findByCourseId(courseId,Question.Type.judge.ordinal());
   
   //單選題
   List<Question> singlList = questionDao.findByCourseId(courseId,Question.Type.singl.ordinal());
   //list轉換成無序的set集合
   Set<Question> singlResult = new HashSet<Question>();
   for (Question question : singlList) {
      singlResult.add(question);
   }
   Set<Question> singlSet = new HashSet<Question>();//用來存儲抽到的單選題
    int singlFlag = 0; //單選題存儲個數標記
   for (Question question : singlResult) {
      //判斷是否是單選題
      if (question.getType() == Question.Type.singl.ordinal()) {
         for (int i = 0; i < singlCount; i++) {
            if (singlFlag >= singlCount) {
               break;
            }
            singlFlag ++;
            //如果考題已存在,繼續遍歷
            if (singlSet.contains(question)) {
               singlFlag --;
            }
            singlSet.add(question);
         }
      }
   }
   insertEntity(singlSet,examId);
   //多選題
   List<Question> moreList = questionDao.findByCourseId(courseId,Question.Type.more.ordinal());
   //list轉換成set集合
   Set<Question> moreResult = new HashSet<Question>();
   for (Question question : moreList) {
      moreResult.add(question);
   }
   //用來存儲抽到的多選題
   Set<Question> moreSet = new HashSet<Question>();
   int moreFlag = 0; //多選題存儲個數標記
   for (Question question : moreResult) {
      //判斷是否是多選題
      if (question.getType() == Question.Type.more.ordinal()) {
         for (int i = 0; i < moreCount; i++) {
            if (moreFlag >= moreCount) {
               break;
            }
            moreFlag ++;
            //如果考題已存在,繼續遍歷
            if (moreSet.contains(question)) {
               moreFlag --;
            }
            moreSet.add(question);
         }
      }
   }
   insertEntity(moreSet,examId);
   //判斷題
   List<Question> judgeList = questionDao.findByCourseId(courseId,Question.Type.judge.ordinal());
   //list轉換成set
   Set<Question> judgeResult = new HashSet<Question>();
   for (Question question : judgeList) {
      judgeResult.add(question);
   }
   //用來存儲抽到的判斷題
   Set<Question> judgeSet = new HashSet<Question>();
    int judgeFlag = 0; //判斷題存儲個數標記
   for (Question question : judgeResult) {
      //判斷是否是判斷題
      if (question.getType() == Question.Type.judge.ordinal()) {
         for (int i = 0; i < judgeCount; i++) {
            if (judgeFlag >= judgeCount) {
               break;
            }
            judgeFlag ++;
            //如果考題已存在,繼續遍歷
            if (judgeSet.contains(question)) {
               judgeFlag --;
            }
            judgeSet.add(question);
         }
      }
   }
   insertEntity(judgeSet,examId);
   
}

二、執行保存操作

三、試卷數據庫設計

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章