软件工程概论作业-02

作业题目:

可怜的二柱子同学,老师又对他的自动出题系统提出了新的要求:
可以控制下列参数:
1.是否有乘除法;
2.是否有括号(最多可以支持十个数参与计算);
3.数值范围;
4.加减有无负数;
5.除法有无余数!    

设计思想:1.输入需要出题的数量,选择是分数运算还是整数运算;分数运算时输入数值的范围,运行即可;整数运算时,先输入数值的范围,然后选择是否需要括号;进入有括号后,随机产生题目;进入无括号后,需要选择是否需要乘除法,除法中是否需要余数,加减法是否需要负数;
2.分数运算生成随机数,分别做分母和分子,分母不能为0,化简分数,分母不为0输出结果,分母为0直接输出分子为结果。     
3.在加减法中控制有无负数,使用随机数控制,0产生正数,1产生负数;
4.有括号,括号正在调试中,有点缺陷。有括号的运算优先级比较困难。
5.选择除法是否有余数,先随机产生除数,若需要产生余数,则被除数=除数*n+k(k为大于0小于除数的正整数);若不需要,则被除数=除数*n;

源程序代码

package demo;
import java.util.Scanner;
import java.util.ArrayList;
public class Test {
    public static void main(String[] args){
        int N,i,N1,N2;
        String hh;    
        Scanner in=new Scanner(System.in);    
        System.out.println("请输入需要打印的运算题的数目:");
        N=in.nextInt();
        System.out.println("请选择是否需要分数运算(Y/N):");
        hh=in.next();
        if(hh.equals("Y"))//分数运算
        {
            for(i=0;i<N;i++)
            {
                int a,b,c,d,r1,r2;
                a=(int) (Math.random()*100);
                b=(int) (Math.random()*99+1);
                //分母不等于0
                c=(int) (Math.random()*100);
                d=(int) (Math.random()*99+1);
                int h=(int)(Math.random()*4);
                int aa=0,bb=0,cc=0,dd=0;
                //为了产生分数,分子也不可为零
                if(a==0)
                    a=(int) (Math.random()*99+1);
                if(c==0)
                    c=(int) (Math.random()*99+1);
                if(a>b)
                    r1=b;
                else
                    r1=a;
                //化简分数
                for(int j=1;j<=r1;j++)
                {
                    if(a%j==0&&b%j==0)
                    {
                        aa=a/j;
                        bb=b/j;
                    }
                }
                if(c>d)
                    r2=d;
                else
                    r2=c;
                //化简分数
                for(int j=1;j<=r2;j++)
                {
                    if(c%j==0&&d%j==0)
                    {
                        cc=c/j;
                        dd=d/j;
                    }
                }
                if(h==0)
                {
                    //化简后,分母等于1时,直接输出分子
                    if(bb!=1&&dd!=1)
                        System.out.println(aa+"/"+bb+" + "+cc+"/"+dd+"=");
                    else if(bb==1&&dd!=1)
                        System.out.println(aa+" + "+cc+"/"+dd+"=");
                    else if(bb!=1&&dd==1)
                        System.out.println(aa+"/"+bb+" + "+cc+"=");
                    else
                        System.out.println(aa+"+"+cc+"=");
                }
                else if(h==1)
                {
                    //不能产生负数
                    int t1,t2;
                    if((a/b-c/d)<0)
                    {
                        t1=aa;
                        aa=cc;
                        cc=t1;
                        t2=bb;
                        bb=dd;
                        dd=t2;
                    }
                    //化简后,分母等于1时,直接输出分子    
                    if(bb!=1&&dd!=1)
                        System.out.println(aa+"/"+bb+" - "+cc+"/"+dd+"=");
                    else if(bb==1&&dd!=1)
                        System.out.println(aa+" - "+cc+"/"+dd+"=");
                    else if(bb!=1&&dd==1)
                        System.out.println(aa+"/"+bb+" - "+cc+"=");
                    else
                        System.out.println(aa+"-"+cc+"=");
                }
                else if(h==2)
                {//化简后,分母等于1时,直接输出分子
                    if(bb!=1&&dd!=1)
                        System.out.println(aa+"/"+bb+" * "+cc+"/"+dd+"=");
                    else if(bb==1&&dd!=1)
                        System.out.println(aa+" * "+cc+"/"+dd+"=");
                    else if(bb!=1&&dd==1)
                        System.out.println(aa+"/"+bb+" * "+cc+"=");
                    else
                        System.out.println(aa+"*"+cc+"=");
                }
                else
                {//化简后,分母等于1时,直接输出分子
                    if(bb!=1&&dd!=1)
                        System.out.println(aa+"/"+bb+" / "+cc+"/"+dd+"=");
                    else if(bb==1&&dd!=1)
                        System.out.println(aa+" / "+cc+"/"+dd+"=");
                    else if(bb!=1&&dd==1)
                        System.out.println(aa+"/"+bb+" / "+cc+"=");
                    else
                        System.out.println(aa+"/"+cc+"=");
                }
            }
        }
        else if(hh.equals("N"))//整数运算
        {
            System.out.println("请选择是否需要产生括号的运算题(Y/N):");
            String str,str1,str2,str3;
            str=in.next();
            
            if(str.equals("Y"))
            {
                System.out.println("请输入数值范围:");
                N1=in.nextInt();
                for(i=0;i<N;i++)
                {
           
                }
            }
            
            else if(str.equals("N"))//不需要产生括号
            {
                System.out.println("请输入数值范围:");
                N2=in.nextInt();
                System.out.println("请选择是否有无乘除法的运算题(Y/N):");
                str1=in.next();
                if(str1.equals("Y"))//有乘除法
                {                
                    System.out.println("请选择是否有无余数的运算题(Y/N):");
                    str2=in.next();                
                    if(str2.equals("Y"))//需要有余数
                    {
                        System.out.println("请选择是否有负数(Y/N):");
                        str3=in.next();
                        for(i=0;i<N;i++)
                        {
                            int a,b,c,c1,h,h2;
                            a=(int) (Math.random()*N2);
                            b=(int) (Math.random()*N2);
                            h=(int) (Math.random()*4);//控制加减运算符
                            c=(int) (Math.random()*(N2-1)+1);
                            c1=(int) (Math.random()*10+1);
                            
                            if(str3.equals("Y"))//有负数
                            {
                                if(h==0)//加法
                                {
                                    h2=(int) (Math.random()*2);//控制有无负数
                                    if(h2==0)
                                        System.out.println(a+"+"+b+"=");
                                    else if(h2==1)
                                        System.out.println("-"+a+"+"+b+"=");
                                }
                                if(h==1)//减法
                                {
                                    h2=(int) (Math.random()*2); //控制有无负数
                                    if(h2==0)
                                        System.out.println(a+"-"+b+"=");
                                    else if(h2==1)
                                        System.out.println("-"+a+"-"+b+"=");
                                }
                            }
                            else if(str3.equals("N"))//无负数
                            {
                                if(h==0)
                                {
                                    System.out.println(a+"+"+b+"=");
                                }
                                if(h==1)
                                {
                                    System.out.println(a+"-"+b+"=");
                                }
                            }
                            if(h==2)
                            {
                                System.out.println(a+"*"+b+"=");
                            }
                            if(h==3)
                            {
                                int d,k;
                                k=(int) (Math.random()*(c-1)+1);//必须产生余数
                                d=c*c1+k;
                                System.out.println(d+"/"+c+"=");
                            }
                        }
                    }
                    else if(str2.equals("N"))//不需要产生余数
                    {
                        System.out.println("请选择是否有负数(Y/N):");
                        str3=in.next();
                        for(i=0;i<N;i++)
                        {
                            int a,b,c,c1,h,h2;
                            a=(int) (Math.random()*N2);
                            b=(int) (Math.random()*N2);
                            h=(int) (Math.random()*4);//控制加减运算符
                            c=(int) (Math.random()*(N2-1)+1);
                            c1=(int) (Math.random()*10+1);//控制倍数
                            
                            if(str3.equals("Y"))//有负数
                            {
                                if(h==0)//加法
                                {
                                    h2=(int) (Math.random()*2);
                                    //控制有无负数
                                    if(h2==0)
                                        System.out.println(a+"+"+b+"=");
                                    else if(h2==1)
                                        System.out.println("-"+a+"+"+b+"=");
                                }
                                if(h==1)//减法
                                {
                                    h2=(int) (Math.random()*2);//控制有无负数
                                    if(h2==0)
                                        System.out.println(a+"-"+b+"=");
                                    else if(h2==1)
                                        System.out.println("-"+a+"-"+b+"=");
                                }
                            }
                            else if(str3.equals("N"))//无负数
                            {
                                if(h==0)
                                {
                                    System.out.println(a+"+"+b+"=");
                                }
                                if(h==1)
                                {
                                    System.out.println(a+"-"+b+"=");
                                }
                            }
                            if(h==2)//乘法
                            {
                                System.out.println(a+"*"+b+"=");
                            }
                            if(h==3)//除法,不产生余数
                            {
                                int d;//不能产生余数
                                d=c*c1;
                                System.out.println(d+"/"+c+"=");
                            }
                        }
                    }
                }
                        
                else if(str1.equals("N"))//没有乘除法
                {
                    int a,b,h,h2;                        
                    System.out.println("请选择是否有负数(Y/N):");
                    str3=in.next();
                    for(i=0;i<N;i++)
                    {
                        a=(int) (Math.random()*N2);
                        b=(int) (Math.random()*N2);
                        h=(int) (Math.random()*2);//控制运算符
                        
                        if(str3.equals("Y"))//有负数
                        {
                            if(h==0)//加法
                            {
                                h2=(int) (Math.random()*2);//控制有无负数
                                if(h2==0)
                                    System.out.println(a+"+"+b+"=");
                                else if(h2==1)
                                    System.out.println("-"+a+"+"+b+"=");
                            }
                            if(h==1)//减法
                            {
                                h2=(int) (Math.random()*2);//控制有无负数
                                if(h2==0)
                                    System.out.println(a+"-"+b+"=");
                                else if(h2==1)
                                    System.out.println("-"+a+"-"+b+"=");
                            }
                        }
                        else if(str3.equals("N"))//无负数
                        {
                            if(h==0)
                            {
                                System.out.println(a+"+"+b+"=");
                            }
                            if(h==1)
                            {
                                System.out.println(a+"-"+b+"=");
                            }
                        }
                    }
                }
            }
        }
        in.close();
    }
}

运行结果截图:

项目计划总结:

     任务

日期

听课

编写程序

阅读书籍

 

 

 

3.06

2小时课程

30分钟思考思路

 

 

 

 

3.07

 

实现数值范围和加法有无负数

 

 

 

 

3.08

 

 

实现除法有无余数编写运算是否有括号

 

 

 

 

3.09

 

 

 

 

 

 

3.10

 

 

阅读《梦断代码》

 

 

 

 

 

时间记录日志

日期

开始时间

结束时间

中断时间

活动

备注

3.6

14:00

15:50

10min

上课

 

3.7

14:00

15:30

 

编程

 

3.7

19:00

20:30

 

编程

 

3.8

15:00

17:00

30min      

编程

 

3.9

 

 

 

 

 

3.10

19:00

 

 

写博客

 

 

缺陷记录日志

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

描述

3.7

1

思维逻辑

设计

设计

4min

用位置来控制负数的位置

在减法时候负数位置容易混乱

3.8

1

思维

设计

设计

7min

 

用余数是否为零判断

3.10

1

思维

 

 

 

 

括号的运算优先级程序编写思路不明确

 

 

 

 

 

 

 

 
posted @ 2017-03-10 18:17  康杨  阅读(134)  评论(0编辑  收藏  举报