📄 examaction.java
字号:
package examonline.struts.actions;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
import examonline.struts.forms.ExamForm;
import org.apache.struts.action.Action;
import examonline.service.ManagerFactory;
import examonline.service.QuestionDAO;
import examonline.beans.Question;
import java.util.Arrays;
import examonline.beans.*;
import javax.servlet.http.*;
import examonline.utils.*;
import java.util.Date;
import examonline.service.ExamRecordDAO;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionError;
public class ExamAction extends Action
{
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm,
HttpServletRequest servletRequest,
HttpServletResponse servletResponse)
{
ActionErrors errors =new ActionErrors();
setNowTime(servletRequest);//控制时间
HttpSession session = servletRequest.getSession();
User user = (User) session.getAttribute(Constants.LOGIN_USER_KEY);
if (user == null) //用户没有登陆
{
errors = new ActionErrors();
errors.add(ActionErrors.GLOBAL_ERROR,
new ActionError("error.user.notlogin"));
saveErrors(servletRequest, errors);
return actionMapping.findForward(Constants.FORWORD_USER_LOGIN);
}
String time = servletRequest.getParameter("time"); //判断是否是刚开始考试标志
String finish = servletRequest.getParameter("finish"); //判断是否是完成按钮的提交
ExamForm examForm = null;
Question question = null;
ExamRecord examRecord = (ExamRecord) session.
getAttribute("examRecord");
//处理开始考试阶段、从数据库选题
if ("start".equalsIgnoreCase(time))
{
question = selectQuestion(2); //选择难度为2的随机一道题
if(question==null)//如果题库为空返回错误信息
{
errors.add(ActionErrors.GLOBAL_ERROR,new ActionError("error.question.nothave"));
saveErrors(servletRequest, errors);
return actionMapping.getInputForward();
}
examForm = new ExamForm();
examForm.setQuestion(question);
examRecord = new ExamRecord();
examRecord.setTotalNumber(1);
String studentid = user.getId();
examRecord.setStudentId(studentid);
examRecord.setExamTime(Constants.formatDate(new Date()));
session.setAttribute("examRecord", examRecord); //统计答题情况BEAN放入SESSION中
session.setAttribute("examForm", examForm);
return actionMapping.findForward("start");
}
//处理出题统计考试情况
else
{
examForm = (ExamForm) actionForm;
question = examForm.getQuestion();
String[] sans = examForm.getStudentAnswer(); //学生答案
String[] standardAns = question.getStandardAnswer().split(","); //标准答案
if (Constants.compareArray(sans, standardAns)) //答案正确
{
examRecord.setRightNumber(examRecord.getRightNumber() + 1);
examRecord.setContinueRightNumber(examRecord.getContinueRightNumber() +
1);
examRecord.setContinueErrorNumber(0);
}
else
{
examRecord.setContinueRightNumber(0);
examRecord.setContinueErrorNumber(examRecord.getContinueErrorNumber() +
1);
}
//处理考试结束部分,提交完成后执行的功能
if (finish != null)
{
ExamRecordDAO erm = ManagerFactory.getExamRecordManager();
erm.saveExamRecord(examRecord);
return actionMapping.findForward("over");
}
//准备下一试题
examRecord.setTotalNumber(examRecord.getTotalNumber() + 1);
int level = question.getLevel();
if (examRecord.getContinueErrorNumber() >= 3 && level > 1)//连续错三道题难度下降
{
level--;
}
if (examRecord.getContinueRightNumber() >= 3 && level < 3)//连续正确三道难度上升
{
level++;
}
question = selectQuestion(level);//重新选题
examForm.setQuestion(question);
}
return actionMapping.findForward("start");
}
private Question selectQuestion(int level)
{
QuestionDAO qm = ManagerFactory.getQuestionManager();
Question question = qm.findQuestionByLevelRandom(level);
return question;
}
private void setNowTime(HttpServletRequest request)
{
String h, m, s;
String nowtimes;
if (request.getParameter("nowtime") == null)
{
h = "2";
m = "0";
s = "0";
}
else
{
nowtimes = (String) (request.getParameter("nowtime"));
String[] hms=nowtimes.split(":");
h=String.valueOf(Integer.parseInt(hms[0]));
m=String.valueOf(Integer.parseInt(hms[1]));
s=String.valueOf(Integer.parseInt(hms[2]));
}
request.setAttribute("hour",h);
request.setAttribute("minuter",m);
request.setAttribute("second",s);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -