软件工程个人作业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

优先级出现错误

posted on 2017-03-09 21:20  zhijia  阅读(112)  评论(0编辑  收藏  举报

导航