⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 questionqueryevent.java

📁 一个在线学习系统的服务端SERVLET程序
💻 JAVA
字号:
package eols.event.test;

/**
 * <p>Title: Test questions query event </p>
 * <p>Description: It is used to search questions by the specified conditions </p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Company: </p>
 * @author Fasheng Qiu
 * @version 1.0
 */
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

import eols.bean.system.*;
import eols.bean.test.*;
import eols.tools.*;
import eols.algorithm.*;
import eols.event.system.*;
import eols.logic.test.*;

public class QuestionQueryEvent
    extends QuestionEventHandlerBase {
    /**
     * 事件的处理逻辑
     */
    public void process(ServletContext sc, HttpServletRequest request,
                        HttpServletResponse response, HashMap bean) {

        // The result object
        Result result = new Result();
        // Obtain parameters
        int source = Integer.parseInt(request.getParameter("source")); //-1为ALL
        int knowID = Integer.parseInt(request.getParameter("knowledgePoint")); //-1为ALL
        //-1:Any;1:容易;2:中等;3:较难
        int hardID = Integer.parseInt(request.getParameter("hard"));
        //testorder:1随机顺序;2从难到易;3从易到难
        int testorder = Integer.parseInt(request.getParameter("testorder"));
        //number of questions tested
        int testnumber = Integer.parseInt(request.getParameter("testnumber"));
        //难易度设置:A,B,C,D,E <--> 5(Most difficult),4, 3, 2, 1(Easiest)
        //容易:E:30%,D:30%,C:30%;B:10%
        //中等:D:20%,C:30%,B:30%,A:10%,E:10%;
        //较难:C:20%,B:20%,A:50%,D:10%
        int numA = 0, numB = 0, numC = 0, numD = 0, numE = 0, numElse = 0; //各难度试题的个数
        switch (hardID) {
            case -1:
                numElse = testnumber;
                break;
            case 1:

                numA = 0;
                numB = (int) Math.floor(testnumber * 0.1);
                numC = (int) Math.floor(testnumber * 0.3);
                numD = (int) Math.floor(testnumber * 0.3);
                numE = (int) Math.floor(testnumber * 0.3);
                numElse = testnumber - numA - numB - numC - numD - numE;
                break;

            case 2:
                numA = (int) Math.floor(testnumber * 0.1);
                numB = (int) Math.floor(testnumber * 0.3);
                numC = (int) Math.floor(testnumber * 0.3);
                numD = (int) Math.floor(testnumber * 0.2);
                numE = (int) Math.floor(testnumber * 0.1);
                numElse = testnumber - numA - numB - numC - numD - numE;
                break;
            case 3:
                numA = (int) Math.floor(testnumber * 0.4);
                numB = (int) Math.floor(testnumber * 0.2);
                numC = (int) Math.floor(testnumber * 0.2);
                numD = (int) Math.floor(testnumber * 0.1);
                numE = (int) Math.floor(testnumber * 0.1);
                numElse = testnumber - numA - numB - numC - numD - numE;
                break;
        }
        MessageUtils.debugNormal("source=" + source +
                                 "knowID=" + knowID +
                                 "hardID=" + hardID +
                                 "testorder=" + testorder +
                                 "numA=" + numA +
                                 "numB=" + numB +
                                 "numC=" + numC +
                                 "numD=" + numD +
                                 "numE=" + numE +
                                 "numElse=" + numElse
                                 );
        // The result questions
        List results = new ArrayList();
        if (source != -1) { // FROM History Errors
            if (knowID != -1) { // FROM one knowledge points
            }
            else { // FROM ALL knowledge points
            }
        }
        else { // FROM ALL questions
            // Get the questions list
            List questionsTemp = super.iTran.getStorageManager().getRecords(null);
            if (questionsTemp.isEmpty() || questionsTemp.size() == 1) {
                SessionUtils.setSessionAttribute(request, "questions", results);
                return;
            }
            // Get the questions
            Map questions = (Map) questionsTemp.get(questionsTemp.size() - 1);
            results.addAll(questions.values());
            if (knowID != -1) { // FROM one knowledge points, remove other knowledge points
                for (int i = 0; i < results.size(); i++) {
                    Question q = (Question) results.get(i);
                    if (q.getKpID() != knowID) {
                        results.set(i, null);
                    }
                }
            }
        }
        //construct a comparator
        QuestionComparator qc = new QuestionComparator();
        //testorder:2随机顺序;2从难到易;3从易到难
        String sqlorder = null;
        switch (testorder) {
            case 1:
                break;
            case 2:
                Object[] questions = new Object[results.size()];
                questions = results.toArray();
                Arrays.sort(questions, qc);
                results.clear();
                results = Arrays.asList(questions);
                break;
            case 3:
                Object[] questions2 = new Object[results.size()];
                questions2 = results.toArray();
                qc.setAsc(true);
                Arrays.sort(questions2, qc);
                results.clear();
                results = Arrays.asList(questions2);
                break;
            default:
                break;
        }
        //难易度
        int actualNumA = 0;
        int actualNumB = 0;
        int actualNumC = 0;
        int actualNumD = 0;
        int actualNumE = 0;
        int actualNumElse = 0;
        int moreNumA = 0, moreNumB = 0, moreNumC = 0, moreNumD = 0, moreNumE = 0;
        int moreNumElse = 0;
        // 5
        if (numA > 0) {
            int numAA = numA;
            for (int i = 0; i < results.size(); i++) {
                Question q = (Question)results.get(i);
                if (q != null && q.getHardNo() == 5) {
                    actualNumA++;
                    if (numAA <= 0) { // Enough
                        results.set(i, null);
                    }
                    numAA--;
                }
            }
            moreNumA = actualNumA < numA ? numA - actualNumA : 0;
        }

        // 4
        if (numB > 0) {
            int numBB = numB;
            for (int i = 0; i < results.size(); i++) {
                Question q = (Question)results.get(i);
                if (q != null && q.getHardNo() == 4) {
                    actualNumB++;
                    if (numBB <= 0) { // Enough
                        results.set(i, null);
                    }
                    numBB--;
                }
            }
            moreNumB = actualNumB < numB ? numB - actualNumB : 0;
        }

        // 3
        if (numC > 0) {
            int numCC = numC;
            for (int i = 0; i < results.size(); i++) {
                Question q = (Question)results.get(i);
                if (q != null && q.getHardNo() == 3) {
                    actualNumC++;
                    if (numCC <= 0) { // Enough
                        results.set(i, null);
                    }
                    numCC--;
                }
            }
            moreNumC = actualNumC < numC ? numC - actualNumC : 0;
        }

        // 2
        if (numD > 0) {
            int numDD = numD;
            for (int i = 0; i < results.size(); i++) {
                Question q = (Question)results.get(i);
                if (q != null && q.getHardNo() == 2) {
                    actualNumD++;
                    if (numDD <= 0) { // Enough
                        results.set(i, null);
                    }
                    numDD--;
                }
            }
            moreNumD = actualNumD < numD ? numD - actualNumD : 0;
        }

        // 1
        if (numE > 0) {
            int numEE = numE;
            for (int i = 0; i < results.size(); i++) {
                Question q = (Question)results.get(i);
                if (q != null && q.getHardNo() == 1) {
                    actualNumE++;
                    if (numEE <= 0) { // Enough
                        results.set(i, null);
                    }
                    numEE--;
                }
            }
            moreNumE = actualNumE < numE ? numE - actualNumE : 0;
        }

        // -1, else
        if (numElse > 0) {
            int numElseElse = numElse;
            for (int i = 0; i < results.size(); i++) {
                Question q = (Question)results.get(i);
                if (q != null) {
                    actualNumElse++;
                    if (numElseElse <= 0) { // Enough
                        results.set(i, null);
                    }
                    numElseElse--;
                }
            }
            moreNumElse = actualNumElse < numElse ? numElse - actualNumElse : 0;
        }
        // Still need more questions? query the history errors

        // Filter the questionIDS to meet the specified needs. For example, filter out the questions which the student often gets the right answer.

        // Save questions for use
        List copy = new ArrayList(results.size());
        for (int i = 0; i < results.size(); i++) {
            if (results.get(i) == null) continue;
            copy.add(results.get(i));
        }
        SessionUtils.setSessionAttribute(request, "questions", copy);

    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -