黑盒测试

**对电话账单来说,春季和秋季的标准时间与夏时制时间的转换会带来有意思的问题。春 季,这种转换发生在(3 月末,4 月初的)星期日凌晨 2:00 时,这时时钟要设置为凌晨 3: 00 时。对称的转换通常发生在 10 月最后一个星期日,时钟要从 2:59:59 调回到 2:00: 00。 请为采用以下费率计算用户的每月通话费: (1)通话时间<=20 分钟时,每分钟收费 0.05 美元,通话时间不到 1 分钟时按 1 分钟 计算。 (2)通话时间>20 分钟时,收费 1.00 美元,外加每分钟 0.10 美元,超过 20 分钟的部 分,不到 1 分钟时按 1 分钟计算。
假设: (1)通话计费时间从被叫方应答开始计算,到呼叫方挂机时结束。 (2)通话时间的秒数四舍五入到分钟。 (3)没有超过 20 个小时的通话。**

import java.util.Scanner;

public class bill {
    public static int[] starttime = new int[3];
    public static int[] endtime = new int[3];
    public static int[] poortime = new int[3];
    public static int time;
    public static float money;
    public static int year;
    public static int month;
    public static int day;
    public static int T = 0;
    public static int W = 1;
    public static int M = 1;
    public static void main(String []args){
        Scanner input=new Scanner(System.in);
        System.out.println("开始年月日:");
        year = input.nextInt();
        month = input.nextInt();
        day = input.nextInt();
        System.out.println("开始时间:");
        for(int i = 0;i < 3;i++){
            starttime[i] = input.nextInt();
        }
        System.out.println("结束时间:");
        for(int i = 0;i < 3;i++){
            endtime[i] = input.nextInt();
        }
        Date();
        Time();
        if(M == 0){
            System.out.println("时间是否经过变化了(是:1;否:0)");
            int n = input.nextInt();
            if(n == 1){
                time = time + 60;
            }
        }
        Money();
        System.out.println("话费为" + money + "美元.");
    }
    public static void Date(){
        if(month == 1 || month == 2)
        {
            year--;
            month += 12;
        }
        W = (day + 2 * month + 3 * (month + 1)/5 + year + year/4 - year/100 + year/400 + 1) % 7;//0是周日,其他对应
        if(month > 12)
        {
            year++;
            month -= 12;
        }
        if(W == 0){
            if(month == 3 && day >=25 && day <= 31){
                T = 1;
            }
            else if(month == 10 && day >=25 && day <= 31){
                T = 2;
            }
            else T = 0;
        }
        else T = 0;
    }
    public static void Time(){
        if(starttime[0] > endtime[0]){
            endtime[0] += 24;
        }
        for(int i = 0;i < 3;i++){
            poortime[i] = endtime[i] - starttime[i];
        }
        if(T == 0){
            if(W == 6 && endtime[0] >= 27){
                if(month == 3 && day >=24 && day <= 30){
                    poortime[0]--;
                }
                else if(month == 10 && day >=25 && day <= 31){
                    poortime[0]++;
                }
            }
            else if(W == 6 && endtime[0] >= 26 && endtime[0] <= 27 && month == 10 && day >=25 && day <= 31){
                M = 0;//判断时间是否经过变化了的
            }
        }
        else if(T == 1){
            if(starttime[0] <= 2 && endtime[0] >= 3){
                poortime[0]--;
            }
        }
        else if(T == 2){
            if(starttime[0] < 2 && endtime[0] >= 3){
                poortime[0]++;
            }
            else if(poortime[1] < 0 && starttime[0] == 2 && endtime[0] == 2){
                poortime[0]++;
            }
            else if(starttime[0] <= 2 && endtime[0] == 2){
                M = 0;//判断时间是否经过变化了的
            }
            else if(starttime[0] == 2  && endtime[0] > 2){
                M = 0;//判断时间是否经过变化了的
            }
        }
        time = poortime[0] * 60 + poortime[1];
        if(poortime[2] > 0){//为负数或0时不像前进,为正确值
            time++;
        }
    }
    public static void Money(){
        if(time <= 20){
            money = (float)(time * 0.05);
        }
        else{
            money =  (float) (1 + (time - 20) * 0.10);
        }
    }
}

1、等价类测试
等价类划分:
T1={通话时长不到1分钟};
T2={1分钟 ≤ 通话时长 ≤ 20分钟};
T3={通话时长大于20分钟};
S1={无时制转换};
S2={春时制与夏时制转换};
S3={夏时制与秋时制转换};

用例ID输入数据预期输出实际输出是否通过备注
12017 5 26 12 15 26 12 15 560.05话费为0.05美元.对应等价类T1,S1
22017 3 26 1 59 30 3 0 150.05话费为0.05美元.对应等价类T1,S2
32017 10 29 2 59 50 2 0 150.05话费为0.05美元.对应等价类T1,S3
42017 6 15 25 30 5 35 200.5话费为0.5美元.对应等价类T2,S1
52017 3 26 1 50 20 3 5 100.75话费为0.75美元.对应等价类T2,S2
62017 10 29 2 50 50 2 5 300.75话费为0.75美元.对应等价类T2,S3
72017 8 5 6 30 45 8 29 5011话费为11.0美元.对应等价类T3,S1
82017 3 26 1 30 25 3 50 257话费为7.0美元.对应等价类T3,S2
9*2017 10 28 23 50 25 3 50 2029话费为29.0美元.对应等价类T3,S3

2、边界值测试
边界值分析:
通话时长:{59s,1min,1min1s,19min,19min59s,20min,20min1s, 21min}
通话日期:{无时制转换时间,三月末四月初的一个星期日(春时制与夏时制转换),十月的最后一个星期日(夏时制与秋时制转换)}

用例ID输入数据预期输出实际输出是否通过备注
12017 10 5 5 20 10 5 21 90.05话费为0.05美元.59s,无转换
22017 3 26 1 59 50 3 0 490.05话费为0.05美元.59s,春夏转换
32017 10 29 2 59 40 2 0 390.05话费为0.05美元.59s,夏秋转换
42017 8 26 16 50 12 16 51 120.05话费为0.05美元.1min,无转换
52017 3 26 1 59 50 3 0 500.05话费为0.05美元.1min,春夏转换
62017 10 29 2 59 45 2 0 450.05话费为0.05美元.1min,夏秋转换
72017 5 6 21 25 56 21 26 570.1话费为0.1美元.1min1s,无转换
82017 3 26 1 59 20 3 0 210.1话费为0.1美元.1min1s,春夏转换
92017 10 29 2 59 35 2 0 360.1话费为0.1美元.1min1s,夏秋转换
102017 8 27 12 56 15 13 15 150.95话费为0.95美元.19min,无转换
112017 3 26 2 0 0 3 19 00.95话费为0.95美元.19min,春夏转换
122017 10 29 2 50 6 2 9 60.95话费为0.95美元.19min,夏秋转换
132017 1 9 11 10 1 11 30 01话费为1.0美元.19min59s,无转换
142017 3 26 1 50 20 3 10 191话费为1.0美元.19min59s,春夏转换
152017 10 29 2 50 50 2 10 491话费为1.0美元.19min59s,夏秋转换
162017 6 26 17 50 16 18 10 161话费为1.0美元.20min,无转换
172017 3 26 1 56 26 3 16 261话费为1.0美元.20min,春夏转换
182017 10 29 2 50 22 2 10 221话费为1.0美元.20min,夏秋转换
192017 2 3 23 50 26 0 10 271.1话费为1.1美元.20min1s,无转换
202017 3 26 1 55 26 3 15 271.1话费为1.1美元.20min1s,春夏转换
212017 10 29 2 50 59 2 11 01.1话费为1.1美元.20min1s,夏秋转换
222017 9 8 12 59 22 13 20 221.1话费为1.1美元.21min,无转换
232017 3 26 1 50 26 3 11 261.1话费为1.1美元.21min,春夏转换
242017 10 29 2 56 11 2 17 111.1话费为1.1美元.21min,夏秋转换
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值