第四次作业:个人项目-小学四则运算 “软件”之初版

作业要求来源于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2186

我的github地址:https://github.com/ShumeiHe/FourArithmetic

 

一、需求分析
    
具体要求:任何编程语言都可以,命令行程序接受一个数字输入,然后输出相应数目的四则运算题目和答案。例如输入数字是 30, 那就输出 30 道题目和答案。 运算式子必须至少有两个运算符,运算数字是在 100 之内的正整数,答案不能是负数。并且要求能处理用户的输入,并判断对错,打分统计。

 

二、功能设计

  1.  输出相应数目的四则运算(加减乘除)题目及答案;

  2. 随机产生具有三个操作数和两个运算符的四则运算;

  3. 四则运算的答案不能为负数,如果为负数则重新输入该道题目;

  4. 对用户的输入答案进行判断,正确则加分,错误则不加分,并予以提示。满分为100分;

  5. 输出用户的总分数。

 

三、详细设计

  1. 数据处理:因为除法运算的缘故,所以输出结果全部为保留小数两位的浮点数。

  随机产生三个操作数并且保存至操作数数组中:

private static int[] number = new int[3];  //操作数数组。

   随机产生两个运算符并且保存至运算符数组中:

private static int[] operate = new int[2];  //运算符数组,以两个运算符操作

  将产生的操作数与运算符按一定的顺序存至题目数组中:

private static String[][] topic = new String[100][7];  //题目数组。
for (int jnum = 0; jnum < 3; jnum++) {
    topic[i][2 * jnum] = String.valueOf(number[jnum]); //题目数组与操作数数组索引值关系。
}
for (int jop = 0; jop < 2; jop++) {
    topic[i][2 * jop + 1] = getOp(operate[jop]);
}

  2.运算符的优先级:

 //加减乘除运算,优先级运算。
    public static double operation(int randomop, double num1, double num2) {
        if (randomop == 0) {
            return num1 + num2;
        }
        if (randomop == 1) {
            return num1 - num2;
        }
        if (randomop == 2) {
            return num1 * num2;
        }
        if (randomop == 3) {
            return num1 / num2;
        }
        return 0;

  3.运算:遍历运算符数组,

  ①  若第二个运算符operate[1]为乘法或者除法运算,则第二个操作数number[1]与第三个操作数number[2]进行运算得出的结果再与第一个操作数number[0]运算;

  ②  若第二个运算符operate[1]不为乘法或者除法运算,则按顺序运算。

public static double getResult() {
        //第二个运算符为乘法或者除法运算。
        if (operate[1] >= 2) {
            double result = operation(operate[1], number[1], number[2]);
            result = operation(operate[0], number[0], result);
            result=Double.valueOf(String.format("%10.2f", result));//保留两位小数。
            return result;
        }
        //顺序运算。
        else {
            double result = operation(operate[0], number[0], number[1]);
            result = operation(operate[1], result, number[2]);
            result=Double.valueOf(String.format("%10.2f", result));
            return result;
        }

  4.输入运算结果:判断答案与输入的结果是否相等,若相等则加分,若不相等则不加分。

 

四、运行结果

    随机产生五道四则运算:

      

 

五、问题及解决办法

       1. 该项目的核心是运算符的优先级运算。本次所使用的方法仅考虑到两个运算符运算,并未考虑到两个以上的运算符的运算。在此之前,我考虑到两个以上的运算符运算的需求,但是本人发现代码复杂逻辑混乱,而且使用的是java编程语言,并没有c语言的指针好用,短时间内没有找到解决方法,所以就放弃了该需求。

如下图:(使用指针明显更方便,如果使用数组直接置空,空值是不能进行运算)

 

六、过程耗时估计统计表

 

PSP2.1

Personal Software Process Stages

Time Senior Studenh

Timeh

Planning

计划

0.5

0.5

Estimate

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

5

4

Development

开发

4

3

Analysis

需求分析

0.5

0.5

Design Spec

生成设计文档

0

0

Design Review

设计复审

0.5

0.5

Coding Standard

代码规范

0.5

0.5

Design

具体设计

0.5

1

Coding

具体编码

4

3

Code Review

代码复审

1

0.5

Test

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

0.5

1

Reporting

报告

1

1

 

测试报告

0

0

 

计算工作量

5

4

 

并提出过程修改计划

0

0

posted @ 2018-10-14 21:14  不疯魔不成魔  阅读(224)  评论(1编辑  收藏  举报