Java语言具有功能强大和简单易用两个特征,是一门面向对象编程语言,是学会java开发,我们可以利用java开发很多应用程序,那java如何实现用银行卡支付?下面来我们就来给大家讲解一下。
步骤一:定义银联接口
首先,定义名为UnionPay的银联接口,用于描述银联统一制定的规则;然后,在该接口中定义getBalance方法表示获取余额功能、定义drawMoney表示取钱功能、定义checkPwd表示检查密码功能,代码如下所示:
/** *接口:用于描述银联统一制定的规则 */ public interface UnionPay { /**查看余额*/ public doublea getBalance(); /**取钱*/ public boolean drawMoney(double number); /**检查密码*/ public boolean checkPwd(String input); }
步骤二:定义工商银行接口
定义名为ICBC的接口表示工商银行接口,用于描述中国工商银行发行的卡片功能,该接口需要满足银联接口的功能,因此,继承银联接口;该接口在具备银联接口的功能基础上,要求增加在线支付功能,所以,在该接口中定义payOnline方法,表示此功能,代码如下所示:
/** *接口:用于描述工商银行发行的卡片功能,在满足 *银联的规则基础上,添加自己特有的功能 */ public interface ICBC extends UnionPay { /**增加的在线支付功能*/ public void payOnline(double number); }
步骤三:定义农业银行接口
定义名为ABC的接口表示农业银行接口,用于描述中国农业银行发行的卡片功能,该接口需要满足银联接口的功能,因此,需要继承银联接口;该接口在具备银联接口的功能基础上,要求增加在线支付功能,所以,在该接口中定义payTelBill方法,表示此功能,代码如下所示:
/** *接口:用于描述中国农业银行发行的卡片功能,在满足银联的规则基础上,添加 *添加自己特有的功能 */ public interface ABC extends UnionPay { /**增加支付电话费的功能*/ public void payTelBill(String phoneNum, double num); }
步骤四:定义工商银行接口的实现类
首先,定义为名ICBCImpl的类,该类实现ICBC接口;另外,分析问题中的取钱功能,需要对余额信息进行存储,插入卡片以后需要输入密码后才能进行取钱,因此,在ICBCImpl类中定义double类型属性money表示账户余额以及String类型属性pwd表示卡片的密码,代码如下所示:
/** *类:用于描述工商银行实际发行的卡片 *该卡片具有的功能来自于继承的已经符合银联规范的ICBC接口 */ public class ICBCImpl implements ICBC { private double money; private String pwd; public ICBCImpl(double money, String pwd) { this.money = money; this.pwd = pwd; } }
步骤五:实现检查密码、获取余额、取款、在线支付功能
在ICBCImpl类实现checkPwd方法、getBalance方法、drawMoney方法以及payOnline方法,代码如下所示:
/** *类:用于描述工商银行实际发行的卡片 *该卡片具有的功能来自于继承的已经符合银联规范的ICBC接口 */ public class ICBCImpl implements ICBC { private double money; private String pwd; public ICBCImpl(double money, String pwd) { this.money = money; this.pwd = pwd; } @Override public double getBalance() { return money; } @Override public boolean drawMoney(double number) { if (number <= money) { money -= number; return true; } return false; } @Override public void payOnline(double number) { if (number < money) { < p = "" > money -= number; } } @Override public boolean checkPwd(String input) { if (pwd.equals(input)) { return true; } else { return false; } } }
以上四个方法的实现逻辑为:
取钱功能的实现为在当前余额的基础上减去要取的金额,如drawMoney方法的实现。
在线付款功能的实现为当前余额的基础上减去要支付的金额,如payOnline方法的实现。
检查密码功能的实现检查卡的密码与用户输入的密码是否相等,如果相等返回true,否则返回false,如checkPwd方法的实现。
获取余额功能的实现为类ICBCImpl,类中money属性即表示余额,将其返回即可,如getBalance方法的实现。
步骤六:定义农业银行接口的实现类
实现农业银行接口的过程与实现工行接口的过程类似,实现的过程中注意,农行卡的卡内余额可以透支2000,代码如下所示:
/** *类:用于描述农业银行实际发行的卡片 *该卡片具有的功能来自于继承的已经符合银联规范的ABC接口 */ public class ABCImpl implements ABC { /**卡内余额,允许最多透支2000*/ private double balance; /**账号密码*/ private String password; public ABCImpl(double balance, String password) { this.balance = balance; this.password = password; } @Override public double getBalance() { return balance; } @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)) { return true; } else { return false; } } @Override public boolean payTelBill(String phoneNum, double sum) { if (phoneNum.length() == 11 && (balance - sum) >= -2000) { balance -= sum; return true; } return false; } }
步骤七:测试
新建TestUnionPay类,测试银联接口提供的方法,是否成功实现,代码如下所示:
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 = Double.parseDouble(input.next()); if (icbc.drawMoney(num)) { System.out.println("取钱成功,卡余额为:" + icbc.getBalance()); } else { System.out.println("取钱失败"); } } else { System.out.println("密码错误"); } input.close(); } }
每一个java开发应用都需要有清晰的思维,因此大家在开发之前,一定要知道所需要实现的功能,将思维理清,代码写正确,一个项目就完成了。最后大家如果想要了解更多java实例知识,敬请关注奇Q工具网。
推荐阅读: