队员: 信1505-1 20153144 毛松林
信1505-1 20153304 张浩
程序设计思想
这次的任务是团队开发一个能实现自动生成算术题,并且能够检查结果和将结果存放到数据库中的四则运算网站。程序的业务逻辑已经在前面的实验中完成了,现在只需要实现应用的控制逻辑和界面显示就行了。我和我的伙伴选择用MVC结构构建Web应用程序。网页的设计思路大致为首先显示一个数据设置界面,让用户控制需要的到的表达式的各种参数,然后将参数传递给后台运行的servlet,servlet接受到参数后调用JavaBean的相关类,生成符合参数要求的表达式,并且将表达式存放到数据库中,接着servlet将表达式存放到jsp页面的请求对象中并且转发请求到显示表达式的界面。然后提交的答案会再次传送到后台然servlet判断回答是否正确,最后跳转到界面显示答题的结果。
程序源代码:
showEquation.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <script type="text/javascript"> window.onload = initFunction; function initFunction(){ document.getElementById("handin").onclick = checkFill; } function checkFill(){ var inputTags = document.getElementsByTagName("INPUT"); for(var i = 0; i < inputTags.length; i++){ var thisTag = inputTags[i]; if(thisTag.value.length==0) { alert("未回答的题目!"); thisTag.focus(); return false; } } document.form2.submit(); return true; } </script> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <div id="resultDiv"> <form name="form2" action="CheckAnswerServlet" onsubmit=""method="post"> <table> <c:forEach items="${list }" var="cur" varStatus="curStatus"> <tr> <td>${curStatus.index+1 }. </td> <td>${cur.express } = </td> <td> <input type="text"name="${curStatus.index }"size="8"> </td> </tr> </c:forEach> <tr> <td colspan="2"> <input type="reset" value="重置"> <input id="handin" type="button"value="提交"> </td> </tr> </table> </form> </div> </body> </html>
showResult.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>check your answer</title> </head> <body> <div> <c:out value="共${questionsum }道计算题,正确${correctsum }道,错误${wrongsum }道。"/> <a href="thirdpage.jsp">返回首页</a> <table border="1" cellspacing="0"> <tr> <th>题号</th><th>题目</th><th>回答</th><th>正确答案</th><th>批改</th> </tr> <%! int i; String str;%> <% i=0; %> <c:forEach items="${list}" var="currentObject" varStatus="statusTag"> <tr> <td>${statusTag.index+1 }</td> <td>${currentObject.express }</td> <td> <% str = (String)request.getAttribute("answer"+i); out.print(str); i++; request.setAttribute("str", str); %> </td> <td>${currentObject.value }</td> <td> <c:if test="${currentObject.value==str }">正确</c:if> <c:if test="${currentObject.value!=str }">错误</c:if> </td> </tr> </c:forEach> </table> </div> </body> </html>
thirdpage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html > <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <style type="text/css"> body{ font-fimaly:宋体; background-color:rgba(0,0,20,0.5); } #inputDiv{ width:50%; position:relative; top:2cm; align:center; border-style:solid; border-color:#ff00dd; border-radius:14px; background-color:rgba(0,20,20,0.3); border-width:5px; padding:15px; margin:5px; } #inputDiv input[type="text"]{ background-color:white; border-radius:4px; border-width:3px; width:5Cm; hight:1Cm; } #inputDiv input[type="text"]:focus{ background-color:#100203; border-radius:4px; border-width:3px; width:5Cm; hight:1Cm; } #inputDiv input[type="radio"]:checked{ outline:1px solid red; border:medium none; } </style> <title>算术题</title> </head> <body> <div id = "inputDiv"> <form name="form1" action="EquationServlet" method="post"> <table> <caption>表达式参数设置</caption> <tr> <th>选项</th><th>设置</th> </tr> <tr> <td><label for="name">表达式个数:</label></td> <td><input type="number" name="sum"size="3"></td> </tr> <tr> <td><label for="operandsum">操作数个数:</label></td> <td><input type="number" name="operandsum"size="3"></td> </tr> <tr> <td><label for="maxinteger">整数最大值:</label></td> <td><input type="number"name="maxinteger"size="3"></td> </tr> <tr> <td><label for="maxnumerator">分子最大值:</label></td> <td><input type="number"name="maxnumerator"size="3"></td> </tr> <tr> <td><label for="maxdenominator">分母最大值:</label></td> <td><input type="number"name="maxdenominator"size="3"></td> </tr> <tr> <td><label for="includemultiply">是否包含乘除法:</label></td> <td><input type="radio" name="includemultiply"value="true">是<input type="radio" name="includemultiply"value="false">否</td> </tr> <tr> <td><label for="withbracket">是否包含括号:</label></td> <td><input type="radio" name="withbracket"value="true">是<input type="radio" name="withbracket"value="false">否</td> </tr> <tr> <td colspan="2"><input type="reset" value="重设"><input type="submit"value="确定"></td> </tr> </table> </form> </div> </body> </html>
程序结果截图:
参数设置界面:
答题界面:
结果验证界面:
编程总结
这次结对开发程序对于性格有点内向的我来说挑战很大,本来就不怎么喜欢跟人交流,幸好这次开发跟队友的思路相差不大,分配了任务之后就自己开发自己的,没怎么交流。代码的逻辑结构都差不多,很相似,只是页面设计方面有点不同。
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 |
· 测试报告 |
2h |
|
合计 |
20h |