Coding地址:
https://git.coding.net/lianlian/96.1.git
题目:能自动生成小学四则运算题目的命令行 “软件”
第一部分:
a.需求分析:
- 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
- 运算符为 +, −, ×, ÷
- 并且要求能处理用户的输入,并判断对错,打分统计正确率。
- 要求能处理用户输入的真分数, 如 1/2, 5/12 等
-
使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
Myapp.exe -n 10
b.功能设计:
基本功能:实现简单的四则运算出题
扩展功能:验证对错,如果错误显示正确答案并统计正确率
高级功能:能够进行记时
c.设计实现:
分数类 Fraction:
属性:numerator//分子
denominator//分母
方法:creatfraction() //创建分数
GCD(int m, int n) //计算最大公约数
Reduction(int m, int n) //约分
compare(String m, String n) //比较输入结果与答案
计算类 Calculator:
方法:add(Fraction a, Fraction b) //加法
sub(Fraction a, Fraction b) //减法
mul(Fraction a, Fraction b)//乘法
div(Fraction a, Fraction b)//除法
运行类 Test:
main函数执行
d.代码说明:
计算公约数:
public static int GCD(int m, int n) {//辗转相除法
while (m % n != 0) {
int t = m % n;
m = n;
n = t;
}
return n;
}
约分:
public static String Reduction(int m, int n) //约分
{
String t;
if (n == 1) {
t = m + "";
} else {
t = (m) + "" + "/" + (n) + "";
}
return t;
}
加法运算:
public static String add(Fraction a, Fraction b) //加法
{
int m = a.getNumerator() *b.getDenominator() + a.getDenominator() * b.getNumerator();
int n = a.getDenominator() * b.getDenominator();
int t = Fraction.GCD(m,n);
return Fraction.Reduction(m / t, n / t);
}
减法运算:
public static String sub(Fraction a, Fraction b)//减法
{
int m = a.getNumerator() * b.getDenominator() - a.getDenominator() * b.getNumerator();
int n = a.getDenominator() * b.getDenominator();
int t = Fraction.GCD(m,n);
return Fraction.Reduction(m / t, n / t);
}
乘法运算:
public static String mul(Fraction a, Fraction b)//乘法
{
int m = a.getNumerator() * b.getNumerator();
int n = a.getDenominator() * b.getDenominator();
int t = Fraction.GCD(m,n);
return Fraction.Reduction(m / t, n / t);
}
除法部分 :
public static String div(Fraction a, Fraction b)//除法
{
int m = a.getNumerator() * b.getDenominator();
int n = a.getDenominator() * b.getNumerator();
int t = Fraction.GCD(m,n);
return Fraction.Reduction(m / t, n / t);
}
验证对错,如果错误显示正确答案:
public static boolean compare(String m, String n) //比较输入结果与答案
{
if (m.equals(n))
{System.out.println("恭喜你,回答正确!");
return true;}
else
{
System.out.println("回答错误,再接再厉,正确答案是:" + n);
return false;
}
}
统计正确率、记时:
public class Test {
@SuppressWarnings("resource")
public static void main(String[] args) {
Fraction f1 = new Fraction();
Fraction f2 = new Fraction();
int operator;
int right=0,wrong=0;
String answer;
Scanner s1 = new Scanner(System.in);
System.out.println("请输入想要完成的题目数 :");
int i = s1.nextInt();
long begin = System.currentTimeMillis();
...
long end = System.currentTimeMillis();
long hour = (end - begin)/3600000;
long minute = (end - begin-hour*36000000)/60000;
long second = (end - begin-hour*36000000-minute*60000)/1000;
double total = (double)right+wrong;
System.out.println("\n您已完成练习!");
System.out.println("你所用的时间是:" + hour+"小时"+minute+"分钟"+ second+"秒");
System.out.println('\n'+"一共有"+i+"题"+" ,"+"做对"+right+"题"+" ,"+"做错"+wrong+"题");
System.out.printf("正确率:%f",right/total *100 );
System.out.println("%");
}
}
e测试运行:
第二部分:
展示PSP:
PSP2.1 |
Personal Software Process Stages |
Time (%) Senior Student |
Time (%) |
Planning |
计划 |
2h |
2h |
· Estimate |
估计这个任务需要多少时间 |
40h |
43h |
· Analysis |
需求分析 (包括学习新技术) |
4h |
5h |
· Coding Standard |
代码规范 |
1.5h |
2h |
· Design |
具体设计 |
3h |
2h |
· Coding |
具体编码 |
27h |
30h |
· Test |
测试(自我测试,修改代码,提交修改) |
1.5h |
1h |
Reporting |
报告 |
1h |
1h |
第三部分:
小结:在百度加同学的帮助之下终于完成了这次的作业,程序主要实现基本的四则运算,不能支持多个运算符,代码真的需要不断地练习与尝试。