sebool index 估计 img auto update jsp 页面 sp2
队员: 信 1505-1 20153144 毛松林
信 1505-1 20153 张浩
这次的任务是团队开发一个能实现自动生成算术题,并且能够检查结果和将结果存放到数据库中的四则运算网站。程序的业务逻辑已经在前面的实验中完成了,现在只需要实现应用的控制逻辑和界面显示就行了。我和我的伙伴选择用 MVC 结构构建 web 应用程序。网页的设计思路大致为首先显示一个数据设置界面,让用户控制需要的到的表达式的各种参数,然后将参数传递给后台运行的 servlet,servlet 接受到参数后调用 JavaBean 的相关类,生成符合参数要求的表达式,并且将表达式存放到数据库中,接着 servlet 将表达式存放到 jsp 页面的请求对象中并且转发请求到显示表达式的界面。然后提交的答案会再次传送到后台然 servlet 判断回答是否正确,最后跳转到界面显示答题的结果。
参数设置界面 html 代码:
- 1 <body>
- 2 <div id = "inputDiv">
- 3 <form name="form1" action="EquationServlet" method="post">
- 4 <table>
- 5 <caption>表达式参数设置</caption>
- 6 <tr>
- 7 <th>选项</th><th>设置</th>
- 8 </tr>
- 9 <tr>
- 10 <td><label for="name">表达式个数:</label></td>
- 11 <td><input type="number" name="sum"size="3"></td>
- 12 </tr>
- 13 <tr>
- 14 <td><label for="operandsum">操作数个数:</label></td>
- 15 <td><input type="number" name="operandsum"size="3"></td>
- 16 </tr>
- 17 <tr>
- 18 <td><label for="maxinteger">整数最大值:</label></td>
- 19 <td><input type="number"name="maxinteger"size="3"></td>
- 20 </tr>
- 21 <tr>
- 22 <td><label for="maxnumerator">分子最大值:</label></td>
- 23 <td><input type="number"name="maxnumerator"size="3"></td>
- 24 </tr>
- 25 <tr>
- 26 <td><label for="maxdenominator">分母最大值:</label></td>
- 27 <td><input type="number"name="maxdenominator"size="3"></td>
- 28 </tr>
- 29 <tr>
- 30 <td><label for="includemultiply">是否包含乘除法:</label></td>
- 31 <td><input type="radio" name="includemultiply"value="true">是<input type="radio" name="includemultiply"value="false">否</td>
- 32 </tr>
- 33 <tr>
- 34 <td><label for="withbracket">是否包含括号:</label></td>
- 35 <td><input type="radio" name="withbracket"value="true">是<input type="radio" name="withbracket"value="false">否</td>
- 36 </tr>
- 37 <tr>
- 38 <td colspan="2"><input type="reset" value="重设"><input type="submit"value="确定"></td>
- 39 </tr>
- 40 </table>
- 41 </form>
- 42 </div>
答题界面 JSP 代码:
- 1 <body>
- 2 <div>
- 3 <c:out value="共${questionsum }道计算题,正确${correctsum }道,错误${wrongsum }道。"/>
- 4 <a href="thirdpage.jsp">返回首页</a>
- 5 <table border="1" cellspacing="0"cellpadding="10px"align="center">
- 6 <tr>
- 7 <th>题号</th><th>题目</th><th>回答</th><th>正确答案</th><th>批改</th>
- 8 </tr>
- 9 <%! int i; String str;%>
- 10 <% i=0; %>
- 11 <c:forEach items="${list}" var="currentObject" varStatus="statusTag">
- 12
- 13 <tr>
- 14 <td>${statusTag.index+1 }</td>
- 15 <td>${currentObject.express }</td>
- 16 <td>
- 17 <%
- 18 str = (String)request.getAttribute("answer"+i);
- 19 out.print(str);
- 20 i++;
- 21 request.setAttribute("str", str);
- 22 %>
- 23 </td>
- 24 <td>${currentObject.value }</td>
- 25 <td>
- 26 <c:if test="${currentObject.value==str }"><font color="green">正确</font></c:if>
- 27 <c:if test="${currentObject.value!=str }"><font color="red">错误</font></c:if>
- 28 </td>
- 29 </tr>
- 30 </c:forEach>
- 31 </table>
- 32 </div>
- 33 </body>
显示结果界面 JSP 代码:
- 1 <div id="resultDiv"align="center">
- 2 <form name="form2" action="CheckAnswerServlet" onsubmit=""method="post">
- 3 <table style="align:center; cellspacing:0px; padding=12px; border: 3px #ff00ff solid;">
- 4 <c:forEach items="${list }" var="cur" varStatus="curStatus">
- 5 <tr>
- 6 <td>${curStatus.index+1 }. </td>
- 7 <td>${cur.express } = </td>
- 8 <td>
- 9 <input type="text"name="${curStatus.index }"size="8">
- 10 </td>
- 11 </tr>
- 12 </c:forEach>
- 13 <tr>
- 14 <td colspan="2">
- 15 <input type="reset" value="重置">
- 16 <input id="handin" type="button"value="提交">
- 17 </td>
- 18 </tr>
- 19 </table>
- 20 </form>
- 21 </div>
控制器 servlet 生成表达式,存放到数据库中的代码:
- 1 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
- IOException {
- 2 // TODO Auto-generated method stub
- 3 response.setContentType("text/html;charset = utf-8");
- 4 request.setCharacterEncoding("utf-8");
- 5 String sheng = request.getParameter("includemultiply"); //是否有乘除法
- 6 String geshu = request.getParameter("sum"); //表达式个数
- 7 String czush = request.getParameter("operandsum"); //操作数个数
- 8 String zheng = request.getParameter("maxinteger"); //整数最大值
- 9 String fenzi = request.getParameter("maxnumerator"); //分子最大值
- 10 String fenmu = request.getParameter("maxdenominator"); //分母最大值
- 11 String kuoha = request.getParameter("withbracket"); //是否有括号
- 12
- if (sheng == null || sheng.equals("")) 13 sheng = "true";
- 14
- if (geshu == null || geshu.equals("")) 15 geshu = "1";
- 16
- if (czush == null || czush.equals("")) 17 czush = "4";
- 18
- if (zheng == null || zheng.equals("")) 19 zheng = "100";
- 20
- if (fenzi == null || fenzi.equals("")) 21 fenzi = "10";
- 22
- if (fenmu == null || fenmu.equals("")) 23 fenmu = "10";
- 24
- if (kuoha == null || kuoha.equals("")) 25 kuoha = "true";
- 26 boolean includemultipy = Boolean.parseBoolean(sheng);
- 27 int sum = Integer.parseInt(geshu);
- 28 int operandsum = Integer.parseInt(czush);
- 29 int maxinteger = Integer.parseInt(zheng);
- 30 int numerator = Integer.parseInt(fenzi);
- 31 int denominator = Integer.parseInt(fenmu);
- 32 boolean withbracket = Boolean.parseBoolean(kuoha);
- 33 ArrayList list = new ArrayList();
- 34 35
- for (int i = 0; i < sum; i++) 36 {
- 37 Equation array = new Equation(includemultipy, operandsum, maxinteger, 38 numerator, denominator, withbracket);
- 39 boolean flag = Action.insertExpress(array);
- 40
- if (!flag) 41 i--;
- 42
- else 43 list.add(array);
- 44
- }
- 45 request.getSession().setAttribute("list", list);
- 46 request.getRequestDispatcher("showEquation.jsp").forward(request, response);
- 47
- }
验证表达式结果的,更新数据库的 java 代码:
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
- IOException {
- // TODO Auto-generated method stub
- response.setContentType("text/html;charset = utf-8");
- request.setCharacterEncoding("utf-8");
- HttpSession session = request.getSession();
- @SuppressWarnings("unchecked") java.util.ArrayList list = (java.util.ArrayList) session.getAttribute("list");
- int questionsum = list.size(),
- rightsum = 0,
- wrongsum = 0;
- String tempexpress,
- tempanswer = null,
- tempresult;
- int i = 0;
- do {
- third.Equation exp = list.get(i);
- tempanswer = request.getParameter("" + i);
- tempexpress = exp.getExpress();
- tempresult = exp.getValue();
- request.setAttribute("answer" + i, tempanswer);
- i++;
- boolean flag = tempanswer.equals(tempresult); //check the answer is right or not
- if (flag) rightsum++;
- Action.updateAnswerRecord(tempexpress, flag); //update the relevant data in the database
- } while ( i < questionsum );
- wrongsum = questionsum - rightsum;
- request.setAttribute("list", list);
- request.setAttribute("questionsum", questionsum);
- request.setAttribute("correctsum", rightsum);
- request.setAttribute("wrongsum", wrongsum);
- request.getRequestDispatcher("showResult.jsp").forward(request, response);
- }
参数设置界面:
答题界面:
结果验证界面:
这是我首次结对完成任务。对于从小就被教育万事要独立完成的我,的确有些不适应这样的开发过程。我和我的伙伴对于任务的设计思路还是一致的,但是缺乏沟通交流,缺少真正的协同作战。大概就是分工后各干各的,遇到问题也习惯独立思考。如果按照老师的要求,这应该就是没有达到结对开发的效果吧。不过这是第一次应该是让我们先适应适应吧,以后总会好的。
开发前的估计:
PSP2.1 |
Personal Software Process Stages |
Time |
Planning |
计划 |
20h |
· Estimate |
· 估计这个任务需要多少时间 |
20h |
Development |
开发 |
15h |
· Analysis |
· 需求分析 (包括学习新技术) |
2h |
· Design Spec |
· 生成设计文档 |
1h |
· Design Review |
· 设计复审 (和同事审核设计文档) |
1h |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
1h |
· Design |
· 具体设计 |
2h |
· Coding |
· 具体编码 |
4h |
· Code Review |
· 代码复审 |
1h |
· Test |
· 测试(自我测试,修改代码,提交修改) |
3h |
Reporting |
报告 |
5h |
· Test Report |
· 测试报告 |
2 |
合计 |
20h |
实际开发记录:
PSP2.1 |
Personal Software Process Stages |
Time |
Planning |
计划 |
|
· Estimate |
· 估计这个任务需要多少时间 |
|
Development |
开发 |
10h |
· Analysis |
· 需求分析 (包括学习新技术) |
0 |
· Design Spec |
· 生成设计文档 |
0 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
0 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
0 |
· Design |
· 具体设计 |
2h |
· Coding |
· 具体编码 |
4h |
· Code Review |
· 代码复审 |
0 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
2h |
Reporting |
报告 |
2h |
· Test Report |
· 测试报告 |
|
· Size Measurement |
· 计算工作量 |
1h |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
1h |
合计 |
12h |
软件工程结对作业 01
来源: http://www.bubuko.com/infodetail-2013605.html