2016012019——小学四则运算练习软件项目报告

仓库地址:https://git.coding.net/Buza/arithmeticForStu.git

内容一:需求分析

用户用例:

用例名称

设置题目数

适用系统

Windows10  IOS

级别

用户用例

用户

程序使用者

利益关系者

用户

前置条件

成功保证

输入正整数

主要成功场景

用户输入正整数,点击回车键,返回所输入数目的题目

扩展

输入小数或负数时,返回“请输入正整数”

特殊需求

技术与数据计数表

 暂无

发生频率

用户使用时发生一次

其他

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

内容二:功能设计

  1. 可以输入算式数目
  2. 算式结果不可出现小数、负数
  3. 生成计算结果正确的三到五个0~100之间正整数的四则运算算式

内容三:设计思路及其结构

·首先这个问题我首先想到的是,可以用栈或者递归来完成,我太菜了,想不出附加题,就用了递归。

·观察算式结构,要想使算式中不出现括号,比较简单的一种方法就是把算式拆分成两部分

 

 

·首先构造两个算法,分别生成第一部分的string和在第一部分的基础上逐步拼接第二部分的加减法。同时这两个算法要返回生成计算的结果值。在顾思宇同学的帮助下,我把结果值分别导入了指针为ans[ ]和newAnswer[ ]里面,就可以在不返回数值的同时得到我们需要的结果了。

第一部分:

 1 public String addNum(int a,int b,String aa, int []ans,int d) {    
 2         int c;
 3         if(a<b) {
 4             c = b-a;
 5             aa = a+" "+"+"+" "+c; 
 6             d = b ;
 7             return aa;
 8         }else if(a>b) {
 9             c = a - b;
10             aa =  b+" "+"+"+" "+c;
11             d = a;
12             return aa;
13         }else {
14             aa = a+" "+"+"+" "+0;
15             d = a;
16             return aa;
17         }
18     }
19     public String minNum(int a,int b,String aa, int []ans,int d) {
20         
21         int c;
22         if(a<b) {
23             c = b-a;
24             aa = a+" "+"-"+" "+c; 
25             d = b;
26             return aa;
27         }else if(a>b) {
28             c = b-a;
29             aa =  b+" "+"-"+" "+c;
30             d = a ;
31             return aa;
32         }else {
33             aa = a+" "+"-"+" "+b;
34             d = 0;
35             return aa;
36         }
37     }
38     public String multNum(int a,int b,String aa, int []ans,int d) {
39         
40         int c = a*b ;
41         d = c;
42         aa = a+" "+"*"+" "+b;
43         return aa;
44     }
45     public String divNum(int a,int b,String aa, int []ans,int d) {
46         
47         int c = a*b;
48         if(c<=100) {
49             aa = c+" "+"%"+" "+a;
50             d = b;
51             return aa;
52         }else {
53             return divNum(a,b,aa, ans, d);
54         }
55         
56     }

其中大家可能都有一个问题,如何避免除法中的分数和减法中的负数。我的思路是,除法生成时,先随机生成一个正整数作为算式的结果,再令这个结果乘一个正整数,得到算式的除数,这样避免了小数的出现;减法中,随机生成的两个数在进行减法时,进行比较,分出减数和被减数就好啦。

第二部分:

1     public String add(int a,int b,String equ,String bb,int[] newAnswer,int c) {
2         c = a+b;
3         bb = equ+" "+"+"+" "+ b;
4         return bb;
5     }
6     public String min(int a,int b,String equ,String bb,int[] newAnswer,int c) {
7         bb = equ+" "+"-"+" "+ b;
8         return bb;
9     }

因为只需要编写加减两部分,就轻松很多。

·最后在返回算式结果时,在新的string中加上=answer(导出的结果值)就好。

·方法构建完了,就要调用它,调用就很难,因为要递归,就感觉很复杂。

调用方法时我们要考虑:

1.需要的重要变量:符号数:numOfSign;  符号选择:(因为用了两个变量,我定义了两个变量来生成随机数)ran、ran0;两个随机正整数:a 、b;和两个数组用于接收结果值:Answer[ ]、newAnswer[ ]。

2.然后就是递归方法了,首先分了三种情况:两个符号、三个符号、四个符号;然后我们得把第二种方法套进去

  1 if(numOfSign == 2) {
  2             int c = (int)(Math.random()*100);
  3             int ran0 = (int)(Math.random()*2);
  4             if(ran == 0) {
  5                 addNum(a, b,equations,Answer, 0);
  6                 int ans = Answer[0];
  7                 if(ran0 == 0) {
  8                     add(ans, c, equations, equations0,newAnswer,0);
  9                     equations = equations0;
 10                 }else{
 11                     min(ans, c, equations, equations0,newAnswer,0);
 12                     equations = equations0;
 13                 }
 14             }else if (ran == 1) {
 15                 minNum(a, b, equations,Answer, 0);
 16                 int ans = Answer[0];
 17                 if(ran0 == 0) {
 18                     add(ans, c, equations, equations0,newAnswer,0);
 19                     equations = equations0;
 20                 }else{
 21                     min(ans, c, equations, equations0,newAnswer,0);
 22                     equations = equations0;
 23                     }
 24             }else if (ran == 2) {
 25                 multNum(a, b,equations,Answer, 0);
 26                 int ans = Answer[0];
 27                 if(ran0 == 0) {
 28                     add(ans, c, equations, equations0,newAnswer,0);
 29                     equations = equations0;
 30                 }else{
 31                     min(ans, c, equations, equations0,newAnswer,0);
 32                     equations = equations0;
 33                 }
 34             }else{
 35                 divNum(a, b,equations,Answer, 0);
 36                 int ans = Answer[0];
 37                 if(ran0 == 0) {
 38                     add(ans, c, equations, equations0,newAnswer,0);
 39                     equations = equations0;
 40                 }else{
 41                     min(ans, c, equations, equations0,newAnswer,0);
 42                     equations = equations0;
 43                 }
 44             }
 45             int newans = newAnswer[0];
 46             cc = equations+" "+"="+" "+newans;
 47             return cc;
 48         }
 49             //there are two signs above
 50             else if(numOfSign == 3) {
 51                 int c = (int)(Math.random()*100);
 52                 if(ran == 0) {
 53                     addNum(a, b, equations,Answer, 0);
 54                     int q;
 55                     for(q = 0;q<2;q++) {
 56                         int ran0 = (int)(Math.random()*2);
 57                         int ans = Answer[0];
 58                         if(ran0 == 0) {
 59                             add(ans, c, equations, equations0,newAnswer,0);
 60                             equations = equations0;
 61                         }else{
 62                             min(ans, c, equations, equations0,newAnswer,0);
 63                             equations = equations0;
 64                         }
 65                     }
 66 
 67                 }else if (ran == 1) {
 68                     minNum(a, b, equations,Answer, 0);
 69                     int q;
 70                     for(q = 0;q<2;q++) {
 71                         int ran0 = (int)(Math.random()*2);
 72                         int ans = Answer[0];
 73                         if(ran0 == 0) {
 74                             add(ans, c, equations, equations0,newAnswer,0);
 75                             equations = equations0;
 76                         }else{
 77                             min(ans, c, equations, equations0,newAnswer,0);
 78                             equations = equations0;
 79                         }
 80                     }
 81                 }else if (ran == 2) {
 82                     multNum(a, b,equations,Answer, 0);
 83                     int q;
 84                     for(q = 0;q<2;q++) {
 85                         int ran0 = (int)(Math.random()*2);
 86                         int ans = Answer[0];
 87                         if(ran0 == 0) {
 88                             add(ans, c, equations, equations0,newAnswer,0);
 89                             equations = equations0;
 90                         }else{
 91                             min(ans, c, equations, equations0,newAnswer,0);
 92                             equations = equations0;
 93                         }
 94                     }
 95                 }else{
 96                     divNum(a, b,equations,Answer, 0);
 97                     int q;
 98                     for(q = 0;q<2;q++) {
 99                         int ran0 = (int)(Math.random()*2);
100                         int ans = Answer[0];
101                         if(ran0 == 0) {
102                             add(ans, c, equations, equations0,newAnswer,0);
103                             equations = equations0;
104                         }else{
105                             min(ans, c, equations, equations0,newAnswer,0);
106                             equations = equations0;
107                         }
108                     }
109                 }
110                 int newans = newAnswer[0];
111                 cc = equations+" "+"="+" "+newans;
112                 return cc;
113             }
114             //there are three signs above
115                 else{
116                     int c = (int)(Math.random()*100);
117                     if(ran == 0) {
118                         addNum(a, b, equations,Answer, 0);
119                         int q;
120                         for(q = 0;q<3;q++) {
121                             int ran0 = (int)(Math.random()*2);
122                             int ans = Answer[0];
123                             if(ran0 == 0) {
124                                 add(ans, c, equations, equations0,newAnswer,0);
125                                 equations = equations0;
126                             }else{
127                                 min(ans, c, equations, equations0,newAnswer,0);
128                                 equations = equations0;
129                             }
130                         }
131 
132                     }else if (ran == 1) {
133                         minNum(a, b, equations,Answer, 0);
134                         int q;
135                         for(q = 0;q<3;q++) {
136                             int ran0 = (int)(Math.random()*2);
137                             int ans = Answer[0];
138                             if(ran0 == 0) {
139                                 add(ans, c, equations, equations0,newAnswer,0);
140                                 equations = equations0;
141                             }else{
142                                 min(ans, c, equations, equations0,newAnswer,0);
143                                 equations = equations0;
144                             }
145                         }
146                     }else if (ran == 2) {
147                         multNum(a, b,equations,Answer, 0);
148                         int q;
149                         for(q = 0;q<3;q++) {
150                             int ran0 = (int)(Math.random()*2);
151                             int ans = Answer[0];
152                             if(ran0 == 0) {
153                                 add(ans, c, equations, equations0,newAnswer,0);
154                                 equations = equations0;
155                             }else{
156                                 min(ans, c, equations, equations0,newAnswer,0);
157                                 equations = equations0;
158                             }
159                         }
160                     }else{
161                         divNum(a, b,equations,Answer, 0);
162                         int q;
163                         for(q = 0;q<3;q++) {
164                             int ran0 = (int)(Math.random()*2);
165                             int ans = Answer[0];
166                             if(ran0 == 0) {
167                                 add(ans, c, equations, equations0,newAnswer,0);
168                                 equations = equations0;
169                             }else{
170                                 min(ans, c, equations, equations0,newAnswer,0);
171                                 equations = equations0;
172                             }
173                         }
174                     }
175                     int newans = newAnswer[0];
176                     cc = equations+" "+"="+" "+newans;
177                     return cc;
178                 }
179             //there are four signs above
180     

·最后只需要构造main函数,让用户输入所需题目数,然后用for循环来调用上面的方法。

第四部分:算法讲解

我的算法很烂啊,我感觉没啥说的,但是最近看博客大家提交的都好强啊,我会继续关注大佬们的更新动态的,fighting!

如果一定要说,我感觉递归是个好东西,虽然用不利索。。。。。。

第五部分:测试运行

从周五调到现在了,还是有bug(沮丧.jpg)还没修完,下周接着修,有时候有行,有时候就出问题了,就各种null,应该是某些方法出问题了,目前这样

 

 

 

第六部分:我感觉我除法这里弄的挺好的,这样做就没有分数,但是如果叫我做分数出来,我就不会弄了

 1 public String divNum(int a,int b,String aa, int []ans,int d) {
 2 
 3         int c = a*b;
 4         if(c<=100) {
 5             aa = c+" "+"%"+" "+a;
 6             d = b;
 7             return aa;
 8         }else {
 9             return divNum(a,b,aa, ans, d);
10         }
11 
12     }

第七部分:总结

模块化很重要的,提前设计程序,把大程序拆成不同功能,面向不同功能的编程可以少走弯路节省很多时间,尤其是我这样的菜菜,做到模块化可以省力,不会很迷茫。模块化最重要的还是:小块修改不会牵扯大块,就很方便了。

第八部分:PSP

PSP2.1

任务内容

计划共完成需要的时间(min)

实际完成需要的时间(min)

Planning

计划

40

20

·        Estimate

·   估计这个任务需要多少时间,并规划大致工作步骤

40

20

Development

开发

610

1230

·        Analysis

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

20

10

·        Design Spec

·         生成设计文档

20

20

·        Design Review

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

10

10

·        Coding Standard

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

10

10

·        Design

·         具体设计

120

150

·        Coding

·         具体编码

180

600

·        Code Review

·         代码复审

60

120

·        Test

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

120

210(目前)

Reporting

报告

 

 

·         Test Report

·         测试报告

50

80

·         Size Measurement

·         计算工作量

10

15

·         Postmortem & Process Improvement Plan

·         事后总结, 并提出过程改进计划

10

5

上面只是代码部分的PSP。。。。这周末研究coding.net研究到胃疼。最后还是王超学姐帮我找到了问题,总算把git给弄好了,公钥给生成了,可惜我还是不是很懂git的代码,照着教程码是行,但看代码看不懂,不太懂怎么用命令行往移动仓库移东西,还得接着研究呀。

 

posted @ 2018-03-25 21:32  Buza  阅读(155)  评论(2编辑  收藏  举报