onlineexamaction.java

来自「培训考试系统代码」· Java 代码 · 共 1,182 行 · 第 1/3 页

JAVA
1,182
字号
           sqle.printStackTrace();
           req.setAttribute("errorId",ErrorCode.DATABASE_ERROR);
           return (mapping.findForward("error"));
       }
       catch(Exception e)
       {//捕获未知异常,定向到出错页面
           //输出异常信息
           e.printStackTrace();
           req.setAttribute("errorId",ErrorCode.UNKNOW_ERROR);
           return (mapping.findForward("error"));
       }
       finally
       {//关闭连接实例
           if(aplcoms != null)
           {
              aplcoms.close();
           }
       }
    }

    ///:huangyuyuan add 2004-06-09
    /**
     * 根据试卷的ID号获取的试卷信息
     */
    private ActionForward getRankTestPaper(ActionMapping mapping,
           ActionForm form, HttpServletRequest req,
           HttpServletResponse res)
    {
        getTestPaper(mapping,form,req,res);

        return (mapping.findForward("onranktestdo"));
    }

    /**
     * 处理自测试题
     */
    private ActionForward dealRankTestPaper(ActionMapping mapping,
           ActionForm form, HttpServletRequest req,
           HttpServletResponse res)
    {
       ArrayList alTestId = (ArrayList)req.getSession().getAttribute("alTestId");
       ArrayList alTestType = (ArrayList)req.getSession().getAttribute("alTestType");
       ArrayList alScore = (ArrayList)req.getSession().getAttribute("alScore");
       ArrayList alReply = (ArrayList)req.getSession().getAttribute("alReply");
       ArrayList alResult = (ArrayList)req.getSession().getAttribute("alResult");

       //获取最后一个页面的数据
       String[] replays = req.getParameterValues("reply");

       for(int i = 0; i < replays.length; i++)
       {
           alReply.add(replays[i]);
       }

       /*
       String[] testIdsArr = (String[])alTestId.toArray();
       String[] replyArr = (String[])alReply.toArray();
       String[] resultArr = (String[])alResult.toArray();
        */
       String[] testIdsArr = new String[alTestId.size()];
       String[] replyArr = new String[alReply.size()];
       String[] resultArr = new String[alResult.size()];
       int[] testTypeArr = new int[alTestType.size()];
       int[] scoreArr = new int[alScore.size()];

       for(int i = 0 ; i < alTestId.size(); i++)
       {
         testIdsArr[i] = (String)alTestId.get(i);
       }
       for(int i = 0 ; i < alReply.size(); i++)
       {
         replyArr[i] = (String)alReply.get(i);
       }
       for(int i = 0 ; i < alResult.size(); i++)
       {
         resultArr[i] = (String)alResult.get(i);
       }
       for(int i = 0 ; i < alTestType.size(); i++)
       {
         testTypeArr[i] = Integer.parseInt((String)alTestType.get(i));
       }
       for(int i = 0 ; i < alScore.size(); i++)
       {
         scoreArr[i] = Integer.parseInt((String)alScore.get(i));
       }





       //定义连接的实例
       SysDbConn aplcoms = null;
       try
       {
           //得到一个连接的实例

           int allScore = 0;  //得到的分数
           int totalScore = 0; //总分

           //循环处理所答的题
           for(int i=0;i<testIdsArr.length;i++)
           {

               //设置参数:记录ID号、第i+1道所答试题的信息
               int theScore = 0;
               if(testTypeArr[i]==1 || testTypeArr[i]==2 || testTypeArr[i]==3)
               {//判断题,单选题,多选题;计算分数
                  if(replyArr[i].equalsIgnoreCase(resultArr[i]))
                  {//正确
                      theScore = scoreArr[i];
                  }
               }

               allScore += theScore;

               totalScore += scoreArr[i];  //累加试卷的总分
           }

           //把该自测题总分保存以便统计
           String staffNo = (String)req.getSession().getAttribute("workerNo");
           String lessonId = req.getParameter("lessonId");
           String paperId = ((OnlineExamForm)form).getPaperId();

           //得到一个连接的实例
           aplcoms = SysConnPool.getInstance().getAplComs();

           aplcoms.preparedSP();
           aplcoms.setString(1, lessonId);
           aplcoms.setString(2, staffNo);
           aplcoms.setString(3,paperId);
           aplcoms.setInt(4,allScore);

           SysDataSet ds3 = aplcoms.csCommonSP("P_Agt_OnTestAddRecord");
           SysRecord rc3 = ds3.getParamSet() ;
           if(rc3==null || rc3.getInt(0) == OperatorFlagCode.OPERATOR_EORROR)
           {//定向到出错页面,错误号为:ONEXAM_RECORDADD_ERROR
                req.setAttribute("errorId",ErrorCode.ONEXAM_RECORDADD_ERROR);
                return (mapping.findForward("error"));
           }


           //定向到考试结果显示页面
           //把考试的答卷为主观题还是客观题信息传送到页面,时长

           //把考试的总分传送到页面
           req.setAttribute("replyArr",replyArr);
           req.setAttribute("allScore",String.valueOf(allScore));
           req.setAttribute("totalScore",String.valueOf(totalScore));
           return (mapping.findForward("ontestresult"));
       }
       catch (SysDbException aple)
       {//捕获CommonService系统异常,定向到出错页面
           //输出异常信息
           aple.printStackTrace();
           req.setAttribute("errorId",ErrorCode.COMMONSERVICE_ERROR);
           return (mapping.findForward("error"));
       }
       catch(java.sql.SQLException sqle)
       {//捕获调用aplcoms异常,定向到出错页面
           // 输出异常信息
           sqle.printStackTrace();
           req.setAttribute("errorId",ErrorCode.DATABASE_ERROR);
           return (mapping.findForward("error"));
       }
       catch(Exception e)
       {//捕获未知异常,定向到出错页面
           //输出异常信息
           e.printStackTrace();
           req.setAttribute("errorId",ErrorCode.UNKNOW_ERROR);
           return (mapping.findForward("error"));
       }
       finally
       {//关闭连接实例
           if(aplcoms != null)
           {
              aplcoms.close();
           }
       }
    }

    /**
     * 处理考试的答卷
     */
    private ActionForward dealRankExamPaper(ActionMapping mapping,
           ActionForm form, HttpServletRequest req,
           HttpServletResponse res)
    {
       ArrayList alTestId = (ArrayList)req.getSession().getAttribute("alTestId");
       ArrayList alTestType = (ArrayList)req.getSession().getAttribute("alTestType");
       ArrayList alScore = (ArrayList)req.getSession().getAttribute("alScore");
       ArrayList alReply = (ArrayList)req.getSession().getAttribute("alReply");
       ArrayList alResult = (ArrayList)req.getSession().getAttribute("alResult");

       //获取最后一个页面的数据
       String[] replays = req.getParameterValues("reply");

       for(int i = 0; i < replays.length; i++)
       {
           alReply.add(replays[i]);
       }

       //把下面几个变量的长度都定为alTestId.size(),因为这个为最大的长度,而且计算分数都是按照这个长度来计算的
       String[] testIdsArr = new String[alTestId.size()];
       String[] replyArr = new String[alTestId.size()];
       String[] resultArr = new String[alTestId.size()];
       int[] testTypeArr = new int[alTestId.size()];
       int[] scoreArr = new int[alTestId.size()];

       for(int i = 0 ; i < alTestId.size(); i++)
       {
         testIdsArr[i] = (String)alTestId.get(i);
       }
       for(int i = 0 ; i < alReply.size(); i++)
       {
         replyArr[i] = (String)alReply.get(i);
       }
       for(int i = 0 ; i < alResult.size(); i++)
       {
         resultArr[i] = (String)alResult.get(i);
       }
       for(int i = 0 ; i < alTestType.size(); i++)
       {
         testTypeArr[i] = Integer.parseInt((String)alTestType.get(i));
       }
       for(int i = 0 ; i < alScore.size(); i++)
       {
         scoreArr[i] = Integer.parseInt((String)alScore.get(i));
       }

       //判断是否已经做完全部试题,如果没有的话,把没有的答复赋值为空
       if(alTestId.size() > alReply.size())
       {
           for(int i=alReply.size(); i<alTestId.size(); i++)
           {
               replyArr[i] = " ";
           }
       }

      String timeLongStr = req.getParameter("timeLong");
      String examId = (String)req.getSession().getAttribute("examId");

      //考试的时间格式为mm:ss,只取mm
      int timeLong = Integer.parseInt(timeLongStr.substring(0,timeLongStr.indexOf(":")));


      //从Session中获取工号
      String staffNo = (String)req.getSession().getAttribute("workerNo");

      //定义连接的实例
      SysDbConn aplcoms = null;
      try
      {
          //得到一个连接的实例
          aplcoms = SysConnPool.getInstance().getAplComs();

          String recordId = (String)req.getSession().getAttribute("recordId");

          //答卷试题类型的标志,0:客观题,1:主观题
          int paperFlag = Integer.parseInt((String)req.getSession().getAttribute("paperFlag"));

          boolean dealFail = false;
          int allScore = 0;  //得到的分数
          int totalScore = 0; //总分

          //循环调用存储过程P_Agt_OnExamDealReply处理所答的题
          for(int i=0;i<testIdsArr.length;i++)
          {
              aplcoms.preparedSP();
              //设置参数:记录ID号、第i+1道所答试题的信息
              aplcoms.setString(1, recordId);
              aplcoms.setString(2, testIdsArr[i]);
              aplcoms.setString(3, replyArr[i]);
              int theScore = 0;
              if(testTypeArr[i]==1 || testTypeArr[i]==2)
              {//判断题,单选题,计算分数
                 if(replyArr[i].equalsIgnoreCase(resultArr[i]))
                 {//正确
                     theScore = scoreArr[i];
                 }
              }
              if(testTypeArr[i]==3)
              {//多选题;计算分数
                 if(replyArr[i] != null )
                 {
                     if(replyArr[i].length() == resultArr[i].length())
                     {
                        int rightCount = 0;
                        for(int t=0;t<replyArr[i].length();t++)
                        {
                           if(resultArr[i].indexOf(replyArr[i].substring(t,t+1)) != -1)
                           {
                               rightCount++;
                           }
                        }
                        if(rightCount == replyArr[i].length())
                        {//正确
                           theScore = scoreArr[i];
                        }

                     }
                 }
              }

              aplcoms.setInt(4,theScore);

              SysDataSet ds2 = aplcoms.csCommonSP("P_Agt_OnExamDealReply");
              SysRecord rc2 = ds2.getParamSet() ;
              if(paperFlag == 0)
              {//都为客观题
                   allScore += theScore;
              }
              totalScore += scoreArr[i];  //累加试卷的总分
              if(rc2==null || rc2.getInt(0) == OperatorFlagCode.OPERATOR_EORROR)
              {
                  dealFail = true;
                  break;
              }
          }
          if(dealFail == true)
          {
              //调用存储过程P_Agt_OnExamDeleteRecord删除该考试记录;
              //定向到出错页面,错误号为:ONEXAM_RECORDADD_ERROR
              req.setAttribute("errorId",ErrorCode.ONEXAM_RECORDADD_ERROR);
              return (mapping.findForward("error"));
          }
          if(paperFlag == 0)
          {//都为客观题
              SimpleDateFormat sFormat = new SimpleDateFormat("yyyyMMdd");
              //调用存储过程P_Agt_OnExamAddTrain增加培训记录;
              aplcoms.preparedSP();
              aplcoms.setString(1, staffNo);
              aplcoms.setString(2, examId);
              aplcoms.setInt(3,allScore);
              aplcoms.setInt(4,totalScore);
              aplcoms.setString(5,sFormat.format(new Date()));
              aplcoms.setString(6,recordId);

              SysDataSet ds3 = aplcoms.csCommonSP("P_Agt_OnExamAddTrain");
              SysRecord rc3 = ds3.getParamSet() ;
              if(rc3==null || rc3.getInt(0) == OperatorFlagCode.OPERATOR_EORROR)
              {//定向到出错页面,错误号为:ONEXAM_TRAINADD_ERROR
                  req.setAttribute("errorId",ErrorCode.ONEXAM_TRAINADD_ERROR);
                  return (mapping.findForward("error"));
              }

          }
          else
          {//为主观题
              aplcoms.preparedQuery("");
              aplcoms.setString(1 ,recordId);

              aplcoms.csCommonQuery("SQL_Agt_OnExamUpdateStatus" ,"1" ,"-1");

          }
          //定向到考试结果显示页面
          //把考试的答卷为主观题还是客观题信息传送到页面,时长

          //把考试的总分传送到页面
          req.setAttribute("allScore",String.valueOf(allScore));
          req.setAttribute("paperType",String.valueOf(paperFlag));
          req.setAttribute("timeLong",String.valueOf(timeLong));
          return (mapping.findForward("onexamresult"));
      }
      catch (SysDbException aple)
      {//捕获CommonService系统异常,定向到出错页面
          //输出异常信息
          aple.printStackTrace();
          req.setAttribute("errorId",ErrorCode.COMMONSERVICE_ERROR);
          return (mapping.findForward("error"));
      }
      catch(java.sql.SQLException sqle)
      {//捕获调用aplcoms异常,定向到出错页面
          // 输出异常信息
          sqle.printStackTrace();
          req.setAttribute("errorId",ErrorCode.DATABASE_ERROR);
          return (mapping.findForward("error"));
      }
      catch(Exception e)
      {//捕获未知异常,定向到出错页面
          //输出异常信息
          e.printStackTrace();
          req.setAttribute("errorId",ErrorCode.UNKNOW_ERROR);
          return (mapping.findForward("error"));
      }
      finally
      {//关闭连接实例
          if(aplcoms != null)
          {
             aplcoms.close();
          }
      }
    }
    ///:~
}

⌨️ 快捷键说明

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