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

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

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.1Personal Software Process StagesTime (%) Senior StudentTime (%)
Planning计划8
· Estimate估计这个任务需要多少时间8两天
Development开发82一天
· Analysis需求分析 (包括学习新技术)630min
· Design Spec生成设计文档50
· Design Review设计复审45min
· Coding Standard代码规范33
· Design具体设计100
· Coding具体编码36一天
· Code Review代码复审71h
· Test测试(自我测试,修改代码,提交修改)13一直在测试
Reporting报告92h
·测试报告3
·计算工作量2
·并提出过程改进计划3

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

e丶小结

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

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

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

转载于:https://www.cnblogs.com/smile12231/p/6491516.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值