《构建之法》第三次作业(张英和安坤组)

一、题目

请编写一个能自动生成小学四则运算题目的 “软件”。

让程序能接受用户输入答案,并判定对错。

最后给出总共 对/错 的数量。

二、需求分析

    本程序适合小学生,锻炼自己的运算能力。练习的软件。操作方便。

三、   基本需求

1、  显示题目数量

2、  逐个自动显示题目

3、  用户可以逐题解答

4、  显示答题对错

5、 统计对错数量 

四、扩展功能

(1)可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8

(2)程序可以设置答题时间,时间设置为整数,单位为秒,最大不能超过120秒,若超过了答题时间未答题,则提示:时间已到,不能答题。

五、代码实现

import java.util.Scanner;

import java.util.*;

 

public class ruanjian {

    public static void main(String[] args)

    {

       int i = 1, t1, t2, h = 0;

       String e = String.format("%tM", new Date());

       t2 = Integer.parseInt(e);

       size myTest = new size();

       while (i <= 20)

       {

           i = i + 1;

           String k = String.format("%tM", new Date());

           t1 = Integer.parseInt(k);

           if (t1 - t2 >20)

           {

              System.out.println("测试结束!!!");

              break;

           } else

           {

              h = myTest.chouti();

           }

       }

       int tempI = i - h - 2;

       System.out.println("您一共答对了" + h + "道题");

       System.out.println("您一共答错了" + tempI + "道题");

    }

}

 

上面是主代码程序及运行结果。

import java.util.Scanner;

 

class size {

    int h, g;

   

    size(){

       h=0;

       g=0;

    }

    public int  chouti()

    {

       double D;

       int a,b,s;

       a = suiji(-100, 100);

       b = suiji(-100, 100);

       s = suiji(1, 4);

       switch (s)

       {

       case 1:

           if (a > 0 & b > 0)

           {

              System.out.println(a + "+" + b + "=");

           } else if (a < 0 & b > 0) {

              System.out.println("(" + a + ")+" + b + "=");

           } else if (b < 0 & a > 0) {

              System.out.println(a + "+(" + b + ")=");

           } else {

              System.out.println("(" + a + ")+(" + b + ")=");

           }

           Scanner reader = new Scanner(System.in);

           D = reader.nextInt();

           if (D == a + b)

           {

              System.out.println("答对了,你真聪明!");

              h++;

           } else {

              System.out.println("答错了,正确答案是:" + (a + b));

              g++;

           }

           break;

       case 2:

           if (a > 0 & b > 0)

           {

              System.out.println(a + "*" + b + "=");

           } else if (a < 0 & b > 0)

           {

              System.out.println("(" + a + ")*" + b + "=");

           } else if (b < 0 & a > 0)

           {

              System.out.println(a + "*(" + b + ")=");

           } else

           {

              System.out.println("(" + a + ")*(" + b + ")=");

           }

           Scanner reader1 = new Scanner(System.in);

           D = reader1.nextInt();

           if (D == a * b)

           {

              System.out.println("答对了,你真聪明!");

              h++;

           } else {

              System.out.println("答错了,正确答案是:" + (a * b));

              g++;

           }

           break;

       case 3:

           if (a > 0 & b > 0)

           {

              System.out.println(a + "-" + b + "=");

           } else if (a < 0 & b > 0)

           {

              System.out.println("(" + a + ")-" + b + "=");

           } else if (b < 0 & a > 0)

           {

              System.out.println(a + "-(" + b + ")=");

           } else

           {

              System.out.println("(" + a + ")-(" + b + ")=");

           }

           Scanner reader2 = new Scanner(System.in);

           D = reader2.nextInt();

           if (D == a - b)

           {

              System.out.println("答对了,你真聪明!");

              h++;

           } else {

              System.out.println("答错了,正确答案是:" + (a - b));

              g++;

           }

           break;

       case 4:

           if (a > 0 & b > 0)

           {

              System.out.println(a + "/" + b + "=");

           } else if (a < 0 & b > 0)

           {

              System.out.println("(" + a + ")/" + b + "=");

           } else if (b < 0 & a > 0) {

              System.out.println(a + "/(" + b + ")=");

           } else {

              System.out.println("(" + a + ")/(" + b + ")=");

           }

           Scanner reader3 = new Scanner(System.in);

           D = reader3.nextInt();

           if (D == a / b) {

              System.out.println("答对了,你真聪明!");

              h++;

           } else {

              System.out.println("答错了,正确答案是:" + (a / b));

              g++;

           }

           break;

       }

       return h;

    }

    public static int suiji(int num1, int num2)

    {

       int C = (int) num1 + (int) (Math.random() * (num2 - num1));

       return C;

    }

}

 

上面是封装的子类代码

import java.util.Scanner;

public class ceshi {

    public static void main(String[] args) {

       System.out.println("设a=5,b=-6");

       int a = 5, b = -6;

       for (int s = 1; s <= 4; s++)

           switch (s) {

           case 1:

              if (a > 0 & b > 0) {

                  System.out.println(a + "+" + b + "=" + (a + b));

              } else if (a < 0 & b > 0) {

                  System.out.println("(" + a + ")+" + b + "=" + (a + b));

              } else if (b < 0 & a > 0) {

                  System.out.println(a + "+(" + b + ")=" + (a + b));

              } else {

                  System.out.println("(" + a + ")+(" + b + ")=" + (a + b));

              }

              break;

           case 2:

              if (a > 0 & b > 0) {

                  System.out.println(a + "*" + b + "=" + (a * b));

              } else if (a < 0 & b > 0) {

                  System.out.println("(" + a + ")*" + b + "=" + (a * b));

              } else if (b < 0 & a > 0) {

                  System.out.println(a + "*(" + b + ")=" + (a * b));

              } else {

                  System.out.println("(" + a + ")*(" + b + ")=" + (a * b));

              }

              break;

           case 3:

              if (a > 0 & b > 0) {

                  System.out.println(a + "-" + b + "=" + (a - b));

              } else if (a < 0 & b > 0) {

                  System.out.println("(" + a + ")-" + b + "=" + (a - b));

              } else if (b < 0 & a > 0) {

                  System.out.println(a + "-(" + b + ")=" + (a - b));

              } else {

                  System.out.println("(" + a + ")-(" + b + ")=" + (a - b));

              }

              break;

           case 4:

              if (a > 0 & b > 0) {

                  System.out.println(a + "/" + b + "=" + (a / b));

              } else if (a < 0 & b > 0) {

                  System.out.println("(" + a + ")/" + b + "=" + (a / b));

              } else if (b < 0 & a > 0) {

                  System.out.println(a + "/(" + b + ")=" + (a / b));

              } else {

                  System.out.println("(" + a + ")/(" + b + ")=" + (a / b));

              }

              break;

           }

    }

}

 

上面是对四则运算算法的单元测试,直接显示结果。

这个程序我还加了一个定时的功能,如果在20分钟内做不完,程序会自动跳出,也会显示答对打错题目数

 

六、两人合作步骤:

     本次作业是在第二次作业的基础上进一步修改和加以完善的,张英和安坤同学积极组成了一组进行了相应的讨论与改进。

     1、我们拿到本作业后,一起讨论此次作业,针对这个程序进行了需求分析,但是在原有的基础上改动不是很大。

     2、代码规范设计方面,我们两位同学认真阅读教材Page57:4.2-4.3节中内容,进行了一系列讨论,在最后我们决定修改安坤同学的java代码,同时我们也邀请了,本学院张艳老师的帮助,进行了一系列强化,使之符合 “代码风格和设计规范”的基本要求,并 采用模块化的思想,我们将函数和一些变量封装起来了。

     3、其次,我们认真阅读教材Page21:2.1.1节内容,并进行了对我们的程序一系列相关测试;我们两位同学一直在共同的探索,改进的问题。

     4、在探索与改进的过程中,我们对该软件的功能进行了扩展,每一次测试结束会给出本次测试的时间,或者在120秒时间内未完成给出的题目,则会显示时间已到,不能答题!;

     5、我们进行的每一过程,都在不断的探索,两个人从合作——分工——合作过程中完成本题目,一起商讨,一起修改代码,一起测试,互相监督并指出相应的问题等等。最后,我们二人也对本次合作进行了总结,收获很多!

七、分析和总结

本题目,主要是设计这块比较重要,我充分感觉到一个程序不止是编程,其实设计分析更重要。

八、PSP统计表格

Personal Software Process Stages

耗时

耗时百分比

需求分析

25

 7.14%

设计

 67

 19.14%

代码实现

 127

 36.29%

测试

 36

 10.29%

代码复审

27

7.71%

代码规范

39

11.14%

分析总结

 29

 8.29%

posted @ 2015-04-22 20:49  张英1  阅读(154)  评论(1编辑  收藏  举报