zoukankan      html  css  js  c++  java
  • JAVA课程设计

    JAVA课程设计

    一、团队介绍

    二、项目git地址

     https://gitee.com/ZhangRongBo/online_examination_system

    三、项目git提交记录截图

     

    四、项目结构功能图与主要功能结构图

     项目结构功能图:

    主要功能结构图:

    五、项目运行截图

    1.学生登录界面

     

    2.学生注册

    3.考试界面

    4.成绩查询

    5.修改资料

    6.管理员登录界面

    7.后台管理部分界面

    六、项目关键代码

     

    public Lesson() {
            this.lessonDAO = new LessonDAO();
        }
        public ActionForward execute(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response) {
            String action = request.getParameter("action");
            System.out.println("获取的查询字符串:" + action);
            if (action == null || "".equals(action)) {
                return mapping.findForward("error");
            } else if ("lessonQuery".equals(action)) {
                return lessonQuery(mapping, form, request, response);
    
            } else if ("lessonAdd".equals(action)) {
                return lessonAdd(mapping, form, request, response);
            } else if ("lessonDel".equals(action)) {
                return lessonDel(mapping, form, request, response);
            }else if("selectLesson".equals(action)){
                return selectLesson(mapping, form, request, response);
            }else if("ready".equals(action)){
                return ready(mapping, form, request, response);
            }
            request.setAttribute("error", "操作失败!");
            return mapping.findForward("error");
        }
    private ActionForward submitTestPaper(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response){
            QuestionsForm q=(QuestionsForm)form;
            String rightAnswer="";
            float singleMark=0;
            float moreMark=0;
            String[] single=q.getAnswerArrS();
            int[] singleId=q.getIdArrS();
            //System.out.println(q.getID());
            System.out.println("数据的长度:"+single.length);
            float markS=40/(single.length);
            for(int i=0;i<single.length;i++){
                //调用getRightAnswer()方法获取正确答案
                rightAnswer=startExamDAO.getRightAnswer(singleId[i]);
                System.out.println("单选数组:"+i+"********ID号"+singleId[i]+"********"+single[i]+"****正确答案"+rightAnswer);
                if(rightAnswer.equals(single[i])){
                    singleMark=singleMark+markS;    //累加单选题的分数
                }            
            }
            System.out.println("单选题得分:"+singleMark);
            MoreSelect[] more=q.getMoreSelect();
            System.out.println("多选数组的长度:"+more.length);
            float markM=60/(more.length);
            String str="";
            for(int i=0;i<more.length;i++){
                String[] ans=more[i].getAnswerArr();
                int[] moreId=q.getIdArrM();
                rightAnswer=startExamDAO.getRightAnswer(moreId[i]);
                System.out.println("多选数组:"+i+"********ID号"+moreId[i]+"********"+more[i]+"****正确答案"+rightAnswer);
                for(int j=0;j<ans.length;j++){
                    if(ans[j]!=null) str=str+ans[j]+",";
                }
                if(str.length()>1){
                    str=str.substring(0,str.length()-1);
                }
                
                System.out.println("获取的多选题答案:"+str);
                if(rightAnswer.equals(str)){
                    moreMark=moreMark+markM;    //累加多选题的分数
                }    
                str="";
            }
            System.out.println("多选题得分:"+moreMark);
            HttpSession session = request.getSession();
            String student=session.getAttribute("student").toString();
            int lessonID=Integer.parseInt(session.getAttribute("lessonID").toString());    //课程ID
            int ret=startExamDAO.saveResult(student,lessonID,(int)Math.round(singleMark),(int)Math.round(moreMark));
            if(ret>0){
                request.setAttribute("submitTestPaperok", "试卷已提交,您本次考试的成绩为:"+(Math.round(singleMark)+Math.round(moreMark))+"分!");
                return mapping.findForward("submitTestPaperok");
            }else{
                return mapping.findForward("dealNull");
            }
        }
    
    }
    //找回密码(第一步)
        private ActionForward seekPwd1(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response){
            StudentForm studentForm = (StudentForm) form;
            StudentForm s=studentDAO.seekPwd1(studentForm);
            request.setAttribute("seekPwd2", s);
            if(s.getID().equals("")){
                request.setAttribute("error", "您输入的准考证号不存在!");
                return mapping.findForward("error");
            }else{
                return mapping.findForward("seekPwd1");    
            }
        }
    //    找回密码(第二步)
        private ActionForward seekPwd2(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response){
            StudentForm studentForm = (StudentForm) form;
            StudentForm s=studentDAO.seekPwd2(studentForm);
            request.setAttribute("seekPwd3", s);
            if(s.getID().equals("")){
                request.setAttribute("error", "您输入的密码提示问题的答案不正确!");
                return mapping.findForward("error");
            }else{
                return mapping.findForward("seekPwd2");
            }
        }
        public ResultSet executeQuery(String sql) {
            try { // 捕捉异常
                conn = getConnection(); // 调用getConnection()方法构造Connection对象的一个实例conn
                stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                        ResultSet.CONCUR_READ_ONLY);
                rs = stmt.executeQuery(sql);
            } catch (SQLException ex) {
                System.err.println(ex.getMessage()); // 输出异常信息
            }
            return rs; // 返回结果集对象
        }
    
        public int executeUpdate(String sql) {
            int result = 0; // 定义保存返回值的变量
            try { // 捕捉异常
                conn = getConnection(); // 调用getConnection()方法构造Connection对象的一个实例conn
                stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                        ResultSet.CONCUR_READ_ONLY);
                result = stmt.executeUpdate(sql); // 执行更新操作
            } catch (SQLException ex) {
                result = 0; // 将保存返回值的变量赋值为0
            }
            return result; // 返回保存返回值的变量
        }
    <logic:iterate id="questions" name="singleQue" type="com.wgh.actionForm.QuestionsForm" scope="request" indexId="ind">
      <tr>
        <td height=23 colspan="4" align=center nowrap>
          <table width="100%"  border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td width="8%" align=right height=23>[&nbsp;${ind+1}&nbsp;]</td>
              <td width="2%">&nbsp;</td>
              <td width="90%" align=left nowrap style="font-size:11pt;"><bean:write name="questions" property="subject" filter="true"/>
              <html:hidden property="idArrS[${ind}]" name="questions"/>
              </td>
            </tr>
          </table>
        </td>
      </tr>
      <tr>
        <td width="8%" height=23 nowrap>&nbsp;</td>
        <td width="3%" align=center nowrap><html:radio property="answerArrS[${ind}]" styleClass="noborder" value="A"/></td>
        <td width="3%" align=center nowrap>A.</td>
        <td width="86%" align=left nowrap><bean:write name="questions" property="optionA" filter="true"/></td>
      </tr>
      <tr>
        <td width="8%" height=23 nowrap>&nbsp;</td>
        <td width="3%" align=center nowrap><html:radio property="answerArrS[${ind}]" styleClass="noborder" value="B"/></td>
        <td width="3%" align=center nowrap>B.</td>
        <td width="86%" align=left nowrap><bean:write name="questions" property="optionB" filter="true"/></td>
      </tr>
      <tr>
        <td width="8%" height=23 nowrap>&nbsp;</td>
        <td width="3%" align=center nowrap><html:radio property="answerArrS[${ind}]" styleClass="noborder" value="C"/></td>
        <td width="3%" align=center nowrap>C.</td>
        <td width="86%" align=left nowrap><bean:write name="questions" property="optionC" filter="true"/></td>
      </tr>
      <tr>
        <td width="8%" height=23 nowrap>&nbsp;</td>
        <td width="3%" align=center nowrap><html:radio property="answerArrS[${ind}]" styleClass="noborder" value="D"/></td>
        <td width="3%" align=center nowrap>D.</td>
        <td width="86%" align=left nowrap><bean:write name="questions" property="optionD" filter="true"/></td>
      </tr>
      </logic:iterate>

    主要截取了一些诸如执行action的代码,以及前端传入form实例类的代码,以及DAO模式的存贮代码和返回后端的代码。

    七、项目代码扫描结果及改正

    扫描结果:

     改正:

     

    八、尚待改进

    前端设计的时候并不是使用的动态化设计,并且在设计前端内容的时候没有考虑到整个去应用模块化设计,增加了后续的迭代难度。

    后端中实例类的底层架构不够完美,在后续的开发工作中遇到了之前未想到的问题。归根结底是对面向对象编程的不熟悉,对类中属性和类承担的责任的不严谨导致后续迭代产生了困难。最后导致注入单选多选必须同时存在的问题。

    部分功能无法实现:学生类中缺少相应的属性,使得管理员不得指定一个学生只能参加特定的考试,或者让该学生补考。

  • 相关阅读:
    读《少有人走的路》《第3选择》
    《谁说这辈子只能这样》の悟
    日本专利的下载方法
    08.29 JavaScript 全局对象 JSON对象
    08.28 JavaScript 边界 选择修饰符 模式单元 修饰符 正则的使用
    08.25 javascript 倒计时+正则表达式 定义 作用 定义正则表达式
    08.24 javascript 内置对象 function apply() * call() * bind() ECMA5新增
    08.23 javasript 随机数 定时函数 多次函数 单次定时 Array属性 方法 ECMA5 新增方法
    08.22 javaScript 原型的定义 原型链 获取原型 操作原型的属性 判断原型是自有的还是继承的 各种方法
    08.21 javaScript07 object 概念 创建对象 创建属性操作 方法遍历 原型
  • 原文地址:https://www.cnblogs.com/k1206/p/10277207.html
Copyright © 2011-2022 走看看