zoukankan      html  css  js  c++  java
  • 自动生成小学生四则运算(皮!)

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

    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,看看自己的段位,喝一杯水,然后默默的开始编程咯。

  • 相关阅读:
    5 Things Every Manager Should Know about Microsoft SharePoint 关于微软SharePoint每个经理应该知道的五件事
    Microsoft SharePoint 2010, is it a true Document Management System? 微软SharePoint 2010,它是真正的文档管理系统吗?
    You think you use SharePoint but you really don't 你认为你使用了SharePoint,但是实际上不是
    Introducing Document Management in SharePoint 2010 介绍SharePoint 2010中的文档管理
    Creating Your Own Document Management System With SharePoint 使用SharePoint创建你自己的文档管理系统
    MVP模式介绍
    权重初始化的选择
    机器学习中线性模型和非线性的区别
    神经网络激励函数的作用是什么
    深度学习中,交叉熵损失函数为什么优于均方差损失函数
  • 原文地址:https://www.cnblogs.com/smile12231/p/6491516.html
Copyright © 2011-2022 走看看