这篇博客主要是描述了银行卡的卡片功能。
1、银联接口,用于描述银联统一制定的规则,该接口提供检测密码的方法,取钱方法以及查询余额方法。
package com.Pay.www; /*接口:用于描述银联统一制定的规则*/ public interface UnionPay { /*查看余额*/ public double getBalance(); /*取钱*/ public boolean drawMoney(double number); /*检查密码*/ public boolean checkPwd(String input); }
2、工商银行接口,用于描述工商银行发行的卡片功能,在满足银联接口的规则基础上,增加在线支付功能。
package com.Pay.www; public interface ICBC extends UnionPay {
public void payOnline(double number);
}
3、农业银行接口,用于描述农业银行的卡片功能,在满足银联接口的规则基础上,增加电话支付电话费的功能,另外,农行卡的卡内余额,允许透支2000。
package com.Pay.www; /*接口:用于描述中国农业银行发行的卡片功能,在 满足银联的规则基础上,添加自己特有的功能*/ public interface ABC extends UnionPay { /*增加支付电话费的功能*/ public boolean payTellBill(String phoneNum,double sum); }
4、定义工商银行接口的实现类。
package com.Pay.www; public class ICBCImpl implements ICBC { private double money; private String pwd; public ICBCImpl(double money,String pwd) { this.money = money; this.pwd = pwd; } public double getBalance() { return money; } public boolean drawMoney(double number) { if (number <= money) { money -= number; return true; } return false; } public boolean checkPwd(String input) { if (pwd.equals(input)) { return true; } return false; } public void payOnline(double number) { if (number <= money) { money -= number; } } }
5、定义农业银行接口的实现类
package com.Pay.www; public class ABCImpl implements ABC { private double balance; private String password; public ABCImpl(double balance,String password){ this.balance = balance; this.password = password; } @Override public boolean drawMoney(double number) { if (balance - number >= -2000) { balance -= number; return true; } return false; } @Override public boolean checkPwd(String input) { if (password.equals(input)) { /* String作为一个基本类型来使用,equals() 和 == 是一样的,当 string作为 对象来使用时是不一样 的String s1 = new String("java");*/ return true; } return false; } public boolean payTellBill(String phoneNum, double sum) { if (phoneNum.length() == 11 && (balance - sum)>= -2000) { balance -= sum; return true; } return false; } public double getBalance() { return balance; } }
6、编写测试类
package com.Pay.www; import java.util.Scanner; public class TestUnionPay { public static void main(String[] args) { UnionPay icbc = new ICBCImpl(2000, "123456"); Scanner input = new Scanner(System.in); System.out.println("请输入银行卡密码"); if (icbc.checkPwd(input.next())) { System.out.println("请输入要取金额"); double sum = input.nextDouble(); //double sum = Double.parseDouble(input.next());把字符串转换为Double /*next是只读取一个字符串,之后顺序的进行读取,nextLine是一行一行的读取, 除此之外,nextInt是读取一个数值,nextDoubl是读取一个浮点类型的输入*/ if (icbc.drawMoney(sum)) { System.out.println("取款成功,余额为"+icbc.getBalance()); }else { System.out.println("取款失败"); } } input.close(); } }