• 软件工程个人作业02


      设计思想:出题的方法已经在上周实现,虽然感觉有些不完善,这周在好好的重写一次,又加上了控制有无乘除法、有无负数、范围、括号和分数的计算,感觉非常困难实现这些功能,括号的设计和分数的计算有难度。

    package 四则运算;
    import java.util.*;
    public class suanshi {
        public static void main(String args[]){
             System.out.println("请输入要生成的数学题的数目:" );
            
            Scanner scanner = new Scanner(System.in);
            int n = scanner.nextInt();
            for(int i=0;i<n;i++)
            {
            //随机生成一个代表分数运算还是简单运算的数字
            int temp = (int)(Math.random()*2)+1;
            //生成随机数
            int firstNum = (int)(Math.random()*10);
            int secondNum = (int)(Math.random()*10);
            int thirdNum = (int)(Math.random()*10);
            int fourthNum = (int)(Math.random()*10);
            //生成随机的1-4来代表加减乘除
            int index = 1+(int)(Math.random()*4);
            
            
            
                
            if(temp == 1)    
                //编辑
                {if(index == 1)
                    {
                    System.out.println((i+1)+"."+" "+firstNum+ "+" +secondNum+ "=");
                    Scanner in1 = new Scanner(System.in);
                    int a = in1.nextInt();
                    if(a==firstNum+secondNum)
                        System.out.println("回答正确");
                    else
                        System.out.println("回答错误,正确答案为:"+(firstNum+secondNum));
                    }
                if(index == 2)
                    {
                    System.out.println((i+1)+"."+" "+firstNum+ "-" +secondNum+ "=");
                    Scanner in2 = new Scanner(System.in);
                    int b = in2.nextInt();
                    if(b==firstNum-secondNum)
                        System.out.println("回答正确");
                    else
                        System.out.println("回答错误,正确答案为:"+(firstNum-secondNum));
                    }
                if(index == 3)
                {
                    System.out.println((i+1)+"."+" "+firstNum+ "*" +secondNum+ "=");
                    Scanner in3 = new Scanner(System.in);
                    int a = in3.nextInt();
                    if(a==firstNum*secondNum)
                        System.out.println("回答正确");
                    else
                        System.out.println("回答错误,正确答案为:"+(firstNum*secondNum));
                }
                if(index == 4)
                {
                    
                     if(secondNum!=0)
                        System.out.println((i+1)+"."+" "+firstNum+ "/" +secondNum+ "=");
                    
                    Scanner in4 = new Scanner(System.in);
                    double a = in4.nextDouble();
                    if(a==firstNum/secondNum)
                        System.out.println("回答正确");
                    else
                        System.out.println("回答错误,正确答案为:"+(firstNum/secondNum));
                
                }
                }
                //分数的加减运算
                if(temp==2)
                {
                    if(index==1)
                    {
                        System.out.println((i+1)+". "+firstNum+"/"+secondNum+" + "+thirdNum+"/"+fourthNum);
                        int a = min(secondNum,fourthNum);//分母的最小公倍数
                        int b = a/secondNum;//通分后第一个式子要乘的数
                        int c = a/fourthNum;//通分后第二个式子的要乘的数
                        int m = firstNum*b;//通分后第一个式子的分子
                        int d = thirdNum*c;//同分后第二个式子的分子
                        int w = m+d;//相加后的分子;
                        int f = max(a,w);
                        double g = (w/f)/(a/f);
                        Scanner in5 = new Scanner(System.in);
                        double h = in5.nextDouble();
                        if(h==g)
                            System.out.println("回答完全正确");
                        else
                            System.out.println("回答错误,正确答案为:"+(w/f)+"/"+(a/f));
                    }
                    if(index == 2)
                    {
                        System.out.println((i+1)+". "+firstNum+"/"+secondNum+" - "+thirdNum+"/"+fourthNum);
                        int a = min(secondNum,fourthNum);
                        int b = a/secondNum;//通分后第一个式子要乘的数
                        int c = a/fourthNum;//通分后第二个式子的要乘的数
                        int m = firstNum*b;//通分后第一个式子的分子
                        int d = thirdNum*c;//同分后第二个式子的分子
                        int fenJian = m-d;//相减后的分子
                        int f = max(a,fenJian);
                        double g = (fenJian/f)/(a/f);
                        Scanner in6 = new Scanner(System.in);
                        double h = in6.nextDouble();
                        if(h==g)
                            System.out.println("回答完全正确");
                        else
                            System.out.println("回答错误,正确答案为:"+(fenJian/f)+"/"+(a/f));
                    }
                    if(index == 3)
                    {
                        System.out.println((i+1)+". "+firstNum+"/"+secondNum+" * "+thirdNum+"/"+fourthNum);
                        int Sfenzi = firstNum*thirdNum;//相乘后的分子
                        int Sfenmu = secondNum*fourthNum;//相乘后的分子
                        int c = max(Sfenzi,Sfenmu);//分子和分母的最大公约数
                        int Efenzi = Sfenzi/c;
                        int Efenmu = Sfenmu/c;
                        double de = Efenzi/Efenmu;//约分后的得数
                        Scanner in7 = new Scanner(System.in);
                        double h = in7.nextDouble();
                        if(h==de)
                            System.out.println("回答正确");
                        else
                            System.out.println("回答错误,正确答案为:"+Efenzi+"/"+Efenmu);
                    }
                    if(index == 4)
                    {
                        //分数的除法就是乘以第二个数的倒数
                        if(secondNum!=0&&fourthNum!=0&&thirdNum/fourthNum!=0)
                            System.out.println((i+1)+"."+" "+firstNum+ "/" +secondNum+ " / "+thirdNum+"/"+fourthNum);
                        
                        else
                            {
                            System.out.println(30 + "/" + 15 + "=?");
                            }
                        int Sfenzi = firstNum*fourthNum;//分子
                        int Sfenmu = secondNum*thirdNum;//分母
                        int c = max(Sfenzi,Sfenmu);
                        int Efenzi = Sfenzi/c;
                        int Efenmu = Sfenmu/c;
                        double de = Efenzi/Efenmu;
                        Scanner in8 = new Scanner(System.in);
                        double h = in8.nextDouble();
                        if(h==de)
                            System.out.println("回答正确");
                        else
                            System.out.println("回答错误,正确答案为:"+Efenzi+"/"+Efenmu);
                    }
                    
                }
                }
            
            
    }
    
        
    
    
    
    
    //求最大公约数与最小公倍数
    
      
      public static int max(int a ,int b)
      {
          //循环法求两个数的最大公约数
          
          //保证第一个参数大于第二个参数
          if(a<b)
          {
              int temp;
              temp=a;
              a=b;
              b=temp;
          }
          while(a%b!=0)   //在余数不为零时循环
          {
              int temp=a%b;
              a=b;
              b=temp;
          }
          return b;  //返回最大公约数
      }
      
      public static int min(int a,int b)
      {
          //求最小公倍数
          return a*b/max(a,b);
      }
      
    }

    程序截图:

    程序总结:伴随着功能的增加,程序的编写变得更加的困难,这就需要更加的耐心去做这个东西,需要我更加清晰的思路来解决问题。采取一个一个的小模将程序分解开来,一个功能的来实现,会让自己的思路代码都显得更加的清晰。

    项目计划日志:

      

     

    日期

    任务

    听课

    编写程序

    阅读课本

    准备考试

    日总计

    周一

    60

    60

     

     

    120

    周二

     

     

     

     

     

    周三

     

    180

     

     

    180

    周四

     

    120

     

     

    120

    周五

     

     

     

     

     

    周总计

    60

    360

     

     

    420

    时间记录日志:

      

    日期

    开始时间

    结束时间

    中断时间

    净时间

    活动

    备注

    C

    U

    3/6

    14:00

    16:00

     

    120

    听课

    软件工程概论

     

     

     

    22:00

    22:40

     

    40

    写思路

    把程序的思路写下来

     

     

    3/8

    15:00

    18:00

     

    180

    编程序

    四则运算2

     

     

    3/9

    20:00

    22:00

     

    120

    编程序

    四则运算2

     

     

    3/10

    16:00

    18:00

     

    120

    写报告

    四则运算2 的报告

     

     

    缺陷记录日志:

      

     

    日期

     

       编号

    类型

    引入阶段

    排出阶段

    修复时间

    缺陷

    3.7

    1

     

     编码

    编译 

    5min

    除法出现除数为0

    3.8

     2

     

    编码 

    编译 

     10min

    分数的复合运算无法实现

    3.9

     3

     

     编码

     编译

    5min

    优先级出现错误

  • 相关阅读:
    Cycle Sort
    使用finalize/dispose 模式提高GC性能(翻译)
    支持在控件标签间包含子控件 WebControl
    MongoDB 使用GridFS保存文件
    MongoDB学习笔记
    跨域名单点登录 part 1 设计蓝图(翻译)
    UserControl 用户自定义控件
    为什么90%的IT人员都不适合做老大?
    什么情况下你会毫不犹豫地辞职?
    Supervisor安装、配置、开启启动
  • 原文地址:https://www.cnblogs.com/kangzhijia/p/6527943.html
Copyright © 2020-2023  润新知