编程语言
首页 > 编程语言> > 结队编程

结队编程

作者:互联网

软件工程实践第二次作业——结队编程

 

小学老师要每周给同学出300道四则运算练习题,要求:两个运算符,100以内的数字,不需要写答案。

 

1.结队编程中的分工:

代码编写:范杨(1759227)

复查代码、测试用例:丁文杰(1759224)

 

2.项目要求

  ①两个运算符

  ②100以内的数字

  ③不需要写出答案

  ④保证答案在0~100之间

  ⑤避免重复的题目

  ⑥具体定制(选择是否有乘除法、是否有括号、数值范围、加减有无负数、除法有无余数、是否支持分数、打印中每行的间隔可调整)

 

3.编写过程

3.1  编写前的分析:

这段程序我们选择使用JAVA语音进行编写,由于我们对JAVA还不是特别熟悉,而且有很多附加的要求,如具体定制等,编写前我们对其中一些要求并没有一个大致的算法构想,因此我们两人首先对如何编写这个代码进行了一系列的分析,把大致的算法代码构想清楚,并画了一个大致的流程图。

我们的估计编写时间为:基础功能(①~③)3小时,附加功能(④~⑥)6小时。

 

3.2 算法思想分析

①随机题目使用random函数进行数字和运算符号的随机输出。

②对产生的数字进行筛选,如果有减法运算,就让最后的结果f大于等于0;如果有除法运算,就让除法的结果没有余数。

③通过if让最后的结果处在0~100之间(不包括0,包括100)。

④把题目和答案用缓冲输出流输出到创建的result.txt文件中。

 

3.3编写及复查代码

本程序是使用了结队编程的方法,由范杨进行代码的编写,当范杨编写一部分代码后,再由丁文杰对代码进行复查,提出其中的一些问题,再由范杨进行修改。

复查过程中也遇到了一些问题。比如在对计算结果处在0~100中进行筛选的时候,由于是先出100道题,再对答案answer进行筛选,因此运行程序后,题目的数量会不足100题等问题。(*更多的问题详见 6.遇到的问题及解决方案)

 

4.代码

4.1程序代码

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.Scanner;
public class calculator {
    public static void main(String[] args) throws Exception {
        int x, y, i=0;
        int d1 = 0;
        System.out.println("请输入题目的数量");
        BufferedWriter BufferedWriterbw = new BufferedWriter(new FileWriter("result.txt"));
        BufferedWriterbw.write("begin\r\n");
        Scanner scan2 = new Scanner(System.in);
        x = scan2.nextInt();
        y=100;
        
        while(i<x)  {
            int a = (int) (Math.random() * y);// 随机生成一个1-10的整数
            int b = (int) (Math.random() * y);// 随机生成一个1-10的整数
            int e = (int) (Math.random() * y);// 随机生成一个1-10的整数
            int c = (int) (Math.random() * 4);// 随机生成一个1-4的整数,0表示加法,1表示减法,2表示乘法,3表示除法
            if (c == 0) {
                d1 = a + b+ e;
                if(d1<=100&&d1>0) {
                    i++;
                System.out.print(a + "+" + b + "+" + e + "= \n"   );
                BufferedWriterbw.write( a + "+" + b + "+" + e + "=" +d1+"\r\n"   );
            }
            }
            if (c == 1) {
                d1 = a -b +e;
                
                int f = a - b;
                
                    if(d1<=100&&d1>0&&f>=0) {i++;
                System.out.print(a + "-" + b + "+" + e + "= \n" );
                BufferedWriterbw.write( a + "-" + b + "+" + e + "=" +d1+"\r\n"  );
                }
            }
            
            if (c == 2) {
                d1 = a * b + e;
                if(d1<=100&&d1>0) {i++;
                System.out.print(a + "*" + b + "+" + e + "= \n" );
                BufferedWriterbw.write(a + "*" + b + "+" + e + "=" +d1+"\r\n"  );
            }
            }
            if (c == 3) {
                if(b!=0) {
                d1 = a / b * e;
                int h = a%b;
                
                    if(d1<=100&&d1>0&&h==0) {i++;
                System.out.print(a + "/" + b + "*" + e + "= \n" );
                BufferedWriterbw.write(a + "/" + b + "*" + e + "=" +d1+"\r\n"  );
                }
            }
            }
            
            /*if ((i + 1) % 3 == 0) {
                System.out.println();
            }*/

        }
         BufferedWriterbw.flush();
         BufferedWriterbw.close();
         scan2.close();
}

    }

 

 

4.2 运行结果

 

(自动生成的计算题)

 

 

 

(目录下会生成一个result.txt文件)

 

 

 

(result.txt文件中保存着含有答案的题目)

 

 

5.测试用例

该测试用例为黑盒测试用例,假设用户使用的操作系统为Win8。

描述功能如下:

  1. 用户在输入出题个数后,软件会自动生成对应个数的题目;
  2. 题目由两个操作符构成,且没有给出答案;
  3. 题目的答案自动生成在工程目录下的文件中;
  4. 题目的答案大于0且小于等于100。

 

表5-1 软件测试用例

用例ID

Cal-test-01

用例名称

计算题生成软件

用例描述

1. 用户在输入出题个数后,软件会自动生成对应个数的题目;

2.题目由两个操作符构成,且没有给出答案;

3.题目的答案自动生成在工程目录下的文件中;

4.题目的答案大于0且小于等于100。

用例入口

打开客户端文件,进入界面

 

测试用例ID

场景

测试步骤

预期结果

实际结果

Cal1

软件界面

打开客户端

显示“请输入题目的数量”;

与预期一致

Cal2

输入题目数量

输入题目数量100

显示100道计算题,题目由2个运算符构成,且没有答案;

与预期一致

Cal3

题目答案文件

打开题目答案文件

显示100道计算题,且有答案

与预期一致

               

 

 

6.遇到的问题及解决方案

在进行结队编程过程中,我们也遇到了一系列的问题,好在经过讨论后,问题还是得到了解决。

 

①   在代码编写前,我们就“谁来编代码”进行了一番讨论,由于我俩的编程能力都不是很强,为了更好的完成作业,我们在激烈的讨论后选择由范杨来编代码,由丁文杰进行代码复查以及测试;并且我们在用什么语言进行编写代码的问题上也产生分歧,不过最后还是决定使用刚刚学习了没多久的JAVA来编写这个程序。

②   由于学艺不精,我们在一些很奇怪的地方遇到了困难,导致项目的进程被拖延,远远超出原本预计的9小时,花费了许多时间。

③   因为eclipse没有自动添加包语句,所以出现运行错误

因此在package后面添加语句:

import java.io.BufferedWriter;

import java.io.FileWriter;

import java.util.Scanner;

 

 

④   由于自己学艺不精,在编写完程序之后,没有关闭输出流,虽不会影响程序的运行,结果不会改变,但是每次出题都会占用空间,导致空间上的浪费。

 

改正

添加语句:
BufferedWriterbw.flush();

BufferedWriterbw.close();

scan2.close();

 

 

⑤   起初用for循环来控制题目的数量,但只能仅仅控制数量,无法实现答案在0~100之间,虽然可以用if语句来控制,但是无法保证规定的题目数量,因为它先出题再筛选,以至于最后出的题目数不能等于规定的数量。

改正:

 

 

 

7.心得体会

 

 

标签:题目,代码,编程,编写,结队,100
来源: https://www.cnblogs.com/wenjieding/p/10561023.html