📄 questionqueryevent.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 + -