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

📄 examaction.java

📁 基于struts框架编写的在线考试系统
💻 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 + -