小学算数出题软件

                                                                      程序执行过程

                      

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

                    

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

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

以下是程序代码(用的语言是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"+"     ");
 }
}

posted @ 2016-03-14 16:44  小寐一觉  阅读(538)  评论(1编辑  收藏  举报