2016012045 +小学四则运算联系项目报告

Posted wanggg123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2016012045 +小学四则运算联系项目报告相关的知识,希望对你有一定的参考价值。

  2016012045 +x小学四则运算联系项目报告

代码仓库地址:https://git.coding.net/Enther/operation.git

一.需求分析。

此项目主要是为面向小学生的小学数学四则运算练习所用,所以归纳出以下几点要求:

(1)     对于每个数而言不能过大,且其中不涉及小数与负数,即仅考虑100内整数形式的运算。

(2)     题目中最少包含两个运算符且保证不一样,且涉及加减乘除。

(3)     程序中需要输入参数n作为随机产生题目数量。

二.功能设计。

此项目目前仅完成了基本功能,即

  1. 对参数合法性的判断。
  2. 自动生成n个运算时且其中运算符不同。
  3. 保存在指定目录下。

三.设计实现。

整体思路:本来试图运用建两个栈将数字与操作符分开的方式,利用场调度算法和逆波兰算法实现中缀便后缀计算后缀的情况。但在调试过程中出现bug。目前还需要进行改进。

此次作业仅仅实现三个运算数的情况,通过将不同的两个运算符列举,进而实现需要功能。但在真正操作中发现,这种方法的缺点在于需要考虑很多不同情况之下可能的结果,虽然现在在实现基本功能上现在还没有体现出来,但在增加操作数后,需要考虑的问题会成倍增加

设计函数:answer函数用来调用参数;

Calculate函数用来计算和列举方法;

技术分享图片

 

四,代码展示。

这段代码用于将三个操作数的不同运算状况分类计算:
 
    public static void calculate(){      
    String[] ope = {"+","-","*","/"};
    int x = (int) (Math.random() *100);// 产生100以内的随机数
    int y = (int) (Math.random() *100);
    int a = (int) (Math.random()*4);
    int sum,p1,p11,p2,p3;{
    switch(a){
    case 0://第一个运算符为加号
         String[] ope1 = {"-","*","÷"};
         int z = (int) (Math.random() *100);
         int b=(int) (Math.random()*3);
          String q = x + ope[a] + y;
         if (b==0){//先加后减
             p1=x+y;
                if(p1>=z){
                    q=q+ope1[b]+z;
                    sum=x+y-z;
                    q=q+"="+sum;
                    answer(q);
                   return ;
                }else{
                   answer("");
                   return ;
                }
         }
                else if(b==1){//第一个运算符为加号,第二个运算符为乘号  先乘后加
                    p1=y*z;
                    sum=x+p1;
                    q=q+"="+sum;
                    answer (q);
                    return;
                  }
                else{ //第一个运算符为加号,第二个运算符为除号  保证整除
                   z = (int) (Math.random() * 10) + 1;
                   y= (int) (Math.random() * 8) *z ;
                   if(z!=0&&y>z&&y%z==0){
                   p11=y/z;
                   sum=x+p11;
                   q=q+"="+sum;     
                   answer (q);
                   return;
                }else{
                    answer(q);
                }
                }
    case 1:// 如果是“-”,保证a比b大,避免出现负数
        if (x < y) {
            int temp = x;
            x = y;
            y = temp;
        }
         q = x + ope[a] + y;
         String[] ope2 = { "+","*", "÷" };
         int c = (int) (Math.random()*3);
         int z1=(int)(Math.random()*100);
         if (c==0){
              sum=x-y;
             q=q+ope2[c]+z1;
             sum=sum+z1;
             answer (q);
             return ;
             
         }
         else if(c==1){
            p2=y*z1;
             if(x>=p2){
           q=q+ ope2[c]+z1;
           sum=x-p2;
           answer(q);
             return ;
         }else{
             answer(q);
             return ;
         }
         }
    case 2://第一个运算符为乘号
        String[] ope3 = { "+","-", "÷" }; 
        int d = (int) (Math.random()*3);
         int z2=(int)(Math.random()*100);
          q = x + ope[a] + y;
         if(d==0){
            sum=x*y+z2;
         }else if(d==1){
             if(x*y>=z2)
             {
                sum=x*y-z2;
                q=q+ ope3[d]+z2;
                q=q+"="+sum;
             }
             else{
                 answer(q);
                 return ;
                 }
         }
             else{
                 p3=x*y;
                 z2 = (int) (Math.random() * 10) + 1;
                  p3= (int) (Math.random() * 8) *z2 ;
                  sum=p3/z2;
                  q=q+ ope3[d]+z2;
                  q=q+"="+sum;
                 }
    case 3://第一个运算符为除数
         y = (int) (Math.random() * 10) + 1;
         x = (int) (Math.random() * 8) * y;
         String[] ope4= {"+","-","*"};
          q = x + ope[a] + y;
         int e= (int) (Math.random()*3);
         int z3= (int) (Math.random()*100);
         if(e==0){
            sum=x/y+z3;
            q=q+ope4[e]+z3;
            q=q+"="+sum;
         }
         else if(e==1){
             if(x/y>=z3){
                 sum=x/y-z3;
                 q=q+ope4[e]+z3;
                 q=q+"="+sum;
         }
             else{
                 answer(q);
                 }
         }
             else{
                 sum=x/y*z3;
                 q=q+ope4[e]+z3;
                 q=q+"="+sum;
                 answer(q);
             }
                   }
              }
    }

result.txt 的截图

技术分享图片

 

技术分享图片

 

五,PSP展示。

PSP2.1

任务内容

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

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

Planning

计划

8

10

·        Estimate

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

8

6

Development

开发

1000

2000

·        Analysis

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

20

30

·        Design Spec

·         生成设计文档

10

10

·        Design Review

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

5

5

·        Coding Standard

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

3

5

·        Design

·         具体设计

10

20

·        Coding

·         具体编码

800

1600

·        Code Review

·         代码复审

10

40

·        Test

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

15

40

Reporting

报告

10

30

·         Test Report

·         测试报告

5

10

·         Size Measurement

·         计算工作量

1

1

·         Postmortem & Process Improvement Plan

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

5

15

 


六.不足与改进。
目前的代码还很简单,甚至在算法方面还欠缺不少。由于对Java语言的不熟悉导致花费较长时间温习。此次本想运用的建栈由于考虑不全导致现在还有许多bug。这次提交的作业运用的方法比较简单,但不适用于太多操作符和运算数的情况。Java需要加强,代码能力也需要继续磨砺。




以上是关于2016012045 +小学四则运算联系项目报告的主要内容,如果未能解决你的问题,请参考以下文章

201571030322/201571030319《小学生四则运算软件需求说明结对项目报告》

201571030318/201574010343《小学四则运算练习软件软件需求说明》结对项目报告

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

2016012002+小学四则运算练习软件项目报告

201571030133/201571030102《小学四则运算练习软件软件需求说明》结对项目报告

201571030315201571030303《小学生四则运算软件需求说明结对项目报告》