• 自动生成小学生四则运算(皮!)


                                     自动生成小学生四则运算(皮!) 

    coding 地址 https://coding.net/u/smile12231/p/autoCalcilate/git

    a·需求分析   

          在这个家长希望自己的小孩能够赢在起跑线的社会,通常寻找很多的练习给小学生做,所以我们就来编写一个四则运算的软件,你懂我意思吧!这个软件能够

          ①丶根据用户想要的出题量生成题目

          ②丶生成的题目包括整数和分数的加减乘除

          ③丶能够自动判断答案是否正确并给出此次的正确率

          ④丶使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目

    b丶功能设计

          基本功能:提示用户输入想要的题目数量,并且在每昨晚一提后能直接显示对错,

          扩展功能:如果错误的话能够给出正确答案

          高级功能:首次充值六元RMB就能够真送一本小学生唐诗三百首(但是作者能力有限无法之,很难受)

    c丶设计实现

          我会有java.util.Scanner;java.util.Random;这两个java类

          java.Util.Scanner;能够使程序捕捉到用户输入的题目量

          java.util.Random;能够让程序自动生成整数,在经过设计者的巧夺天工处理实现自动生成题目

    d丶代码说明

     1 //自动生成题目
     2 package add_sub_mul_div;
     3 
     4 import java.util.Random;
     5 
     6 public class Create_Question {
     7     public void C_Q(String m){
     8         Int_Method im=new Int_Method();
     9         Flo_Method fm=new Flo_Method();
    10         int n=Integer.parseInt(m.trim());
    11         int e=0,f=0;
    12         for(int i=0;i<n;i++){
    13             Random r=new Random();
    14 //            int c=r.nextInt(4);
    15             int c=3;
    16             //随机生成一个数0是整数加减乘除1是分数加减乘除
    17 //            int i1=r.nextInt(2);
    18             int i1=1;
    19             if(i1==0){
    20                 //随机生成一个数0-3决定做加还是减。。。
    21                 if(c==0){
    22                     int a=im.Add(r.nextInt(10), r.nextInt(10)) ;
    23                     im.Add1(a);
    24                     e=e+im.i;
    25                 }else if (c==1){ 
    26                     int a=im.Sub(r.nextInt(10), r.nextInt(10));
    27                     im.Sub1(a);
    28                     e=e+im.i;
    29                 }else if(c==2){
    30                     int a=im.Mul(r.nextInt(10), r.nextInt(10));
    31                     im.Mul1(a);
    32                     e=e+im.i;
    33                 }else if(c==3){
    34                     String a=im.Div(r.nextInt(10), r.nextInt(10));
    35                     im.Div1(a);
    36                     e=e+im.i;
    37                 }
    38             }else if(i1==1){
    39                 if(c==0){
    40                     String s=fm.Add(r.nextInt(10)+1,r.nextInt(10)+1,r.nextInt(10)+1,r.nextInt(10)+1 );
    41                     if(fm.Add1(s)){
    42                         f=f+1;
    43                     }
    44                     
    45                 }
    46                 else if(c==1){
    47                     String s=fm.Sub(r.nextInt(10)+1,r.nextInt(10)+1,r.nextInt(10)+1,r.nextInt(10)+1 );
    48                     
    49                     f=f+fm.Sub1(s);
    50                 }
    51                 else if(c==2){
    52                     String s=fm.Mul(r.nextInt(10)+1,r.nextInt(10)+1,r.nextInt(10)+1,r.nextInt(10)+1 );
    53                 
    54                     f=f+fm.Mul1(s);
    55                 }
    56                 else if(c==3){
    57                     String s=fm.Div(r.nextInt(10)+1,r.nextInt(10)+1,r.nextInt(10)+1,r.nextInt(10)+1 );
    58                     
    59                     f=f+fm.Div1(s);
    60                 }
    61                     
    62             }
    63                 
    64         }
    65         int result=e+f;
    66         System.out.println("小样你的正确率:  "+(1.0*result)/n*100+"%");
    67         
    68     }
    69 }
     1    //实现整数加法的方法
     2 
     3       public int Add(int a,int b){       //闯入两个int型的整数
     4 
     5         System.out.print(a+"+"+b+"= ");//输出题目按照小学生的视角
     6 
     7         int result=(a+b);                //程序后台算出此题目的正确答案
     8 
     9         return result;              //返回答案
    10       }
    11 
    12       //判断答案是否正确的方法
    13 
    14       public void Add1(int result){
    15 
    16         Scanner sc=new Scanner(System.in);   //新建一个Scanner类的对象sc
    17         int input= sc.nextInt();          //小学生输入一个整数(答案)并且赋值给input
    18 
    19         if(input==result){              //如果答案正确输出做对了
    20 
    21         System.out.println("答对了 ");
    22         this.i=1;                  //i==1表示做对了
    23         }else{                          //如果答案不正确,你知道的尽情的嘲讽
    24         System.out.println("你皮任你皮 当你是瓜皮!!! 你皮任你皮 当你是瓜皮!!! 答错了 哈哈哈 哈哈哈 ");
    25         this.i=0;
    26         }
    27       }
    28 
    29       //分数加法题目生成发方法
    30 
    31       public String Add(int a,int b,int c,int d){
    32 
    33       //显示题目
    34         System.out.print(a+"/"+b+"+"+c+"/"+d+"=");
    35         String[] str =Int_Method.Simple_Flo(a, b).split("\/");
    36         int x1=Integer.parseInt(str[0]);
    37         int y1=Integer.parseInt(str[1]);
    38         String[] str1=Int_Method.Simple_Flo(c, d).split("\/");
    39         int i=Integer.parseInt(str1[0]);
    40         int j=Integer.parseInt(str1[1]);
    41         x1=x1*j; i=i*y1; 
    42         y1=y1*j; j=y1;
    43         int n=x1+i;
    44         int m=j;
    45         return Int_Method.Simple_Flo(n, m);
    46       }
    47 
    48       //判断分数加法题目是否正确的方法
    49 
    50      public boolean Add1(String s)            
    Scanner sc=new Scanner(System.in);       51   String input= sc.nextLine();        //输入的转化为数字 52         String[] str=input.split("\/"); 54         int x1=Integer.parseInt(str[0]); 55         int y1=Integer.parseInt(str[1]); 56         //化简转化的数字得到一个string 57         String s1=Int_Method.Simple_Flo(x1, y1); 58         //化简的数字string 转化成数字 59         String[] str1=s1.split("\/"); 60         int x2=Integer.parseInt(str1[0]); 61         int y2=Integer.parseInt(str1[1]); 62         //题目给出的转化成数字 63         String[] str2=s.split("\/"); 64         int i=Integer.parseInt(str2[0]); 65         int j=Integer.parseInt(str2[1]); 66         if(x2==i&&y2==j){ 67           System.out.println("答对了!"); 68           return true; 69         }else{ 70            System.out.println("你皮任你皮 当你是瓜皮!!! 答错了 哈哈哈!"); 71            return false; 72        } 73     } 74 75        76 77    
     1 //这是分数的除法
     2 public String Div(int a,int b,int c,int d){
     3         //显示题目
     4         System.out.print(a+"/"+b+" ÷ "+c+"/"+d+"=");
     5         String[] str =Int_Method.Simple_Flo(a, b).split("\/");
     6         int x1=Integer.parseInt(str[0]);
     7         int y1=Integer.parseInt(str[1]);
     8         String[] str1=Int_Method.Simple_Flo(c, d).split("\/");  //Simple_Flo 函数是用来把答案化简成最简分数
     9         int i=Integer.parseInt(str1[0]);
    10         int j=Integer.parseInt(str1[1]);
    11          int n=x1*j;
    12          int m=y1*i;
    13          return  Int_Method.Simple_Flo(n, m);
    14     }
    15     
    16     public int Div1(String s){
    17         Scanner sc=new Scanner(System.in);
    18            String input= sc.nextLine();
    19            //输入的转化为数字
    20            String[] str=input.split("\/");
    21              int x1=Integer.parseInt(str[0]);
    22              int y1=Integer.parseInt(str[1]);
    23            //化简转化的数字得到一个string
    24            String s1=Int_Method.Simple_Flo(x1, y1);
    25            //化简的数字string 转化成数字
    26            String[] str1=s1.split("\/");
    27              int x2=Integer.parseInt(str1[0]);
    28              int y2=Integer.parseInt(str1[1]);
    29             //题目给出的转化成数字
    30              String[] str2=s.split("\/");
    31                  int i=Integer.parseInt(str2[0]);
    32                  int j=Integer.parseInt(str2[1]);
    33          if(x2==i&&y2==j){
    34              System.out.println("答对了!");
    35              return 1;
    36          }
    37         
    38     else{
    39         System.out.println("你皮任你皮 当你是瓜皮!!! 答错了 哈哈哈!");
    40         System.out.println("正确答案是:"+s);
    41          return 0;
    42     }
    43     }

    e丶测试运行

          

          

                                

    PSP2.1 Personal Software Process Stages Time (%) Senior Student Time (%)
    Planning 计划 8
    · Estimate 估计这个任务需要多少时间 8 两天
    Development 开发 82 一天
    · Analysis 需求分析 (包括学习新技术) 6 30min
    · Design Spec 生成设计文档 5 0
    · Design Review 设计复审 4 5min
    · Coding Standard 代码规范 3 3
    · Design 具体设计 10 0
    · Coding 具体编码 36 一天
    · Code Review 代码复审 7 1h
    · Test 测试(自我测试,修改代码,提交修改) 13 一直在测试
    Reporting 报告 9 2h
    · 测试报告 3
    · 计算工作量 2
    · 并提出过程改进计划 3

     ps:编写代码时候没有考虑到代码的兼容性,以至于后来需要大改,而且重复的代码没有写在一个方法里,修改的时候很麻烦

    e丶小结

       四则运算花费了作者一天的时间,主要是分数的四则运算花费了太多时间,分数当做字符串,的比较结果是否算对时有需要将字符串转化为整数,同时化为分子分母最简表达式最后,分子比分子,分母比分母,都相等才作对可

       有疑问时,有热心的同学帮助还有度娘,虽然编程过程中,修改的过程很复杂,但是学会了Debug方法,还是很开心的,还有java String的split用法

    编程如果你感觉到了瓶颈那就是快要成神的时候了,有时候编的很烦躁的时候,我会大家TGP,看看自己的段位,喝一杯水,然后默默的开始编程咯。

  • 相关阅读:
    读入输出优化
    码表
    windows下bat批处理实现守护进程(有日志)
    cmd批处理常用符号详解
    批处理之 for/f 详解
    WINDOWS XP中用命令行管理用户 net user命令
    VacmMIB
    工作遇到
    snmp之GenericAddress
    snmp4j 之 ArgumentParser
  • 原文地址:https://www.cnblogs.com/smile12231/p/6491516.html
Copyright © 2020-2023  润新知