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(); } }