结对编程对象:2152405
结对编程(英语:Pair programming)是一种敏捷软件开发的方法,两个程序员在一个计算机上共同工作。一个人输入代码,而另一个人审查他输入的每一行代码。输入代码的人称作驾驶员,审查代码的人称作观察员(或导航员)。两个程序员经常互换角色。
在结对编程中,观察员同时考虑工作的战略性方向,提出改进的意见,或将来可能出现的问题以便处理。这样使得驾驶者可以集中全部注意力在完成当前任务的“战术”方面。观察员当作安全网和指南。结对编程对开发程序有很多好处。比如增加纪律性,写出更好的代码等。
一、 需求分析
1. 小学老师要每周给同学出300道四则运算练习题。这个程序有很多种实现方式:
- C/C++
- C#/VB.net/Java
- Excel
- Unix Shell
- Emacs/Powershell/Vbscript
- Perl
- Python
2. 一或两个运算符(a+b或a+b+c),100以内的数字,不需要写答案
3. 需要检查答案是否正确,并且保证答案在0..100之间
4. 尽可能地多设置一些条件
需求重点:
1. 自动生成100以内的运算题目(加、减、乘、除)
2. 支持多运算符
3. 提交后显示正确结果
4. 统计正确题数和错误题数
二、 设计思路
- 使用语言为Java
- 编写三个jsp页面,分别对应登入界面,答题界面,显示结果界面
- 登入界面可选择身份(老师,家长,学生),输入题目总数量和每行的题数
- 利用数组对题目以及答案进行存储,采用随机数的方式随机出1-100的数字和1-5的运算符号(分别代表加、减、乘、除和累加)
- 显示结果界面对结果进行表格输出
三、 关键代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <style type="text/css"> .center{ text-align:center; margin-top: 50px; } .fon{ font-size: 40px; } body{ background-color:#93b5cf ; background-size: 100% 100%; } input { background-color: transparent; outline: none; color: black; } .clear{ opacity:0.3; } </style> </head> <div class="center"> <form action="second.jsp" method="get"/> <form action="third.jsp" method="get"/> 身份:<select> <option>老师</option> <option>学生</option> <option>家长</option> </select> <div> 出题数目:<input type="text"name="number" id="number" style="width: 200px;height: 40px" placeholder="请输入出题数目" > </div> <br> 每行数目:<input type="text"name="num" id="num" style="width: 200px;height: 40px" placeholder="请输入每行数目" > <br> <textarea disabled="disabled" cols="86" rows="6"> 欢迎阅读服务条款协议,本协议阐述之条款和条件适用于您使用本网站的各种工具和服务。 本服务协议双方为网站开发者与用户,本服务协议具有合同效力。 用户提供的信息是准确、完整、真实、合法的, 不存在虚假、欺诈、骚扰性的、中伤他人的、伤害性的、诽谤、侮辱、恐吓、庸俗淫秽等违反法律、公序良俗或社会伦理道德的信息或内容, 也不存在危害网络或计算机系统的安全性、完整性、稳定性、连续性的病毒、木马程序等电脑软件、文档或其他数据资料。 用户对用户提供的信息拥有完整的、独立的权利,或者已经得到相关权利人的合法授权,用户保证甲方使用用户提供的信息不会侵犯任何第三方的合法权利, 亦不会违反用户与任何第三方的约定。 </textarea> <input type="submit" value="提交"/> </div> </body> </html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <body text="black" style="background-color:#93b5cf;background-size:100%"> <% int x = Integer.parseInt(request.getParameter("number")); int y = Integer.parseInt(request.getParameter("num")); String suanshi[]=new String[x]; int sum[]=new int[x]; int w=0; int flag=0; for(int i=0;i<x;i++) { int n1=(int)Math.floor(Math.random()*100+1); int n2=(int)Math.floor(Math.random()*100+1); int n3=(int)Math.floor(Math.random()*100+1); String fuhao[]=new String[4]; int f=(int)Math.floor(Math.random()*5+1); if(f==1) { suanshi[i]=n1+"+"+n2+"="; sum[i]=n1+n2; if(sum[i]>100)flag=1; } else if(f==2) { if(n1>n2) { suanshi[i]=n1+"-"+n2+"="; sum[i]=n1-n2; } else { suanshi[i]=n2+"-"+n1+"="; sum[i]=n2-n1; } } else if(f==3) { suanshi[i]=n1+"*"+n2+"="; sum[i]=n1*n2; if(sum[i]>=100) { suanshi[i]=n1+"+"+n2+"="; sum[i]=n1+n2; } } else if(f==4) { if(n2==0) { suanshi[i]=n1+"-"+n2+"="; sum[i]=n1/n2; } else { if(n2<n1) { suanshi[i]=n1+"/"+n2+"="; sum[i]=n1/n2; } else { suanshi[i]=n2+"/"+n1+"="; sum[i]=n2/n1; } } } else if(f==5) { suanshi[i]=n2+"+"+n1+"+"+n3+"="; sum[i]=n1+n2+n3; } if((i+1)%y==0) { w++; System.out.println(); } } %> <title>出题</title> </head> <body> <form action="third.jsp"/> <table> <% for(int i=0;i<w;i++) {%> <tr> <% for(int h=i*y;h<=i*y+y;h++){ %> <td><%=suanshi[h] %></td> <td><input type="text" name="sdaan" /></td> <td><input type="hidden" name="zdaan" value=<%=sum[h] %>></td> <%}%> </tr> <% }if(w*y<x) { for(int j=w*y;j<x;j++) {%> <tr> <td><%=suanshi[j] %></td> <td><input type="text" name="sdaan" id="sdaan"/></td> <td><input type="hidden" name="zdaan" id="zdaan" value=<%=sum[j] %>/></td> </tr> <%}} %> <tr> <td> <input type="submit" value="提交"/> </td> </tr> </table> </body> </html>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>校对答案</title> </head> <body text="black" style="background-color:#93b5cf;background-size:100%"> <% int z=0; int c=0; String sdaan[]=request.getParameterValues("sdaan"); String zdaan[]=request.getParameterValues("zdaan"); int l=sdaan.length; String flag[]=new String[l]; for(int i=0;i<sdaan.length;i++) { if(sdaan[i].equals(zdaan[i])) { z++; flag[i]="正确"; } else { c++; flag[i]="错误"; } } %> <table border="1" height=150 slign=center bgcolor=white> <tr><td>题号</td><td>答案</td><td>正确答案</td><td>判断</td></tr> <% for(int i=0; i<sdaan.length;i++) { %> <tr> <td><%=i+1 %></td> <td><%=sdaan[i] %></td> <td><%=zdaan[i] %></td> <td><%=flag[i] %></td> </tr> <% } %> </table> <p>你答对了<font size=4 color="green"><%=z %></font>道题,答错了<font size=4 color="red"><%=c %></font>道题</p> <form action="first.jsp"> <input type="submit" value="重新答题"/> </form> </body> </html>
四、 运行结果
,1,选择出题数目,每行数目,身份
2,作答题目,点击提交
3,校对答案,判断正误,统计正确率
4. 选择重新答题,回到初始界面
五、 收获与感悟
- 与同学在编程过程中互相弥补知识上的不足,在编程时遇到不会的问题时,可以直接请教同学,大大节省了编程时间;
- 在编程中写出错误时,另一个同学可以直接指出,减少了不必要的基础错误,节省了编程时间;
- 在编程过程中,相互商量,集思广益,为程序增添了很多功能,提高了代码的质量,也发现了自己的思维盲区;
- 在交流中,两个人的思维方式不同,带来了更多样化的解决问题手段,拓展了视野,开拓了思维;
- 在刚开始编程时,因为思考方式不同,在对于题目的理解和项目如何实现上,存在一定的矛盾,后经过大量的交流沟通后达成了一致,结合两人的想法的优点,得到了更好的解决问题的方法,在求同存异的思维碰撞后,也加深了同学之间的友谊;
- 从本次结对编程中学到的知识和技能,能帮助我们更妥善地解决在未来的工作生活中可能会遇见的矛盾与分歧。