java-銀行項(xiàng)目分析_第1頁
java-銀行項(xiàng)目分析_第2頁
java-銀行項(xiàng)目分析_第3頁
java-銀行項(xiàng)目分析_第4頁
java-銀行項(xiàng)目分析_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、項(xiàng)目名稱 :Bank Account Management System 銀行賬戶管理系統(tǒng) 簡(jiǎn)稱 BAM 項(xiàng)目描述 : 這是一個(gè)銀行賬戶管理系統(tǒng) ,用戶可以操作自己的銀行賬戶 .項(xiàng)目實(shí)施方式:這是一個(gè)同步練習(xí),隨著CoreJava課程的深入,這個(gè)項(xiàng)目將趨于完整,學(xué)員的任務(wù)是隨著知識(shí)點(diǎn)的深入,完成 每一個(gè)進(jìn)階的項(xiàng)目要求 .練習(xí) 1:(面向?qū)ο蠡A(chǔ)語法 )創(chuàng)建 entity 包,編寫一個(gè)賬戶類 (Account),屬性變量 :id: 賬戶號(hào)碼 長(zhǎng)整數(shù)password:賬戶密碼name:真實(shí)姓名perso nld:身份證號(hào)碼 字符串類型bala nee:賬戶余額方法:deposit: 存款方法 ,參

2、數(shù)是 double 型的金額 withdraw: 取款方法 ,參數(shù)是 double 型的金額 構(gòu)造方法 :有參和無參 ,有參構(gòu)造方法用于設(shè)置必要的屬性Step1:Aeeount 類paekage entity;publie elass Aeeount / 屬性變量privatelong id;privateString password;privateString name;privateString personld;private double balanee;/ 構(gòu)造方法publie Aeeount()publie Aeeount( long id,String name,String

3、personlD,String password,double balanee)this .id=id; this .name=name;this .personld=personlD;this .password=password;this .balanee=balanee;/ 成員方法/ 存款,參數(shù)是需要存入的金額,返回值可以是存后的金額,此時(shí)返回值類型為double ,也可以無返回值,此時(shí)方法的返回值類型為 void 。publie double deposit( double money)balanee+=money;return balanee;/ 取款,參數(shù)是需要存入的金額,返回值

4、是 boolean ,是否減款成功 publie boolean withdraw( double money)if (balaneemoney)balanee-=money;return trueelse System. out .println( 取款數(shù)目過大 );return false ;/練習(xí) 2:(封裝 )/將 Account 類作成完全封裝,將各屬性變量定義為private 類型,增加相應(yīng)的 get,set 方法public long getId() return id;public void setId( long id) this .id = id;public String

5、 getPassword() return password;public void setPassword(String password) this .password = password;public String getName() return name;public void setName(String name) this .name = name;public String getPersonId() return personId;public void setPersonId(String personId) this .personId = personId;publ

6、ic double getBalance() return balance;public void setBalance( double balance) this .balance = balance;練習(xí) 3:(繼承 ,多態(tài) )銀行的客戶分為兩類 ,儲(chǔ)蓄賬戶 (SavingAccount) 和信用賬戶 (CreditAccount), 區(qū)別在于儲(chǔ)蓄賬戶不允許透支 ,而信用賬戶可 以透支 10000 元在 entity 包中為這兩種用戶編寫相關(guān)的類。 /很明顯,儲(chǔ)蓄賬戶 (SavingAccount) 和信用賬戶 (CreditAccount) 都是賬戶類的子類。 package entit

7、y;/ 信用賬戶 public class CreditAccount extends Account / 創(chuàng)建信用賬戶時(shí)我們希望可以通過輸入屬性變量,如 id,name,personID 等直接獲取一個(gè)信 / 用賬戶的對(duì)象,所以,需 要構(gòu)建信用賬戶的有參構(gòu)造方法,為對(duì)象進(jìn)行初始化賦值。/ 父類有參數(shù)的構(gòu)造方法不會(huì)自動(dòng)繼承 , 在子類的構(gòu)造方法中可以用 super( 參數(shù) ) 來調(diào)用父類的構(gòu)造方法。 public CreditAccount( long id, String name, String personID,String password, double balance) super

8、 (id, name, personID, password, balance);/ 取款,對(duì)父類方法的重寫/ 信用賬戶可以透支public boolean withdraw( double money) if (money super .getBalance()+10000)/ 取錢透支超過 10000 元 return false ; else / 將余額中的錢減少super .setBalance( super .getBalance()-money); return true ;同樣,對(duì)于儲(chǔ)蓄賬戶也是一樣的方法。package entity;/ 儲(chǔ)蓄賬戶public class Sav

9、ingAccount public SavingAccount(String password,extends Account long id, String name, String personID, double balance) super (id, name, personID, password, balance);public boolean withdraw( double money) if (money super .getBalance() return false ; else super .setBalance( super .getBalance()-money);

10、 return true ;同時(shí)要求創(chuàng)建biz (業(yè)務(wù))包 編寫B(tài)ank類,屬性:1.當(dāng)前所有的賬戶對(duì)象的集合 ,存放在數(shù)組中2.當(dāng)前賬戶數(shù)量方法 :1.用戶開戶,需要的參數(shù):id,密碼,密碼確認(rèn),姓名,身份證號(hào)碼,賬戶類型,返回新創(chuàng)建的 Account對(duì)象的賬號(hào),提示:用 s1.equals(s2)可以比較s1,s2兩個(gè)字符串的值是否相等賬戶類型是一個(gè)整數(shù),為0的時(shí)候表示儲(chǔ)蓄賬戶,為1的時(shí)候表示 信用賬戶2用戶登錄,參數(shù):id,密碼 返回登錄賬戶的賬號(hào)3用戶存款滲數(shù):id,存款數(shù)額,返回void4用戶取款滲數(shù):id,取款數(shù)額,返回void5.查詢余額滲數(shù):id,返回該賬戶的余額 double

11、用戶會(huì)通過調(diào)用 Bank 對(duì)象以上的方法來操作自己的賬戶,請(qǐng)分析各個(gè)方法需要的參數(shù)package biz;import entity.Account;public class Bank /當(dāng)前所有的賬戶對(duì)象的集合 ,存放在數(shù)組中 .對(duì)數(shù)組聲明并初始化。也可以將初始化的步驟/放入構(gòu)造方法中。private Account accounts= new Account20;/ 賬戶集合, Account 是另外一個(gè)包里的,所以需要引包 import en tity.Accou nt;private int n umber;/賬戶數(shù)目public Ban k()accou nts=new Accou

12、nt20;以后不足時(shí)和棧一樣擴(kuò)容。n um=0;第一個(gè)方法,開戶,對(duì)于用戶開戶,如果在開戶成功后返回一個(gè)Account類型的對(duì)象就比/較好。并且題目也要求回新創(chuàng)建的Account對(duì)象的賬號(hào)。public Acco unt ope nAcco un t(l ong id,Stri ng pass1,Stri ng pass2,Stri ng n ame,Stri ng pers on ID,i nt type)/創(chuàng)建一個(gè)新帳戶Accou nt acc=n ull ;/判斷兩次密碼是否一致if (pass1.equals(pass2)如果返回為真,則說明密碼一致/賬戶類型是一個(gè)整數(shù),為0的時(shí)候表示

13、儲(chǔ)蓄賬戶,為1的時(shí)候表示信用賬戶if (type=1)acc= new CreditAccou nt(id ,n ame,pass1,pers on ID,1);/剛開卡,可以定義balance=1else acc= new Savin gAccou nt(id ,n ame,pass1,pers on ID,1);/注意:CreditAccount 和SavingAccount這兩個(gè)類在另外一個(gè)包里,需要導(dǎo)入包return acc; else /如果兩次密碼不一致,則開卡不成功,返回一個(gè)null 。return n ull;/可以進(jìn)一步優(yōu)化一下代碼。/if(pass1.equals(pass

14、2)/引包/if(type=1)acc=n ew CreditAccou nt(id ,n ame,pass1,pers on ID,1);岡U開卡,可以定義bala nce=1/else acc=new Savin gAccou nt(id ,n ame,pass1,pers on ID,1);/ /return acc;/到此為止,只是 new岀一個(gè)Account對(duì)象。并沒有將其放入帳戶數(shù)組accounts中。/判斷存儲(chǔ)空間是否滿了,或者說判斷數(shù)組是否滿了if (number=accounts.length)/擴(kuò)容,新創(chuàng)建一個(gè)數(shù)組,容量是前一個(gè)數(shù)組的2倍Accou nt n ewaccou

15、 nts=new Accou ntaccou nts.len gth*2;/將以前的數(shù)據(jù)拷貝過來,arraycopy 方法System. arraycopy(accou nts, 0, n ewaccou nts, 0, accou nts.len gth);/ 將 newaccounts的引用賦給 accountsaccou nts=n ewaccou nts;/可以往里面放東西了accou ntsn umber=acc; else /如果數(shù)組還有空間,可以直接往里面放元素accou ntsn umber=acc;/小優(yōu)化/if(n umber=accou nts.le ngth)/擴(kuò)容/A

16、ccou nt n ewaccoun tsl=newAccou ntaccou nts.len gth*2;/將以前的數(shù)據(jù)拷貝過來.arraycopy 方法/System.arraycopy(accou nts,0, n ewaccou nts, 0, accou nts.len gth):/ 將 newaccounts的引用賦給 accounts/accou nts=n ewaccou nts;/可以往里面放東西了/accou ntsn umber=acc;nu mber+;return acc;登錄,當(dāng)我們真實(shí)使用取款機(jī)的時(shí)候,沒有手動(dòng)輸入卡號(hào)這個(gè)步驟,其實(shí)卡號(hào)的信息已經(jīng)在卡里了,需要接受

17、2個(gè)參數(shù),卡號(hào)和密碼。返回一個(gè) Account類型的對(duì)象。如何在數(shù)組中憑借卡號(hào)找到這個(gè)Account類型的對(duì)象呢?遍歷。public Acco un t logi n(l ong id,Stri ng password/遍歷數(shù)組Accou nt acu = null;for(i nt i=1;iaccou nts.len gth;i+)if(accou ntsi.getld()=id&password.equals(accoun tsi.getPassword()女口果用戶名和密碼都對(duì),則找到該用戶/如果從數(shù)組中找到相應(yīng)的卡號(hào)和密碼,則返回整個(gè)對(duì)象acu=accou ntsi;break;/如

18、果找到這個(gè)元素,則直接 break,不用再找了return acu;/如果卡號(hào)和密碼是不匹配的,則if 是不會(huì)被執(zhí)行的。acu=null/存款,根據(jù)id存款,所以id是參數(shù),還有個(gè)參數(shù)是金額public void saveM on ey(long id, doublemon ey)/剛才在Account中已經(jīng)寫好了存取款方法了,直接用Account對(duì)象調(diào)用就可以了/但是用哪個(gè)Account對(duì)象呢?就需要根據(jù)id來找/需要根據(jù)id,找到對(duì)應(yīng)的Account對(duì)象,往其中的余額中加入money,/這時(shí)我們發(fā)現(xiàn)在bank這個(gè)類的很多方法中都要使用根據(jù)id獲取Account對(duì)象的方法,/所以我們考慮單獨(dú)

19、做個(gè)方法,可以讓其他的方法來調(diào)用它,這樣就避免了大量代碼的重復(fù)Accou nt ac=selectAccou ntByld(id);ac.deposit(m on ey);/將其定義為private ,是因?yàn)檫@個(gè)方法只在本類中使用privateAccou nt selectAccou ntByld(long id)Accou nt acu =n ull ;for ( inti=1;iaccounts.length;i+)if (accountsi.getld()=id)根據(jù) id 找到該用戶/如果從數(shù)組中找到相應(yīng)的卡號(hào)和密碼,則返回整個(gè)對(duì)象acu=accou ntsi;break ;/如果找到

20、這個(gè)元素,則直接 break,不用再找了return acu;/此時(shí)將登錄方法優(yōu)化publicAccou nt log in(long id,Stri ng password)/ 第二步,優(yōu)化后Account acu = selectAccountById(id);if (acu= null )/ 該 id 對(duì)應(yīng)的 Account 對(duì)象不存在,如你已經(jīng)注銷了一個(gè)卡,就找不到了return null ; else if (acu.getPassword().equals(password)/ 判斷密碼是否相等 return acu; else return null ;/ 進(jìn)一步優(yōu)化if (ac

21、u!= null &!acu.getPassword().equals(password)/ 如果 acu 不為空,并且密碼不相等的時(shí)候,將 acu=nullacu= null ;return acu;/ 取款,根據(jù) id 取款,所以 id 是參數(shù)public void outputMoney( long id, double money)Account ac=selectAccountById(id);ac.withdraw(money);/ 查詢余額,需要返回一個(gè) double 類型的數(shù)據(jù)public double selectMoney( long id)Account ac=selec

22、tAccountById(id);return ac.getBalance();/ 存款,根據(jù) idpublic void inputMoney( long id, double money)Account ac=selectAccountById(id);ac. deposit(money);練習(xí) 4:(語言高級(jí)特性 ,三個(gè)修飾符 )1.修改 Account 類,銀行用戶的賬號(hào) (id) 是自動(dòng)生成的 ,初始值為 100000,第一個(gè)開戶的用戶 id 為 100001,第二個(gè)為 100002, 依此類推 .提示 :構(gòu)造對(duì)象的時(shí)候采用 static 屬性為 id 賦值A(chǔ)ccount 類中如果將

23、 id 聲明為 static, public static long id; 每個(gè)賬戶還需要有自己的 id 。所以我們將 id 分為 2 個(gè),一個(gè)是賬戶自己的 id ,還有一個(gè)是系統(tǒng)分配給每個(gè)賬戶的id.private long id;public static long pid ;/ 用來分配賬號(hào)的 id2.對(duì)于 Account 類,有兩個(gè)方法 ,存款方法和取款方法 ,請(qǐng)修改這兩個(gè)方法 . 存款方法改為不允許子類修改取款方法根據(jù)不同的子類而不同 ,因此 ,改為抽象方法 ,在兩個(gè)子類中分別實(shí)現(xiàn)Account 類中將 Bank 類中的數(shù)組換為 hashmap。private Map accoun

24、ts;public Bank()accounts=new HashMap();number=0;/不需要擴(kuò)容了/開戶方法的 id 就不能由用戶輸入了。public Account openAccount(String pass1,String pass2,String name,String personID, int type) / 創(chuàng)建一個(gè)新帳戶Account acc= null ;/ 判斷兩次密碼是否一致if (pass1.equals(pass2)/ 引包if (type=1)acc= new CreditAccount(Accounts.pid+,name,pass1,personI

25、D,1);/ 剛開卡,可以定義 balance=1elseacc= new SavingAccount(Accounts.pid+,name,pass1,personID,1);/ 判斷存儲(chǔ)空間是否滿了,或者說判斷數(shù)組是否滿了accounts.put(acc.getId(), acc);number+;return acc;/ 如果密碼不相同的話,返回空else return null ;私有的方法: selectAccountById 就可以省略了。 HashMap 已經(jīng)提供者各方樂了,根據(jù)鍵來獲取值。存款,取款,查詢 余額等方法都要改動(dòng)。/ 取款,根據(jù) id 取款,所以 id 是參數(shù)public void outputMoney( long id, double money)Account ac=accounts.get(id);ac.withdraw(money);/ 查詢余額,需要返回一個(gè) double 類型的數(shù)據(jù)public double selectMone

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論