用前面所知案例,簡單實現一個銀行卡系統。涉及的Java知識有:
interface(接口),abstract(抽象修飾符),extends(繼承),implements(接口的實現),@Override(重寫)
案例具體要求:
要求實現銀行卡系統的銀聯接口
銀聯接口,用於描述銀聯統一制定的規則,該接口提供檢測密碼方法、取錢方法以及查詢餘額方法。工商銀行接口,用於描述工商銀行發行的卡片功能,在滿足銀聯接口的規則基礎上,增加了在線支付功能。農業銀行接口,用於描述中國農業銀行發行的卡片功能,在滿足銀聯接口的規則基礎上,增加了支付電話費的功能。另外,農行的卡的卡內餘額,允許最多透支2000。實現工商銀行接口和農業銀行接口,並進行測試。
代碼如下:
package cn.oopinterface.atm;/** * 銀聯接口,用於描述銀聯統一制定的規則,該接口提供檢測密碼方法、取錢方法以及查詢餘額方法。 * @author yflad-F */publicinterfaceUnion{//檢測密碼方法, 密碼為boolean類型publicabstractboolean checkPassword(int password);//取錢方法publicabstractboolean takeMoney(double money);//查詢餘額方法publicabstractdouble balance();}
package cn.oopinterface.atm;/** * 2. 工商銀行接口,用於描述工商銀行發行的卡片功能,在滿足銀聯接口的規則基礎上,增加了在線支付功能。 * @author yflad-F */publicinterface ICBC extendsUnion{//在線支付publicabstractboolean onlinPay(double money);}
package cn.oopinterface.atm;/** * 3. 農業銀行接口,用於描述中國農業銀行發行的卡片功能,在滿足銀聯接口的規則基礎上, * 增加了支付電話費的功能。另外,農行的卡的卡內餘額,允許最多透支2000。 * @author yflad-F */publicinterface ABC extendsUnion{//電話費publicabstractboolean phonePay(String tellno,double money);//信用額度publicabstractboolean credit(double money);}
接口的實現
package cn.oopinterface.atm;/** * 工商銀行的實現類 * @author yflad-F */publicclassICBCImplimplements ICBC{double money=2000;//卡裡的本金@Overridepublicboolean checkPassword(int password){//檢測密碼方法if(password==123456){returntrue;}returnfalse;}@Overridepublicboolean takeMoney(double money){//取錢方法//取出來的錢應該小於等於本金if(this.money>=money){this.money-=money;returntrue;}returnfalse;}@Overridepublicdouble balance(){//查詢餘額方法return money;}@Overridepublicboolean onlinPay(double money){//在線支付// 支付的金額應該小於等於剩餘的錢if(this.money>=money){this.money-=money;returntrue;}returnfalse;}}
package cn.oopinterface.atm;/** * 農業銀行的實現類 * @author yflad-F */publicclassABCImplimplements ABC{double money =2000;@Overridepublicboolean checkPassword(int password){//檢測密碼方法if(password==123456){returntrue;}returnfalse;}@Overridepublicboolean takeMoney(double money){//取錢方法//取出來的錢應該小於等於本金if(this.money+2000>=money){this.money-=money;returntrue;}returnfalse;}@Overridepublicdouble balance(){//查詢餘額方法return money;}@Overridepublicboolean phonePay(String tellno,double money){//電話費if(this.money+2000>=money){this.money-=money;returntrue;}else{System.out.println("電話號碼錯誤!請重新輸入:");}returnfalse;}@Overridepublicboolean credit(double money){//信用額度if(this.money+2000>=money){this.money-=money;returntrue;}returnfalse;}}
測試
package cn.oopinterface.atm;importjava.util.Scanner;/** * 工商銀行測試 * @author yflad-F */publicclassICBCTest{publicstaticvoid main(String[] args){ ICBC icbc =newICBCImpl();Scanner sc =newScanner(System.in);for(int i =1; i <=3; i++){System.out.println("請輸入銀行卡密碼:");int pwd = sc.nextInt();if(icbc.checkPassword(pwd)){while(true){System.out.println("1.查詢餘額 2.取出金額 3.在線支付 4.退出系統");int type = sc.nextInt();if(type ==1){System.out.println("餘額:"+icbc.balance()+" 元");}if(type ==2){System.out.println("請輸入你要取出的金額:");double m=sc.nextDouble();if(icbc.takeMoney(m)){System.out.println("提現成功!");System.out.println("餘額為:"+icbc.balance());}else{System.out.println("餘額不足!");}}if(type ==3){System.out.println("請輸入你要付款的金額:");double m=sc.nextDouble();if(icbc.onlinPay(m)){System.out.println("付款成功!");System.out.println("餘額為:"+icbc.balance()+" 元");}else{System.out.println("餘額不足!");}}if(type ==4){System.out.println("退出系統成功!");break;}}break;}else{if(i ==3){System.out.println("密碼錯誤次數超過三次,卡已鎖定!");break;}System.out.println("密碼錯誤,請重新輸入!");}}}}
package cn.oopinterface.atm;importjava.util.Scanner;/** * 農業銀行測試 * @author yflad-F */publicclassABCTest{publicstaticvoid main(String[] args){ ABC abc =newABCImpl();Scanner sc =newScanner(System.in);for(int i =1; i <=3; i++){System.out.println("請輸入銀行卡密碼:");int pwd = sc.nextInt();if(abc.checkPassword(pwd)){while(true){System.out.println("1.查詢餘額 2.取出金額 3.繳電話費 4.退出系統");int type = sc.nextInt();if(type ==1){System.out.println("餘額:"+ abc.balance()+" 元");}if(type ==2){System.out.println("請輸入你要取出的金額:");double m = sc.nextDouble();if(abc.takeMoney(m)){System.out.println("提現成功!");System.out.println("餘額為:"+ abc.balance());}else{System.out.println("餘額不足!");}}if(type ==3){System.out.println("請輸入你要充值的號碼:");String phone = sc.next();// 判斷電話號碼長度是否為11位if(phone.length()==11){// 進入到這說明可以充值System.out.println("請輸入充值金額:");double money = sc.nextDouble();if(abc.phonePay(phone, money)){System.out.println("支付成功!");System.out.println("餘額為:"+ abc.balance());}else{System.out.println("餘額不足!");}break;}else{}System.out.println("電話號碼錯誤,請重新繳費!");}if(type ==4){System.out.println("退出系統成功!");break;}}break;}else{if(i ==3){System.out.println("密碼錯誤次數超過三次,卡已鎖定!");break;}System.out.println("密碼錯誤,請重新輸入!");}}}}