zoukankan      html  css  js  c++  java
  • 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的代码,照着教程码是行,但看代码看不懂,不太懂怎么用命令行往移动仓库移东西,还得接着研究呀。

  • 相关阅读:
    犀牛书学习笔记(2):对象和数组
    犀牛书学习笔记(1):语法结构、数据类型和值、表达式和运算符
    小学了一下css hack
    git学习系列--六分之一
    稍览了一下CommonJS
    意识流_六分之一
    两升的心思系列之-----粒子的预备
    mybatis_延迟加载
    mybatis_动态SQL
    mybatis_mapper动态代理
  • 原文地址:https://www.cnblogs.com/zhh2016/p/8647081.html
Copyright © 2011-2022 走看看