码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-03-26 00:42:24      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:修改   简单   调试过程   乘号   dom   stand   缺点   img   导致   

  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 +小学四则运算联系项目报告

标签:修改   简单   调试过程   乘号   dom   stand   缺点   img   导致   

原文地址:https://www.cnblogs.com/wanggg123/p/8647545.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!