个人作业1——四则运算题目生成程序

Coding地址:

https://git.coding.net/lianlian/96.1.git

题目:能自动生成小学四则运算题目的命令行 “软件”

第一部分:

a.需求分析:

  1. 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
  2. 运算符为 +, −, ×, ÷
  3. 并且要求能处理用户的输入,并判断对错,打分统计正确率。
  4. 要求能处理用户输入的真分数, 如 1/2, 5/12 等
  5. 使用 -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

 

第三部分:

小结:在百度加同学的帮助之下终于完成了这次的作业,程序主要实现基本的四则运算,不能支持多个运算符,代码真的需要不断地练习与尝试。

 

posted @ 2017-03-07 19:43  脸脸ya  阅读(185)  评论(2编辑  收藏  举报