ATM机程序
UnionPayTest.java
package oo.day06.work;public class UnionPayTest {}interface UnionPay{ //银联接口 public double getBalance(); //查询余额 public boolean drawMoney(double number); //取款 public boolean checkPwd(String input); //检查密码}interface ABC extends UnionPay{ //农行接口 /**支付电话费*/ public boolean payTelBill(String phoneNum,double sum); }interface CCB extends UnionPay { /**增加的支付燃气费功能*/ public void payGasBill(double number);}class ABCImpl implements ABC{ //农行卡 private double money; private String pwd; public ABCImpl(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 boolean checkPwd(String input) { if(pwd.equals(input)) return true; else return false; } public boolean payTelBill(String phoneNum,double sum){ if(sum <= money){ money -=sum; return true; } return false; }}/** * 类:用于描述建设银行实际发行的卡片 * 该卡片具有的功能来自于继承的已经符合银联规范的CCB接口 */class CCBImpl implements CCB { private double money; private String pwd; public CCBImpl(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 payGasBill(double number) { if(number < money){ money-=number; } } @Override public boolean checkPwd(String input) { if(pwd.equals(input)) return true; else return false; }}
TestUnionPay.java (用于测试上面的程序使用)
package oo.day06.work;import java.util.Scanner;/** * 测试实现接口后的类的方法调用 */public class TestUnionPay { public static void main(String[] args) { //ICBCImpl icbc = new ICBCImpl(2000,"123456"); //ICBC icbc = new ICBCImpl(2000,"123456"); //UnionPay icbc = new ICBCImpl(2000,"123456"); //UnionPay icbc = new ABCImpl(2000,"123456"); UnionPay ccb = new CCBImpl(2000,"123456"); //这里用了“向上造型” Scanner input = new Scanner(System.in); System.out.println("请输入密码:"); if(ccb.checkPwd(input.next())){ System.out.println("请输入金额:"); double num = Double.parseDouble(input.next()); if(ccb.drawMoney(num)){ System.out.println("取钱成功,卡余额为:"+ccb.getBalance()); } else{ System.out.println("取钱失败"); } }else{ System.out.println("密码错误"); } }}
ABCATMTest.java
package oo.day06.work;import java.util.Scanner;public class ABCATMTest {}/** * ABCATM机类,用于描述模拟插入银行卡后的操作 */class ABCATM { private UnionPay card; public void insertCard(UnionPay userCard){ if (card == null) { card = userCard; } } private void outCard(){ card = null; } private void showBalance(){ System.out.println("当前余额是:" + card.getBalance()); } private void takeMoney(){ Scanner input = new Scanner(System.in); System.out.println("请输入取款数目:"); double number = Double.parseDouble(input.next()); if(card.drawMoney(number)){ System.out.println("取款成功"); }else{ System.out.println("取款失败"); } } private void payTelBill(){ Scanner input = new Scanner(System.in); if(card instanceof ABC){ ABC abcCard = (ABC)card; //这里用了“向下造型”。 System.out.println("请输入电话 号码:"); String telNum = input.next(); System.out.println("请输入缴费额:"); double sum = Double.parseDouble(input.next()); if(abcCard.payTelBill(telNum,sum)){ System.out.println("缴费成功"); }else{ System.out.println("缴费失败"); } }else{ System.out.println("您的卡不是农业银行卡,无法完成缴费"); } } public void allMenu(){ Scanner input = new Scanner(System.in); System.out.println("请输入密码:"); String pwd = input.next(); if(card.checkPwd(pwd)){ System.out.println("请选择功能:\n 1.查看余额 2.取款 3.缴电话费"); int choice = Integer.parseInt(input.next()); switch(choice){ case 1: showBalance(); break; case 2: takeMoney(); break; case 3: payTelBill(); break; default: System.out.println("非法输入"); } }else{ System.out.print("密码错误"); } this.outCard(); }}
TestATM.java (用于测试上面的程序使用)
package oo.day06.work;public class TestATM { public static void main(String[] args) { ABCATM atm =new ABCATM();// ICBCImpl icbc = new ICBCImpl(3000, "123456");//工商银行的卡 ABCImpl abc = new ABCImpl(1000, "123456");//农业银行的卡// CCBImpl abc = new CCBImpl(1000, "123456");//农业银行的卡 //atm.insertCard(icbc); atm.insertCard(abc); atm.allMenu(); }}