软件测试——电话账单收费

对电话账单来说,春季和秋季的标准时间与夏时制时间的转换会带来有意思的问题。春季,这种转换发生在(3 月末,4 月初的)星期日凌晨 2:00 时,这时时钟要设置为凌晨 3:00 时。对称的转换通常发生在 10 月最后一个星期日,时钟要从 2:59:59 调回到 2:00:00。

 

请为采用以下费率计算用户的每月通话费:

 

(1)通话时间

 

(2)通话时间>20 分钟时,收费 1.00 美元,外加每分钟 0.10 美元,超过 20 分钟的部分,不到 1 分钟时按 1 分钟计算。假设:

 

(1)通话计费时间从被叫方应答开始计算,到呼叫方挂机时结束。(2)通话时间的秒数四舍五入到分钟。

 

(3)没有超过 20 个小时的通话。

 

实现代码如下:

import java.io.*;
import java.text.DecimalFormat;
public class panduan{
public static int testweek(int Year,int Month,int Day) {
//利用公式判断某年某月某日为星期几
int iweek = 0;
int y=0,c=0,m=0,d=0;

if(Month == 1 || Month == 2) {
c=(Year-1)/100;
y=(Year-1)%100;
m=Month+12;
d=Day;
}

else {
c=Year/100;
y=Year%100;
m=Month;
d=Day;
}
        
iweek=y+y/4+c/4-2*c+26*(m+1)/10+d-1;
iweek=iweek>=0week%7):(iweek%7+7);
if(iweek == 0) {
iweek=7;
}
return iweek;
}

//判断日期是否为特殊时间段,并对通话时间进行处理
public static long testdate1(int Month,int Day,long Min) {
//boolean flag=false;
if(Month==3||Month==4) {
if(Day+7>31||Day+1 //判断是否为三月末、四月初的星期日
  Min=Min-60;  
}
}
return Min;
}

public static long testdate2(int Month,int Day,long Min){

if(Month==10) {
if(Day>=24&&Day //判断是否为10月最后一个星期日
  Min=Min+60;
}
}

return Min;
}
}

import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Scanner;
import java.util.Date;
public class sy {
  public static void main(String [] args) throws ParseException { 
        Scanner sc = new Scanner(System.in); 
        System.out.println(“请输入开始年:”); 
        int Byear = sc.nextInt(); 
        System.out.println(“请输入开始月:”); 
        int Bmonth = sc.nextInt(); 
        System.out.println(“请输入开始日:”); 
        int Bday = sc.nextInt();
        //后续判断需要用到“小时”,此处单独输入,下同
        System.out.println(“请输入开始时:”); 
        int Bhour = sc.nextInt();
        System.out.println(“请输入开始时分秒:”); 
        String Btime = sc.next(); 
       
       
        System.out.println(“请输入截止日:”); 
        int Oday = sc.nextInt(); 
        System.out.println(“请输入截止时:”); 
        int Ohour = sc.nextInt();
        System.out.println(“请输入截止时分秒:”); 
        String Otime = sc.next(); 
       
        
        double money;
        
        //计算开始时间与截止时间的差值
        SimpleDateFormat dfs = new SimpleDateFormat(“HH:mm:ss”);
        
        Date begin=dfs.parse(Btime);
        Date end = dfs.parse(Otime);
        long between=(end.getTime()-begin.getTime())/1000;//除以1000是为了转换成秒
        long min=between/60;
        //不足一分钟的按一分钟计算
        if(between%60>0){
        min=min+1;
        }
         
        //System.out.print(min);
        
        int week;
        //调用testweek函数判断为星期几
        week=panduan.testweek(Byear,Bmonth,Bday);
        //当前时间为星期天时,考虑特殊情况
        if(week==7){
        if(Bhour=3){
         /*当时间在2:00到3:00转换的区域内时,
         * 调用testdate1函数进一步判断是否为转换时间,
         * 并对通话时间进行相应处理
         */
        min=panduan.testdate1(Bmonth,Bday,min);
        }
        if(Bhour=2){
         /*当时间在2:59:59到2:00转换的区域内时,
         * 调用teatdate2函数进一步判断是否为转换时间,
         * 并对通话时间进行相应处理
         */
        min=panduan.testdate2(Bmonth,Bday,min);
        }
       //此处输出一下计算出来的时间,看是否正确
       // System.out.println(“时间”+min);
        
        if(min //当通话时间不超过20分钟时,计算费用
money=0.05*min;
}
else {
//当通话时间超过20分钟时,计算费用
money=1+0.1*min;


}
//将double类型的money的值保留小数点后三位输出
DecimalFormat df = new DecimalFormat(“0.000”);
String mmoney = df.format(money);
System.out.printf(“电话费用一共为:”+mmoney);
}
        
  }

}

总结:

当通话时期为10月最后一个星期日时,如果通话开始时间为2:20,截止时间为2:30,不能确定通话时长是10分钟还是70分钟,程序中直接作70分钟处理。

后续仍需改进。

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览93773 人正在系统学习中 相关资源:夏软还原大师v3.4.0.1116官方免费安装版-其它代码类资源-CSDN文库

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2017年2月15日
下一篇 2017年2月15日

相关推荐