结对编程分析总结(刘天赛&许茗豪)

本次结对编程我们使用的是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!

posted @ 2018-10-08 21:02  许茗豪  阅读(356)  评论(0)    收藏  举报