zoukankan      html  css  js  c++  java
  • 《构建之法》第三次作业(张英和安坤组)

    一、题目

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

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

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

    二、需求分析

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

    三、   基本需求

    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%

  • 相关阅读:
    Intellij IDEA 关闭阿里编码规约“请不要使用行尾注释”提醒
    VS 进行了无法编译的编辑
    IntelliJ IDEA lombok log 报红
    SQL Server 事务执行SQL
    Linux 检查应用不在现就重启
    Java入门5.2---String类、StringBuffer类、StringBuilder类、System类、Data类、SimpleDataFormat类、Calendar类、Math类、BigInteger类与BigDecimal类
    为什么要进行补偿
    解决flex布局中 space-between方法的排版问题
    桑基图的使用场景
    清蒸罗非鱼的做法和步骤
  • 原文地址:https://www.cnblogs.com/zhangying123/p/4448612.html
Copyright © 2011-2022 走看看