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 + -
显示快捷键?