首页 > 代码库 > 软件工程结对作业01
软件工程结对作业01
队员: 信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=http://www.mamicode.com/=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<Equation> list = new ArrayList<Equation>(); 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<third.Equation> list = (java.util.ArrayList<third.Equation>)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); }
程序结果截图:
参数设置界面:
答题界面:
结果验证界面:
编程总结
这是我首次结对完成任务。对于从小就被教育万事要独立完成的我,的确有些不适应这样的开发过程。我和我的伙伴对于任务的设计思路还是一致的,但是缺乏沟通交流,缺少真正的协同作战。大概就是分工后各干各的,遇到问题也习惯独立思考。如果按照老师的要求,这应该就是没有达到结对开发的效果吧。不过这是第一次应该是让我们先适应适应吧,以后总会好的。
PSP记录表格。
开发前的估计:
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