结对编程分析总结(刘天赛&许茗豪)
本次结对编程我们使用的是Java语言,基于lts同学的个人项目进行程序设计。
结对编程项目需求相比较个人项目多了UI和计算结果的算法,所以在原来的个人项目中可以利用的只有生成题目的算法。由于个人项目分析已经在之前的博客中有提到,所以不在此赘述,主要分析UI的设计以及计算结果的算法设计。
UI设计流程图:

登录界面:
用户可以选择输入用户名和密码,点击登录按钮,如果和系统中存储的用户信息相匹配则登录成功
同时,用户也可以点击注册按钮进行注册

登录失败界面:
如果用户名或者密码不能完全匹配,则提示登录失败

注册界面:
用户输入信息后,点击“获取验证码”按钮即可收到验证码短信
点击“注册”按钮后,如果用户输入信息全部合法则注册成功,否则会根据错误信息生成失败界面

注册失败界面:
提示信息会根据用户输入的信息改变,包括:用户名非法,用户名重复,密码非法,两次密码不匹配,验证码错误

注册成功界面:

手机验证码截图:

系统logo:

下面介绍获取题目计算结果的算法,算法思路如下:
首先传入一个字符串,该字符串包含一个算式,然后对此函数通过对于字符串处理,经过处理返回改算式的答案
遍历字符串,如果遇到特殊的操作符,如tan、²等等,则直接算出其结果然后替换该操作符操作数如遇到tan30就将tan30的值算出然后替换tan30
利用脚本来对及字符串公式进行计算,得到最终答案。具体操作在代码内请自己查看。
代码如下:
1 double getAnswer(String pro) throws ScriptException 2 { 3 int t = 0; 4 while (pro.charAt(t) != '.') 5 { 6 t++; 7 } 8 //得到不含序号的字符串,字符串开头一般为(数字). 9 StringBuffer problem = new StringBuffer(pro.substring(t+1)); 10 //遍历字符串,如果遇到特殊的操作符,如tan、²等等,则直接算出其结果然后替换 11 for (int i = 0; i < problem.length();i++) 12 { 13 int start = i; 14 int num_count = 0; 15 int num = 0; 16 switch (problem.charAt(i)) 17 { 18 case 't': 19 //此时遇到tan 20 i += 3; 21 while (problem.charAt(i) >= '0' && problem.charAt(i) <= '9') 22 { 23 num_count++; 24 i++; 25 } 26 num = Integer.parseInt(problem.substring(start+3, start+3+num_count)); 27 problem.delete(start, start+3+num_count); 28 problem.insert(start, Math.tan(num)); 29 break; 30 case 'c': 31 //此时遇到cos 32 i += 3; 33 while (problem.charAt(i) >= '0' && problem.charAt(i) <= '9') 34 { 35 num_count++; 36 i++; 37 } 38 num = Integer.parseInt(problem.substring(start+3, start+3+num_count)); 39 problem.delete(start, start+3+num_count); 40 problem.insert(start, Math.cos(num)); 41 break; 42 case 's': 43 //此时遇到sin 44 i += 3; 45 while (problem.charAt(i) >= '0' && problem.charAt(i) <= '9') 46 { 47 num_count++; 48 i++; 49 } 50 num = Integer.parseInt(problem.substring(start+3, start+3+num_count)); 51 problem.delete(start, start+3+num_count); 52 problem.insert(start, Math.sin(num)); 53 break; 54 case '√': 55 //此时遇到√ 56 i++; 57 while (problem.charAt(i) >= '0' && problem.charAt(i) <= '9') 58 { 59 num_count++; 60 i++; 61 } 62 num = Integer.parseInt(problem.substring(start+1, start+num_count+1)); 63 problem.delete(start, start+num_count+1); 64 problem.insert(start, Math.sqrt(num)); 65 break; 66 } 67 68 if (problem.charAt(i) == '²') 69 { 70 //此时遇到² 71 i--; 72 while ((problem.charAt(i) >= '0' && problem.charAt(i) <= '9') && i != 0 ) 73 { 74 num_count++; 75 i--; 76 } 77 num = Integer.parseInt(problem.substring(start-num_count, start)); 78 problem.delete(start-num_count, start+1); 79 problem.insert(start-num_count, num*num); 80 } 81 } 82 for (int i = 0; i < problem.length()-1;i++) 83 { 84 //如果处理过的算式中出现--则替换成+ 85 if(problem.charAt(i) == '-'&&problem.charAt(i+1) == '-') 86 { 87 problem.delete(i,i+2); 88 problem.insert(i, "+"); 89 } 90 } 91 problem.delete(problem.length()-1, problem.length()); 92 System.out.println(problem); 93 //利用脚本来对及字符串公式进行计算 94 ScriptEngineManager manager = new ScriptEngineManager(); 95 ScriptEngine engine = manager.getEngineByName("js"); 96 Object result = engine.eval(problem.toString()); 97 System.out.println("结果类型:" + result.getClass().getName() + ",计算结果:" + result); 98 return Double.parseDouble(result.toString()); 99 }
心得体会:
在这次结对编程项目的实践中,我和队友对JAVA有了更深一步的见解,也学会了很多的前端搭建技巧。在过程中,我和队友的交流非常频繁,以良好的交流为基础,我们对接工作进行地非常顺利。
实践是最好的老师,书读百遍不如手写一遍,我们在书本上学到的都是死知识,如果不加以实践,自己的编程能力永远都不会有很大的提高。
此次结对编程圆满成功,感谢我的队友lts,CHEERS!

浙公网安备 33010602011771号