四则运算继承版

(1)题目要求
1.定义主界面菜单
参数设置
小学二年级口算题
小学三年级口算题
小学四年级口算题
错题集
2.其中参数设置包括出题个数(缺省值为30)、操作数数值范围。
3.小学二年级口算题操作数为两个、可进行加减乘除运算(除法必须可以整除),操作数范围不超过100.
4.小学三年级口算题操作数不超过4个,可以进行加减乘除,操作数范围不超过1000.(要求采用继承小学二年级出题类的方式,实现小学三年级的出题类)
5.小学四年级口算题操作数不超过5个,可以进行加减乘除,还可以加入括号运算。 (要求采用继承小学三年级出题类的方式,实现小学四年级的出题类)
6.学生实时答题结束后,可以选择是否进行下一套题目答题,如果选择是,则抽取下一套题进行答题,答题结束可以通过查看错题本,查询今日做题正确率。也可以针对错题进行二次答题。
(2)源代码

package jichensizeyunsuan;
import java.util.*;

public class zhujiemian {
    static Scanner sc = new Scanner(System.in);    
    
//主菜单界面
 public static int systemMenu()
 {
     System.out.println("***************"+"\n"+
                         "四则运算"             +"\n"+
                         "1.小学二年级口算题"  +"\n"+
                         "2.小学三年级口算题"  +"\n"+
                         "3.小学四年级口算题"     +"\n"+
                         "4.退出"             +"\n"+
                         "***************");
     System.out.println("请选择:");
     int ch;
     ch = sc.nextInt();
     return ch;
 }

 //主方法
 public static void mainFrame()
 {
     int choose;
     choose = systemMenu();
    
        if(choose>=1&&choose<=6)
        {
            switch(choose)
            {  
             case 1:SecondExercise er= new SecondExercise();
                    er.czshuRewrite();
                    break;
             case 2:ThirdExercise san = new ThirdExercise();
                    san.czshuRewrite();
                    break;
             case 3:FouthExercise si = new FouthExercise();
                    si.czshuRewrite();
                    break;
             case 4:systemExit();break;
            }
        }
        else //输入主界面选项不存在,返回主界面
         {
             System.out.println("该选项不存在,请重新选择!");
             choose = systemMenu(); 
         }
 }
  
 //退出系统
 public static void systemExit()
 {
     System.out.println("系统已退出,欢迎下次使用!");
     System.exit(0);
 }
 
 // 主函数
public static void main(String[] args) {
    mainFrame();
 }
}

//二年级类
class SecondExercise
{
    static Scanner sc = new Scanner(System.in);    
    public static int num=30;     //初始化题数为30
    public static int scope=100;  //初始化范围为100
    public static int operand=2;  //初始化操作数为2
    
    //操作数限定
    public static void  czshuRewrite()
     {
         czfwRewrite();
     }
    
    //操作范围限定
    public static void czfwRewrite()
     {
        System.out.println("请输入数值范围:");
        int fw=sc.nextInt();
        scope=fw;
         if(scope>100||scope<0)
         {
             System.out.println("操作数范围应在100内,请重新输入!");
             czfwRewrite();
         }
         else
         {
             tshuRewrite();
         }
     }
    
    //题数设置
    public static void tshuRewrite()
    {
        System.out.println("请输入题目个数:");
        int tishu=sc.nextInt();
        num=tishu;
        pdyuejie();
    }
    
    //判断越界
    public static void pdyuejie()
    {
        if(num*operand>scope)
        {
            System.out.println("设置越界,请重新设置!");
            czshuRewrite();
        }
        else
        {
            chuti();
        }
    }
    
    //生成随机符号
    public static char operator() {
        char op=' ';
        int n = (int)(Math.random()*999+1);
            switch(n%4)
            {
            case 0:op = '+';break;
            case 1:op = '-';break;
            case 2:op = '*';break;
            case 3:op = '/';break;
            }
        return op;
    }
    
    //出题所需参数
    static int nnum=0;                         
    static int ccount=0;                       
    static  int cuoticount=0;                   //记录错题数
    static int []zqda = new int[100000];       //存正确答案
    static int []cishu = new int[100000];      //存答错次数
    static String []arr = new String[100000];  //存题目
    //出题
    public static void chuti()
    {
        int a = (int)(Math.random()*scope+1);
        int b = (int)(Math.random()*scope+1);
        char c = operator();
        String str = ""+a+c+b;
        int []cunshu = new int[1000];
        char []cunfuhao =new char[1000];
        int shu=0;
        int fuhao=0;
        if(c=='*')
        {
            cunshu[shu]=a*b;
        }
        else if(c=='/')
        {
            cunshu[fuhao]=a/b;
        }
        else
        {
            cunshu[shu]=a;
            shu++;
            cunshu[shu]=b;
            cunfuhao[fuhao]=c;
        }
        for(int i=2;i<operand;i++)
        {
            int zenjiashu = (int)(Math.random()*scope+1);
            char zenjiac = operator();
            if(zenjiac=='*')
            {
                cunshu[shu]=cunshu[shu]*zenjiashu;
            }
            else if(c=='/')
            {
                cunshu[shu]=cunshu[shu]/zenjiashu;
            }
            else
            {
                shu++;
                cunshu[shu]=zenjiashu;
                fuhao++;
                cunfuhao[fuhao]=zenjiac;
            }    
            str = str + zenjiac + zenjiashu;
        }
        
        //存每题的正确答案
        int zhengquedaan=cunshu[0];
        int cou=0;
        for(int j=0;j<=fuhao;j++)
        {
            if(cunfuhao[cou]=='+')
            {
                zhengquedaan+=cunshu[cou+1];
            }
            else
            {
                zhengquedaan-=cunshu[cou+1];
            }
        }
        chutimu(str,zhengquedaan);
    }
    
    //显示题目判断答案
    public static void chutimu(String str,int zhengquedaan)
    {
        if(ccount<num)
        {
            arr[ccount]=str;
            zqda[ccount]=zhengquedaan;
            System.out.println(arr[ccount]+"=");
            int daan;
            daan = sc.nextInt(); 
            if(daan!=zhengquedaan)
            {
                System.out.println("答案错误");
                cishu[ccount]=1;
                cuoticount++;
            }
            else
            {
                System.out.println("答案正确");
                cishu[ccount]=0;
            }
            ccount++;
            chuti();
        }
        else
        {
            System.out.println("错误率"+cuoticount*100/num+"%");
            jixun();
        }
    }
    
    //做错题&新题
    public static void  jixun()
    {
        System.out.println("请选择:   "+"\n"+
                           "1.错题重做 "+"\n"+
                           "2.再练一套 "+"\n"+
                           "3.退出系统");
         int xuan;
         xuan = sc.nextInt();
         switch(xuan)
         {
          case 1:cuoti();break;
          case 2:zailian();break;
          case 3:System.out.println("系统已退出,欢迎下次使用!");
                  System.exit(0);
         }
    }
    
    //做错题
    public static void cuoti()
    {
        nnum=cuoticount;
        cuoticount=0;
        for(int i=0;i<num;i++)
        {
            if(cishu[i]==1)
            {
                System.out.println(arr[i]+"=");
                int da;
                da = sc.nextInt(); 
                if(da!=zqda[i])
                {
                    System.out.println("答案错误");
                    cuoticount++;
                }
                else
                {
                    cishu[i]=0;
                    System.out.println("答案正确");
                }
            }
        }
        System.out.println("错误率"+cuoticount*100/nnum+"%");
        jixun();
    }
    
    //再练一套
    public static void zailian()
    {
        ccount=0;
        cuoticount=0;
        nnum=0;
        chuti();
    }
}

//三年级类
class ThirdExercise extends SecondExercise
{
    //重写父类操作数函数
    public static void  czshuRewrite()
     {
        System.out.println("请输入操作数:");
        int czs=sc.nextInt();
        operand=czs;
         if(operand>4||operand<0)
         {
             System.out.println("操作数应在不超过4个,请重新输入!");
             czshuRewrite();
         }
         else
         {
             czfwRewrite();
         }
     }
    
    //重写父类操作范围函数
    public static void czfwRewrite()
     {
        System.out.println("请输入数值范围:");
        int fww=sc.nextInt();
        scope=fww;
         if(scope>1000||scope<0)
         {
             System.out.println("操作数范围应在1000内,请重新输入!");
             czfwRewrite();
         }
         else
         {
             tshuRewrite();
         }
     }         
}

//四年级类
class FouthExercise extends ThirdExercise
{
    ////重写父类操作范围函数
    public static void czfwRewrite()
     {
        System.out.println("请输入数值范围:");
        int fwww=sc.nextInt();
        scope=fwww;
         if(scope>10000||scope<0)
         {
             System.out.println("操作数范围应在10000内,请重新输入!");
             czfwRewrite();
         }
         else
         {
             tshuRewrite();
         }
     }         
}
posted @ 2021-10-13 16:57  今天又双叒叕在敲代码  阅读(171)  评论(0编辑  收藏  举报