標籤:bre 調用 menu ble ext pack 功能 system.in 介面
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(); }}
JAVA - ATM機程式