您的位置:首页 > 其它

四则运算题目生成程序(基于控制台)2.0

2017-03-02 14:02 495 查看
码市地址:https://git.coding.net/qwx_hh/java-szys.git

需求分析:

  为了做一个小学生四则运算题目生成程序,根据小学生的计算水平,我以100以内的整数二元四则运算和真分数的二元四则运算为出题范围,因为是命令行程序,小学生做题,界面要求简易,输出数值不能有错误。判断正确与否,在答题结束后得出正确率。

基本功能:

  1.除了整数以外,还支持真分数的四则运算,真分数的运算

  2.运算符为 +, −, ×, ÷

  3.并且要求能处理用户的输入,并判断对错,打分统计正确率

  4.要求能处理用户输入的真分数

  5.使用 -n 参数控制生成题目的个数

扩展功能:

  1.在开始程序前先验证命令行传入参数是否正确

  2.使用人性化的提示方式

  3.当答案错误时提示错误并输出正确答案

高级功能:

1.在d盘创建文件夹Myapp并形成一个histroy.txt文件储存有答题错误的题目与答案

  2.在正常完成题目并出现正确率后会提示是否复习之前错误的题目

设计实现:

Java类有:

  1.Test

  2.Arithmetic

  3.Histroy

  Test类负责代码的运行和调用Arithmetic和Histroy中的方法,验证答案并输出正确率。Arithmetic类负责出题以及运算并输出结果。Histroy类负责错误题目的读取与保存。Test类:输出方法。Arithmetic类有方法:整数运算方法,分数运算方法,公约数方法,输出字符串。Histroy类:创建文件方法,更新文件方法,读取文件方法。

代码说明:

Test类:

1 package szys;
2
3 import java.io.FileNotFoundException;
4 import java.util.Random;
5 import java.util.Scanner;
6
7 public class Test {
8     static int rn=0;
9     static int wn=0;
10     public static void main(String[] args) throws FileNotFoundException {
11         // TODO Auto-generated method stub
12         if(args[0].equals("-n")&&args[1].matches("\\d*"))
13         {
14             System.out.printf("%n");
15             System.out.println("要开始了哦,试试看(。_。):");
16             System.out.printf("%n");
17             int i = Integer.parseInt(args[1]);
18             Histroy hs = new Histroy();
19             hs.Histroy_create();
20             for(int a=0;a<i;a++)
21             {
22                 boolean x= new Random().nextBoolean();
23                 Arithmetic hh = new Arithmetic(x);
24                 String int_str = hh.int_operation();
25                 String fra_str = hh.fra_operation();
26                 if(x==true)
27                     print(hh.toString(),int_str,hs);
28                 if(x==false)
29                     print(hh.toString(),fra_str,hs);
30             }
31             double tru=rn;
32             double tot=i;
33             System.out.printf("%n正确率:%f",tru/tot*100);
34             System.out.println("%");
35             rn=0;wn=0;
36             System.out.println("复习?(N/Y)");
37             Scanner scanner = new Scanner(System.in);
38             String a2 = scanner.next();
39             if(a2.equals("Y"))
40                 review();
41             else
42                 System.exit(0);
43         }
44         else
45         {
46             System.out.println("别调皮,参数有问题");
47             System.exit(0);
48         }
49     }
50     public static void print(String toString,String str,Histroy hs){
51         hs.scan(str,toString);
52         System.out.printf(toString);
53         Scanner scanner = new Scanner(System.in);
54         String a1 = scanner.next();
55         if(str.equals(a1))
56         {
57             rn++;
58             System.out.println("        (≧▽≦)正确");
59         }
60         else
61         {
62             hs.Histroy_save();
63             wn++;
64             System.out.printf("        (>﹏<)错误%n        答案%s%n",str);
65         }
66     }
67     public static void review() throws FileNotFoundException {
68         Histroy hs = new Histroy();
69         hs.Histroy_read();
70         System.out.printf("题量多少?");
71         System.out.printf("(最高%d题)",hs.astrlist.size());
72         Scanner scanner = new Scanner(System.in);
73         int n = scanner.nextInt();
74         for(int i=0;i<n;i++)
75         {
76             int b = new Random().nextInt(hs.astrlist.size())%(hs.astrlist.size()-1+1) + 1;
77             Histroy hs2 = new Histroy();
78             print(hs.qstrlist.get(b-1), hs.astrlist.get(b-1),hs2);
79         }
80             double tru=rn;
81             double tot=n;
82             System.out.printf("%n正确率:%f",tru/tot*100);
83             System.out.println("%");
84             System.out.println("再来?(Y/N)");
85             Scanner scanner2 = new Scanner(System.in);
86             String a2 = scanner.next();
87             if(a2.equals("Y"))
88                 review();
89             else
90                 System.exit(0);
91     }
92 }


Arithmetic类:

1 package szys;
2
3 import java.util.Random;
4
5 public class Arithmetic {
6     int a = new Random().nextInt(4);
7     int b = new Random().nextInt(10)%(10-1+1) + 1;
8     int c = new Random().nextInt(10)%(10-2+1) + 2;
9     int d = new Random().nextInt(10)%(10-1+1) + 1;
10     int e = new Random().nextInt(10)%(10-2+1) + 2;
11     int f = new Random().nextInt(100);
12     int g = new Random().nextInt(100);
13     String astr="";
14     String qstr="";
15     boolean x;
16     public Arithmetic(boolean x) {
17         this.x=x;
18     }
19     public String int_operation()
20     {
21         int result = 0;
22         if(a==0)
23             result=f+g;
24         if(a==1)
25             result=f-g;
26         if(a==2)
27             result=f*g;
28         astr = String.valueOf( result);
29         if(a==3)
30         {
31             if(g==0)
32             {
33                 astr=int_operation();
34                 return astr;
35             }
36             else
37             {
38                 if(g!=0&&g!=1){
39                     int d=common_divisor(f,g);
40                     f=f/d;
41                     g=g/d;
42                     astr = (f+"/"+g);
43                 }
44                 if(g==1)
45                     astr=(""+f);
46             }
47
48         }
49         return astr;
50     }
51     public String fra_operation(){
52         this.b = new Random().nextInt(10)%(10-1+1) + 1;
53         this.c = new Random().nextInt(10)%(10-2+1) + 2;
54         this.d = new Random().nextInt(10)%(10-1+1) + 1;
55         this.e = new Random().nextInt(10)%(10-2+1) + 2;
56         if(c<b||e<d||c%b==0||e%d==0)
57         {
58             astr=fra_operation();
59             return astr;
60         }
61
62         int fz=1,fm=c*e;
63         if(a==0)
64             fz=b*e+c*d;
65         if(a==1){
66             fz=b*e-c*d;
67             if(fz==0)
68             {
69                 return astr=("0");
70             }
71         }
72
73         if(a==2)
74             fz=b*d;
75         if(a==3)
76         {
77             fz=b*e;
78             fm=c*d;
79         }
80         int f=common_divisor(fm,fz);
81         if(f>0){
82             fm=fm/f;
83             fz=fz/f;
84         }
85         if(f<0){
86             fm=-fm/f;
87             fz=-fz/f;
88         }
89         astr = (fz+"/"+fm);
90         return astr;
91
92     }
93     public static int common_divisor(int m,int n)
94     {
95         while(m%n!=0){
96             int t=m%n;
97             m=n;
98             n=t;
99         }
100         return n;
101     }
102     public String toString(){
103         if(x==true){
104             if(a==0)
105                 qstr=(f+"+"+g+"=");
106             if(a==1)
107                 qstr=(f+"-"+g+"=");
108             if(a==2)
109                 qstr=(f+"×"+g+"=");
110             if(a==3)
111                 qstr=(f+"÷"+g+"=");
112         }
113         if(x==false){
114             if(a==0)
115                 qstr=(b+"/"+c+"+"+d+"/"+e+"=");
116             if(a==1)
117                 qstr=(b+"/"+c+"-"+d+"/"+e+"=");
118             if(a==2)
119                 qstr=(b+"/"+c+"×"+d+"/"+e+"=");
120             if(a==3)
121                 qstr=(b+"/"+c+"÷"+d+"/"+e+"=");
122         }
123         return qstr;
124     }
125
126 }


Histroy类

1 package szys;
2
3 import java.io.File;
4 import java.io.FileNotFoundException;
5 import java.io.FileWriter;
6 import java.io.IOException;
7 import java.util.ArrayList;
8 import java.util.List;
9 import java.util.Scanner;
10
11 public class Histroy {
12     String qstr;
13     String astr;
14     String str;
15     public List<String> qstrlist = new ArrayList<String>();
16     public List<String> astrlist = new ArrayList<String>();
17     public void scan(String qstr,String astr){
18         str=(astr+" "+qstr);
19     }
20     public void Histroy_create(){
21         String path = "d:\\Myapp";
22         File f = new File(path);
23         if(!f.exists()){
24             f.mkdirs();
25             String fileName="histroy.txt";
26             File file = new File(f,fileName);
27             if(!file.exists()){
28                 try {
29                 file.createNewFile();
30                 } catch (IOException e) {
31                 // TODO Auto-generated catch block
32                 e.printStackTrace();
33                 }
34             }
35         }
36
37     }
38     public void Histroy_save(){
39          FileWriter writer;
40          String fileName = ("d:\\Myapp\\histroy.txt");
41         try {
42             writer = new FileWriter(fileName, true);
43             writer.write(str);
44             writer.write("\r\n");
45             writer.close();
46         } catch (IOException e) {
47             // TODO Auto-generated catch block
48             e.printStackTrace();
49         }
50     }
51     public void Histroy_read()  throws FileNotFoundException{
52         Scanner in = new Scanner(new File("d:\\Myapp\\histroy.txt"));//为历史信息.tit这个File创建一个扫描器in
53         while(in.hasNextLine()){
54             String line = in.nextLine();//读出历史信息.txt的下一行
55             Scanner lineScanner = new Scanner(line);//为每一行建立一个扫描器
56             lineScanner.useDelimiter(" ");//使用空格作为分隔符
57             qstr = lineScanner.next();//问题
58             astr = lineScanner.next();//答案
59             qstrlist.add(qstr);
60             astrlist.add(astr);
61         }
62         in.close();
63     }
64 }


测试运行:



命令行参数错误:



存储文件



psp:

Personal Software Process Stages

Time (%) Senior Student

Time (%)

计划

5

5

估计这个任务需要多少时间

5

5

开发

85

70

需求分析 (包括学习新技术)

10

10

生成设计文档

0

0

设计复审

0

0

代码规范

10

5

具体设计

15

15

具体编码

40

30

代码复审

10

10

测试(自我测试,修改代码,提交修改)

15

25

报告

10

15

测试报告

2

2

计算工作量

1

1

并提出过程改进计划

2

2

小结:通过此次项目实践我又丰富了我的Java编程经验,还锻炼了我的写报告的能力(笑),今后会为认真地完成每一次项目而努力。我觉得在代码规范方面2.0相比初代来说有了很大的提高。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: