首页 > 技术文章 > 软件工程个人作业02

lk0823 2016-03-19 14:20 原文

 

四则运算2

  • 设计思想

由于需要控制的种类比较多所以采用小模块构成大模块的方式

1、是否有乘除法

    将加减从四则运算中拿出来,形成加减和四则两种运算方式

2、数值范围

    将上次的在程序中直接规定的0-99变成由用户输入的g,然后读取,形成全局变量。

3、加减法有无负数

    将随机到的题目进行计算判断,结果小于零则重新生成。

4、除法有无余数

    ①能除尽

    ②不能除尽,可以将其用+,-,*进行替换,比较简便。

    ③对于分数而言,控制分母位置的数不为零;若出现两个分数相除,则继续控制被除数的分子也不为零。

5、是否有括号(最多支持十个数的计算)

    ①用这样的函数来控制数量random.nextInt(9)+2。

    ②在符号数组中加入‘(’,形成随机数栈和运算符栈,在运算符中随机出现,若出现‘(’则在其前面添加非括运算符并记录‘(’的数量,在最后添加等量的‘)’。

6、可订制(数量/打印方式)

    ①数量:将上次的在程序中直接规定的30变成由用户输入的h,然后读取,形成全局变量。

    ②打印方式:设置全局变量r,由用户输入每行打印的个数,在每个小的模块中加入if语句来实现。

7、题目避免重复

    对生成的题目与前面的题目相同位置的数与运算符进行比对,若相同则重新生成。

  • 程序代码
import java.util.*;

public class Aritmetic1 {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入要生成多少道四则运算题目?");
        int h = input.nextInt();
        String [] arr1 = new String[h];
        System.out.println("请输入随机数可产生的最大值:");
        int g = input.nextInt();
        System.out.println("请输入定制要求(每行题数):");
        int r = input.nextInt();
        System.out.println("请选择要求:");
        System.out.println("1加减法运算");
        System.out.println("2四则运算");
        Random random = new Random();
        char arr[] = {'+','-','*','/','('};
        
        int a=input.nextInt();
        switch(a){
           case 1:{
              System.out.println("请选择数字类型:");
              System.out.println("1整数");
              System.out.println("2分数");
              int m = input.nextInt();
              switch(m)
              {
              case 1:
              {
                  System.out.println("有无负数?");
                  System.out.println("1没有负数");
                  System.out.println("2有负数");
                  int f = input.nextInt(); 
                  int i;
                  switch(f)
                  {
                     case 1:
                     {
                         for(i=0;i<h;i++)
                         {
                             if(i==r||i%r==0)
                             {
                                 System.out.println();
                             }
                              String str = random.nextInt(g) + " " + arr[random.nextInt(2)] + " " + random.nextInt(g) + "="+"     ";
                              System.out.print(str);
                             
                         }
                         break;
                     }
                     
                     case 2:
                     {
                         for(i=0;i<h;i++)
                         {
                             if(i==r||i%r==0)
                             {
                                 System.out.println();
                             }
                             String str = (-random.nextInt()%g) + " " + arr[random.nextInt(2)] + " " + (-random.nextInt()%g) + "="+"     ";
                             System.out.print(str);
                         }
                         break;
                     }
                     
                     default:
                     {
                         System.out.println("输入错误,请输入1或2");
                     }
                     break;
                  }//switch(f)
                  break;
              }//case1内
              
              case 2:
              {
                  System.out.println("有无负数?");
                  System.out.println("1没有负数");
                  System.out.println("2有负数");
                     int f=input.nextInt();
                     switch(f)
                     {
                     case 1:
                     {
                         for(int i=0;i<h;i++)
                         {
                             if(i==r||i%r==0)
                             {
                                 System.out.println();
                             }
                            System.out.print(random.nextInt(g)+"/"+random.nextInt(g)+1+" "+arr[random.nextInt(2)]+" "+random.nextInt(g)+"/"+random.nextInt(g)+1+"="+"     ");
                         }
                         break;
                     }
                     case 2:
                     {
                         for(int i=0;i<h;i++)
                         {
                             if(i==r||i%r==0)
                             {
                                 System.out.println();
                             }
                            System.out.print(-random.nextInt()%g+"/"+random.nextInt(g)+1+" "+arr[random.nextInt(2)]+" "+-random.nextInt()%g+"/"+random.nextInt(g)+1+"="+"     ");
                         }
                         break;
                     }
                     default:
                         System.out.println("输入错误,请输入1或2");
                         break;
                     }
                    break;
              }//case2内
              }//switch(m)
            break;
           }//case1外
           
           case 2:
           {
              System.out.println("请选择数字类型:");
              System.out.println("1整数");
              System.out.println("2分数");
              int m = input.nextInt();
              switch(m)
              {
              case 1:
              {
                  System.out.println("请选择要求:");
                  System.out.println("1正整数无余数四则运算");
                  System.out.println("2可负整数无余数四则运算");
                  System.out.println("3正整数可有余数四则运算");
                  System.out.println("4可负整数可有余数四则运算");
                  System.out.println("5多数带括号运算");
                  int f =input.nextInt();
                  switch(f)
                  {
                  case 1:
                  {
                         for(int i=0;i<h;i++)
                         {
                             
                             int u=random.nextInt(g);
                             int v=random.nextInt(g)+1;
                             char w=arr[random.nextInt(4)];
                             if(i==r||i%r==0)
                           {
                               System.out.println();
                           }
                             if(u%v==0 && w=='/')
                             {
                                 System.out.print(u+" "+w+" "+v+"="+"     ");
                             }
                             else
                             {
                                 System.out.print(u+" "+arr[random.nextInt(3)]+" "+v+"="+"     ");
                             }
                         }
                         break;
                  }
                  
                  case 2:
                     {
                         for(int i=0;i<h;i++)
                         {
                             int u=-random.nextInt()%g;
                             int v=-random.nextInt()%g;
                             char w=arr[random.nextInt(4)];
                             if(i==r||i%r==0)
                             {
                                 System.out.println();
                             }
                             if(v!=0 && u%v==0 && w=='/' )
                                 System.out.print(u+" "+w+" "+v+"="+"     ");
                            else
                                System.out.print(u+" "+arr[random.nextInt(3)]+" "+v+"="+"     ");
                         }
                         break;
                     }
                  case 3:
                     {
                         for(int i=0;i<h;i++)
                         {
                             int u=random.nextInt(g);
                             int v=random.nextInt(g)+1;
                             char w=arr[random.nextInt(4)];
                             if(i==r||i%r==0)
                             {
                                 System.out.println();
                             }
                             System.out.print(u+" "+w+" "+v+"="+"     ");
                         }
                         break;
                     }
                  case 4:
                     {
                         for(int i=0;i<h;i++)
                         {
                         int u=-random.nextInt()%g;
                         int v=-random.nextInt()%g;
                         char w=arr[random.nextInt(4)];
                         if(i==r||i%r==0)
                         {
                             System.out.println();
                         }
                         System.out.print(u+" "+w+" "+v+"="+"     ");
                         }
                         break;
                     }
                  case 5:
                  {
                      for(int i=0;i<h;i++)
                      {
                          int n =random.nextInt(9)+2;
                          Stack<Integer> S1 = new Stack<Integer>();
                          Stack<Character> S2 = new Stack<Character>();
                          for(int j=0;j<n+1;j++)
                          {
                              char w=' ';
                              int e = random.nextInt()%g;
                              if(w=='/'&&e==0)
                              {
                                  e=random.nextInt(g)+1;
                              }
                              w=arr[random.nextInt(5)];
                              S1.push(e);
                              S2.push(w);
                          }
                          
                          int k=0;
                          for(int j=0;j<n;j++)
                          {
                              char q =S2.pop();
                              if(q=='(')
                              {
                                  if(j>n-2)
                                  {
                                      System.out.print(S1.pop()+" "+arr[random.nextInt(4)]);
                                  }
                                  else
                                  {
                                      System.out.print(S1.pop()+" "+arr[random.nextInt(4)]+" "+q);
                                      k++;
                                  }
                              }
                              else
                              {
                                  System.out.print(S1.pop()+" "+q);
                              }
                          }
                          if(k==0)
                          {
                              System.out.println(random.nextInt()%g+"=");
                          }
                          else if(k==1)
                          {
                              System.out.println(random.nextInt()%g+")=");
                          }
                          else if(k==2)
                          {
                              System.out.println(random.nextInt()%g+"))=");
                          }
                          else if(k==3)
                          {
                              System.out.println(random.nextInt()%g+")))=");
                          }
                          else
                          {
                              System.out.println(random.nextInt()%g+"))))=");
                          }
                      }
                      break;
                  }
                     default:
                     {
                         System.out.println("输入错误,请输入1-5");
                     }
                     break;
                  }//switch(f)
                  break;
              }//case1内
              
              case 2:
              {
                    System.out.println("请选择要求:");
                    System.out.println("1正分数四则运算!");
                    System.out.println("2可负分数四则运算!");
                    int f=input.nextInt();
                     switch(f)
                     {
                     case 1:
                     {
                         for(int i=0;i<h;i++)
                         {
                             int u=random.nextInt(g);
                             int v=random.nextInt(g)+1;
                             int x=random.nextInt(g);
                             int y=random.nextInt(g)+1;
                             char w=arr[random.nextInt(4)];
                             if(i==r||i%r==0)
                             {
                                 System.out.println();
                             }
                            System.out.print(u+"/"+v+" "+w+" "+x+"/"+y+"="+"     ");
                         }
                         break;
                     }
                     case 2:
                     {
                         for(int i=0;i<h;i++)
                         {
                             int u=-random.nextInt()%g;
                             int v=random.nextInt(g)+1;
                             int x=-random.nextInt()%g;
                             int y=random.nextInt(g)+1;
                             char w=arr[random.nextInt(4)];
                             if(i==r||i%r==0)
                             {
                                 System.out.println();
                             }
                             if(x!=0 && w=='/' )
                                 System.out.print(u+"/"+v+" "+w+" "+x+"/"+y+"="+"     ");
                            else 
                                System.out.print(u+"/"+v+" "+arr[random.nextInt(3)]+" "+x+"/"+y+"="+"     ");
                         }
                         break;
                     }
                     default:
                         System.out.print("输入的数有误,请输入1或2");
                     }
                     break;
                }//case2内
              }
              }//switch(m)
           }//case2外
        }//switch(a)

    }//起始
  • 运行结果截图

PSP0级记录表:

  • 项目计划日志

 周活动总结表

                                                             姓名:赵东睿                                                                                                          日期:16/3/19

日期   \  任务 听课 编写程序 阅读书籍     日总计
周日            
周一 100   30     130
周二     30     30
周三     60     60
周四   200       200
周五   60+120       180
周六   120       120
周总计 100 500 120     720

                                                             阶段时间和效率                                                                                                               周数:第3周

总计 100 500 120     720
平均 100 500 120     720
最大 100 500 120     720
最小 100 500 120     720

                                                             以前各周的累计时间

总计 100 500 120     720
平均 100 500 120     720
最大 100 500 120     720
最小 100 500 120     720

时间记录日志

                                                             学生:赵东睿                                                                                                               日期:16/3/19

                                                             教师:王建民                                                                                                          课程:软件工程概论

日期 开始时间 结束时间 中断时间 净时间 活动 备注
3/14 8:00 9:50 10 100 上课 课间休息
  13:30 14:00   30 阅读书籍  
3/15 15:00 15:30   30 阅读书籍  
3/16 13:00 14:20 20 60 阅读书籍 休息
3/17 16:30 21:30 100 200 编写代码 吃饭,查资料
3/18 12:30 13:30   60 编写代码  
  16:30 18:30   120 编写代码  
3/19 9:30 11:30   120 完善代码  
             

缺陷记录日志

 

日期 编号 类型 引入阶段 排除阶段 修复时间 修复缺陷
3/17 1   运行 引入输入流 1min  
没有写import java.util.*;
3/18 2   编译 运行 2min  
对每行题目个数的限制if语句加在输出之前
3/18 3   编译 运行 10min  
在case中忘记break;导致会在运行时多弹出一次上一步。
3/18 4   编译 运行 20min  
解决分数四则运算u/v / x/y中v,x,y为零的错误
             

推荐阅读