基于控制台的四则运算
a.需求分析
-
- 运算符为 +, −, ×, ÷
- 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
- 要求能处理用户输入的真分数, 如 1/2, 5/12 等
- 并且要求能处理用户的输入,并判断对错,打分统计正确率。
b.功能设计
-
- 基本功能 通过从控制台随机的得到整数和真分数的四则运算,然后根据控制台输入的结果判断对错,给出正确率
- 扩展功能 希望改进代码可以实现带括号的复合运算(未完成)
c.设计实现
一个测试类class Test 用来检测程序的正常运行
一个整数类class zhengshu 里面有一个方法jisuan()用来实现整数的四则运算
一个分数类class Fracetion 有Numerator,Denominator,fraction用来表示分子,分母和分数,然后包含了getter()方法和构建分数的方法creatfraction()
一个分数的方法类class Mathod 里面有三个分数四则运算时要用到的方法 求最大公约数getGCD(int i,int j)约分重构分数 Reduction(int i,int j)和判断正错compare(String a, String b)
一个分数的四则运算法则类class Calculate 里面包含四个方法,分别是加减乘除
一个分数计算类class fenshu 里面包含一个计算方法jisuan()用来随机选择计算符号,然后判断正误
关系:测试类只要调用class zhenghsu和class fenshu中的jisuan()方法即可测试;class Calculate需要import Fraction类和Mathod,Fraction类也import了Mathod类
d.代码说明
-
-
- 真分数的生成
-
1 public String creatfraction() //创建分数并且化为最简 2 { 3 int i, j; 4 Numerator = 1+(int) (Math.random() * 10); 5 Denominator = 2+(int) (Math.random() * 10); 6 i = Numerator; 7 j = Denominator; 8 j = Mathod.getGCD(i, j); 9 Numerator = Numerator / j; 10 Denominator = Denominator / j; 11 fraction = Mathod.Reduction(Numerator, Denominator); 12 return fraction; 13 14 }
-
-
- Mathod类中的方法
-
1 static int getGCD(int i, int j) //求最大公约数 辗转相除法。 2 { 3 int temp; 4 while (i % j != 0) { 5 temp = i % j; 6 i = j; 7 j = temp; 8 } 9 return j; 10 } 11 12 static String Reduction(int i, int j) //约分,化为最简。 13 { 14 String k; 15 if (j == 1) { 16 k = i + ""; 17 } else { 18 k = (i) + "" + "/" + (j) + ""; 19 } 20 return k; 21 } 22 23 static boolean compare(String a, String b) //比较输入值与答案,返回值为boolean类型。 24 { 25 if (a.equals(b)) 26 {System.out.println("回答正确"); 27 return true;} 28 else 29 { 30 System.out.println("回答错误,正确答案是" + b); 31 return false; 32 } 33 }
-
-
- 真分数的四则运算(以加法为例,其余雷同)
-
1 public String add(Fraction a, Fraction b) //加法 参考分数间加减乘除 用四个变量表示两个分数的分子分母 2 { 3 int i, j, k, s, m, n, p; 4 i = a.getNumerator();// 分子 5 j = a.getDenominator();// 分母 6 k = b.getNumerator(); 7 s = b.getDenominator(); 8 m = i * s + j * k; 9 n = s * j; 10 p = Mathod.getGCD(m, n); 11 return Mathod.Reduction(m / p, n / p); 12 13 }
e.测试运行
PSP
PSP2.1 | Personal Software Process Stages | Estimated time(min) | actual time(min) |
Planning | 计划 | 12 | 10 |
· Estimate | 估计这个任务需要多少时间 | 120 | 115 |
Development | 开发 | 80 | 90 |
· Analysis | 需求分析 (包括学习新技术) | 10 | 10 |
· Design Spec | 生成设计文档 | 7 | 10 |
· Design Review | 设计复审 | 6 | 5 |
· Coding Standard | 代码规范 | 4 | 5 |
· Design | 具体设计 | 30 | 40 |
· Coding | 具体编码 | 35 | 40 |
· Code Review | 代码复审 | 10 | 15 |
· Test | 测试(自我测试,修改代码,提交修改) | 15 | 15 |
Reporting | 报告 | 20 | 25 |
· | 测试报告 | 5 | 5 |
· | 计算工作量 | 4 | 7 |
· | 并提出过程改进计划 | 4 | 4 |
总结
在做作业的时候,体会到了逻辑清晰是有多重要,不管编程能力怎么样,首先看见一道题目时不要急着就去做,想想如何做怎么做才是最重要的,如果逻辑清晰知道需要建几个类,每个类包含什么,每个类之间的关系是什么,就算个别方法不会写,大体的模子也能画出来,最后要就个别函数即可。下次我做作业的时候应该会多花时间在逻辑分析,流程图上。