zoukankan      html  css  js  c++  java
  • 小学算数出题软件

                                                                          程序执行过程

                          

                                                    第一步:输入条件 生成题目

                        

                              第二部: 开始答题 并判断正误

                                                            (程序功能并不是太全面  一些功能因为水平原因没法实现 但大部分都已实现)

    以下是程序代码(用的语言是java)

    import javax.script.*;
    import java.util.*;
    import java.util.Scanner;
    class  Demo
    {
        public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      System.out.println("请选择要生成多少道题目");
      int shul=sc.nextInt();
      System.out.println("请选择是否有乘除法,没有输入2,有输入4");
      int has=sc.nextInt();
      System.out.println("请输入生成式有几个参数");
      int numb=sc.nextInt();
            System.out.println("请输入随机数的范围a,b(保证a<=b)");
      int edg1=sc.nextInt();
      int edg2=sc.nextInt();
      System.out.println("请输入每一行题目的数量");
      int geshi=sc.nextInt();
      System.out.println("题目正在生成");
      int cout=0;
      produce[] po=new produce[30];
       int geshinum=0;
       for(int i=0;i<shul;i++)
       {
        po[i]=new produce();
        po[i].pro(numb,has,edg1,edg2);
        po[i].Sum();
        if(geshinum==geshi)
        {
         System.out.println();
         geshinum=0;
        }
         po[i].show();
         geshinum++;
         
       }
      System.out.println();
      System.out.println("开始答题");
      for(int i=0;i<shul;i++)
      {
       int daan=sc.nextInt();
       cout=cout+po[i].Compara(daan);
      }
            System.out.println("答题结束 您的答题情况是:");
      System.out.println("您共答对"+cout+"题");
      for(int i=0;i<shul;i++)
      {
       if(po[i].pand==false)
       {
        System.out.println("第"+(i+1)+"题错误");
       }
      }
    }
    }
    class produce//此类用于操纵一个运算式
    {
        ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript"); 
        StringBuilder str=new StringBuilder();
     int sum;
     char pre;
     int prenum;
     char []list={'+','-','*','/'};
     boolean pand;
     produce()//构造函数
     {
      this.pre='#';
     }
     public void pro(int numb,int has,int edg1,int edg2)//此方法随机生成一个运算式 numb为参数数量 has为是否有乘除
     {                                                      //edg1,edg2是随机数范围
      Random r=new Random();
      for(int cout=0;cout<numb;cout++)
      {
       if(pre=='#')
       {
        int num=edg1+r.nextInt(edg2-edg1+1);
        int num2=r.nextInt(has);
        char fu=list[num2];
        str.append(num);
        str.append(fu);
        pre=fu;
        prenum=num;
       }
       else
       {
        int num3=edg1+r.nextInt(edg2-edg1+1);
        if(pre=='/')
        {
         while(!(prenum>=num3&&prenum%num3==0))
         {
          num3=edg1+r.nextInt(edg2-edg1+1);
         }
        }
        str=str.append(num3);
        cout++;
        prenum=num3;
        if(!(cout==numb))
        {
         int num4=r.nextInt(has);
         char fu2=list[num4];
         str.append(fu2);
         pre=fu2;
        }
        cout--;
       }
      }
     }
     public void Sum()    //生成的式子求值
     {
      String str2=new String();
      try{str2=jse.eval(str.toString()).toString();}
      catch(Exception e){};
      this.sum=(int)Double.parseDouble(str2); 
     }
     public int Compara(int i)// 判断是否正确
     {
      pand=(sum==i);
      if(pand)
       return 1;
      else
       return 0;
     }
     public void show()//打印
     {
      System.out.print(str.toString()+"sum"+"     ");
     }
    }

  • 相关阅读:
    驱动开发之基本
    Bitmap文件格式+生成一个BMP文件
    PPP 转义字符 编码 和 解码
    数组数据整体按位左移或右移一位
    一个assert的写法
    c++11 右值引用 && std::move()
    openMP一小时初探
    linux命令学习_实验楼(一)
    50 行 Python 代码完成图片转字符
    LFW精确度验证__c++双线程读写txt
  • 原文地址:https://www.cnblogs.com/mengzhang/p/5276249.html
Copyright © 2011-2022 走看看