四则运算——结对编程

一、Coding.Ne项目地址:https://git.coding.net/deervw/four-operations.git

测试url地址:http://localhost:8080/pairwork/Login.jsp

写在前面:在自己进行测试时,生成文件地址 ../result.txt,但最后发现的文件自动生成到了桌面上,之后询问过老师和助教,至今仍未得到解决。若老师或助教在进行测试时出现报错,请将Question.jsp和Answer.jsp页面的查找文件地址改成“C:\web”,可能会解决问题。

二、预估PSP表格

PSPPersonal Software Process Stages预估耗时(分钟)实际耗时(分钟) 
Planning 计划
30

60
 
Estimate · 估计这个任务需要多少时间
30

60
 
Development 开发
720

750
 
· Analysis ·需求分析 (包括学习新技术)
90

60
 
· Design Spec ·生成设计文档
30

30
 
Design Review ·设计复审 (和同事审核设计文档)
60


60
 
· Coding Standard ·代码规范 (为目前的开发制定合适的规范)
60

30
 
· Design · 具体设计
120

180
 
· Coding · 具体编码
120

240
 
· Code Review · 代码复审
120

60
 
· Test · 测试(自我测试,修改代码,提交修改) 240
120
 
Reporting 报告
150

240
 
· Test Report · 测试报告
60

120
 
· Size Measurement · 计算工作量
30

30
 
· Postmortem & Process Improvement Plan ·事后总结, 并提出过程改进计划
60

90
 
  合计
900

1050

三、接口设计

Information Hiding、Interface Design、Loose Coupling:信息隐藏指在设计和确定模块时,使得一个模块内包含的特定信息(过程或数据),对于不需要这些信息的其他模块来说,是不可访问的。隐藏变化源:这样当变化发生时,其影响就能被限制在局部范围内。例如我的设计的judge()方法,只能被函数调用,而不改变其内部变量。面向对象设计最大的原则就是针对接口设计。可见接口的重要性,如果接口能够定义好,不仅便于自身维护,而且也导致上层应用不需要太多变动。接口能够松耦合,是因为多态的特性,父类或者接口的引用是可以接受子类对象的,表现耦合低的意思是说,删除调用层与接受层无关,即方法只需要接口类型,具体传入哪个对象是无需关注的,因为接口是一种规则。例如我们设计的Command类中,生成算式和优先级判断是相互独立的,直接调用即可。

四、计算模块接口的设计与实现过程

本次四则运算项目共用到了2个类,3个函数。两个类包括实现主要功能的Command类,和对生成文件进行操作的ChangeFile类。调用关系为Command类调用ReplaceText类。三个函数包括判断优先级judge(),替换特殊字符Replace()和生成算式create(),create()调用judge()和Replace()。

我们程序的关键在于算式的生成,这是本次项目的最基本功能,代码的独到之处在于类和函数数量少,调用关系明确简单,但缺点是后期的维护较困难。

五、计算模块接口部分的性能改进

所花时间:共4小时(查找模块1小时,改进3小时)

六、计算模块部分单元测试展示

这里展示两个函数judge()和create()测试截图,我们使用了JUnit来进行测试,通过给这两个函数赋值,与预估值进行比较。结果如下:

七、计算模块部分异常处理说明

(1)效范围正整数异常处理

try {
            n = Integer.parseInt("n1");
            if (n <= 0||n>1000)
                System.out.println("出题数目无效,请重新输入!");
        } catch (Exception e) {
            System.out.println("输入的不是正整数,请重新输入!");
        }

对应场景:

(2)文件生成异常处理

try {
            PrintStream ps = new PrintStream("../result.txt");
            System.setOut(ps);
        } catch (Exception e) {
            System.out.println("文件生成错误!");
        }

对应场景:

八、界面模块的详细设计过程

(一)、登录界面

 首先登录界面是一个JSP页面,主要用HTML和CSS代码写在JSP文件当中实现页面的部分,首先是登录的部分,打开网页版的程序,首先会看到 一个登录页面,登录界面的背景是星空的图案,在登录界面中,会有两个白色的文本框,一个为输入用户名的文本框,另一个是输入密码的文本框,用户只需输入自己的用户名和密码即可,再输入完用户名和密码过后,你会看见在文本框下面看见一个蓝色的按钮,上面写着登录,所以输入用户名和密码然后点击登录按钮即可提交表单,处罚ACTION的行动,进入下一个界面。

(二)、欢迎界面

  当你在登录界面点击了蓝色的登录按钮过后,触发了ACTION的动作,就进入了欢迎界面,在欢迎界面你会看见背景是白色为主的,上面有数学公式和多彩的运算符的以及一个小人的团,在该界面,你会看到在页面的正中央的上面有加加粗的深蓝色的大字“欢迎来到四则运算小程序!~”,在该界面的标题的正下方,你会看到一个蓝色的“开始答题”的按钮,当你想要开始答题时,只需点击按钮进入下一页面即可。

(三)、主界面

  当你在欢迎界面点击了“开始答题~”的蓝色按钮之后,你就会进入下一个页面,主页面,界面包括各个系统功能选择项,包括题目数的选择,运算符个数的选择,题目范围的选择,以及生成题目的按钮。首先题目数的选择输入是以文本框,由用户输入想要生成的题目的数量,接下来是运算符个数的选择,考虑到是小学生的四则运算,所以我们的题目运算符个数不能太多,所以我给用户提供了四个选择,分别为“一个运算符” 、“两个运算符” 、“三个运算符”  、 “四个运算符” ,是以一个下拉框的形式出现在页面上的,最后是生成题目按钮,当你点击按钮,表单内的题目数 、运算符数 、题目范围等参数就会传给后台,后台就会执行生成题目这一动作。
<p  style="color: #FFFFFF !important ; font-size :30px">题目数</p>
 </td>
 <td>
 <div class="input_outer1">
  
 <input name="n1" class="text1" style="color: #FFFFFF !important" type="text" placeholder="请输入题目数">
  </div>
  </td>
  </tr>
 <tr>
 <td>
 <label  style="color: #FFFFFF !important ; font-size :30px">运算符数</label>
 </td>
 <td>
 <select  class = "sel" style = " padding-right: 14px;" name = "m1">
 <option value = "1">一个运算符</option>
 <option value = "2"  selected = "selected">二个运算符</option>
 <option value = "3">三个运算符</option>
<option value = "4个">四个运算符</option>
 <lect>
 </td>
 </tr>

(四)题目页面

  当你在主页面内输入了你想要的题目数,运算符数,题目范围等点击了生成题目的按钮,那么这些参数就会通过Request对象传给后台,后台接收到你的请求,生成相应的题目,输出到前端页面,用户可在前端的题目页面上进行答题操作,后台会实时记录你答题的时间,但你答题结束后,你会在页面的右下方看见一个蓝色的提交按钮,点击该按钮,提交你的答案。在按钮的右侧,你会看见,一个计时器,

(五)答案页面

  当你在题目页面点击了提交按钮,提交了表单后,你的题目和答案会一起提交到后台,后台的计时器会停止计时,并且后台会对你的题目进行分析判断,最后提交给你一份答案页面,以及你的正确率,以及你答题所用的时间信息。当你检查完题目,觉得要结束这个答题程序了,你可以点击离开按钮,提交表单,AVTION回到登录页面,离开该程序。但如果你对于刚才自己的表现不满意,想要再做一次,可以选择点击右下方的另一个蓝色的按钮,再来一次,选择在一次挑战自己,点击该按钮后,你就会进入主页面,重新选择你想要做的题目的类型的。

九、界面模块与计算模块的对接

本次结对编程我们做的是Web项目,在前端页面和后台程序的对接中,我们使用了<% ><%>嵌入java代码来调用后端的函数,引入类的包,使用内置对象request来获取前台的值,并向create和Replace函数传入参数来调用java函数,如下图:

实现的功能:

 

生成题目文件和答案文件:

十、结对过程照片展示

十一、编程的优点和缺点

(1)优点:

         结对编程可以交付更好的设计质量和代码质量。

         结对编程具有更强的问题解决能力。

         结对编程伙伴一起工作学习,能够互相提供更多的信心。

(2)缺点:

         分工不同,可能导致后期代码结合比较困难,互相看不懂代码,不知如何修改。

         交流困难,意见不同,进展不太顺利。

   结对小伙伴 郑春雨 优点:前段代码能力强、有上进心、责任心强;缺点:不够耐心                                         我的  优点:思路清晰、合作能力较好、有上进心;缺点:不够耐心

十二、项目结束后PSP展示

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning 计划
60
60
· Estimate · 估计这个任务需要多少时间
1200

2160
· Analysis · 需求分析 (包括学习新技术)
60

180
· Design Spec · 生成设计文档
30

30
· Design Review · 设计复审 (和同事审核设计文档)
30

30
· Coding Standard · 代码规范 (为目前的开发制定合适的规范)
90


60
· Design · 具体设计
120

150
· Coding · 具体编码
120

180
· Code Review · 代码复审
120

120
· Test · 测试(自我测试,修改代码,提交修改)
120

60
Reporting 报告 1
90
· Test Report · 测试报告
90

120
· Size Measurement · 计算工作量
90

60
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划
60

60
原文地址:https://www.cnblogs.com/fux137/p/8762484.html