首页 > 代码库 > 第二次作业_105032014078

第二次作业_105032014078

1.测试帖链接:http://www.cnblogs.com/mtLin/p/6573264.html

2.测试人员提出的问题、发现的缺陷

      (1)计算佣金时,手机膜的计算方式错误;

      (2)对输入的字符串的检查不够严格。当输入纯数字的字符串且大小大于int类型的最大值时程序崩溃;

      (3)在计算佣金时,超出1000且小于1800的那部分按照0.15计算佣金,而不是全部佣金都按照0.15计算,销售金额超出1800时,超出1000小于1800的那部分按照0.15计算,超出1800的那部分按照0.2计算。而不是全部销售金额按照0.2计算佣金。

3.修正后的代码清单

(1)计算佣金时,手机膜的计算方式修改。

    //计算销售额(这里出现错误,将计算手机膜的钱数算成了耳机的钱数,已修改)
    double salesAmount = headphonePrice*Integer.valueOf(headphone).intValue()
            +shellPrice*Integer.valueOf(shell).intValue()
            +protctorPrice*Integer.valueOf(protctor).intValue();

(2)加强对输入字符串的检查,控制输入为纯数字且不为负数。

//输入数量并检查输入是否符合要求(控制输入的只能为纯数字,且不能为负数,已修改)
public String Input(String string) {
    Scanner scanner = new Scanner(System.in);
    String s = scanner.nextLine().trim();
    if (s.matches("[0-9]+")&&s.length()<=8) {
        int num = Integer.valueOf(s).intValue();
     if (num<0) {
        System.out.println("输入的数量不满足要求,请重新输入!");
        num = Integer.valueOf(scanner.nextLine().trim()).intValue();
        }
        return s;
}else{
    System.out.println("输入的数量不满足要求,请重新输入!");
    s = scanner.nextLine().trim();
}
    return s;
}

(3)在计算佣金时,修改了计算方法

    //判断销售额(计算方法不正确,已修改)
    if (salesAmount<1000&&salesAmount>=0) {
        commission=salesAmount*0.1;
    }else if (salesAmount>=1000&&salesAmount<1800) {
        commission = (salesAmount-1000)*0.15+100;
    }else if (salesAmount>=1800) 
    {
        commission = (salesAmount-1800)*0.2+220;
    }
    return commission;
}

4.修正后心得体会

(1)代码的变更:

修改了手机膜计算方法,原本只控制了输入数量不能为负数,修改后新增了对小数点、字母等其他字符输入打的控制,最后修改了计算佣金的方法。

(2)分析出现缺陷的原因:

    第一个缺陷出现的原因是粗心,在复制前面计算耳机方法的代码的时候忘记修改括号里面的;

    第二个缺陷出现的原因是没有考虑周全,只控制输入不能为负数,没考虑到只能输入纯数字以及数字的长度;

    第三个缺陷出现的原因是对题目的需求理解不够充分,导致佣金计算方法错误。

(3)对这部分教材内容的学习心得

最深的体会是需要细心,对题目的理解要深入,根据需求来设计,以测试的角度来寻找自己的缺陷。

附修改后完整代码:

package Practiseone;

import java.util.Scanner;

public class Commission_caculator {

    public static final int headphonePrice = 80;
    public static final int shellPrice = 10;
    public static final int protctorPrice = 8;
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Commission_caculator commission_caculator = new Commission_caculator();
        System.out.println("请分别输入三种手机配件的销售情况");
        System.out.println("耳机数量:");
        String headphoneNum = commission_caculator.Input(null);
        System.out.println("手机壳数量:");
        String shellNum = commission_caculator.Input(null);
        System.out.println("手机贴膜数量:");
        String protctorNum = commission_caculator.Input(null);                    
        double commission = commission_caculator.Commission(headphoneNum, shellNum, protctorNum);
        String commission_String=Double.toString(commission);
        System.out.println("销售佣金为:"+commission);
    }

//输入数量并检查输入是否符合要求(控制输入的只能为纯数字,且不能为负数,已修改)
public String Input(String string) {
    Scanner scanner = new Scanner(System.in);
    String s = scanner.nextLine().trim();
    if (s.matches("[0-9]+")&&s.length()<=8) {
        int num = Integer.valueOf(s).intValue();
     if (num<0) {
        System.out.println("输入的数量不满足要求,请重新输入!");
        num = Integer.valueOf(scanner.nextLine().trim()).intValue();
        }
        return s;
}else{
    System.out.println("输入的数量不满足要求,请重新输入!");
    s = scanner.nextLine().trim();
}
    return s;
}
    
//计算佣金
public double Commission(String headphone,String shell,String protctor)
{    
    //定义一个变量存储佣金
    double commission = 0;
    //计算销售额(这里出现错误,将计算手机膜的钱数算成了耳机的钱数,已修改)
    double salesAmount = headphonePrice*Integer.valueOf(headphone).intValue()
            +shellPrice*Integer.valueOf(shell).intValue()
            +protctorPrice*Integer.valueOf(protctor).intValue();
    //判断销售额(计算方法不正确,已修改)
    if (salesAmount<1000&&salesAmount>=0) {
        commission=salesAmount*0.1;
    }else if (salesAmount>=1000&&salesAmount<1800) {
        commission = (salesAmount-1000)*0.15+100;
    }else if (salesAmount>=1800) 
    {
        commission = (salesAmount-1800)*0.2+220;
    }
    return commission;
}
}

 

第二次作业_105032014078