下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、項目名稱:Bank Account Management System銀行賬戶管理系統(tǒng) 簡稱BAM 項目描述:這是一個銀行賬戶管理系統(tǒng),用戶可以操作自己的銀行賬戶.項目實施方式:這是一個同步練習,隨著CoreJava課程的深入,這個項目將趨于完整,學員的任務是隨著知 識點的深入,完成每一個進階的項目要求.練習1:(面向?qū)ο蠡A語法)創(chuàng)建entity包,編寫一個賬戶類(Account),屬性變量:id:賬戶號碼長整數(shù)password賬戶密碼name:真實姓名personId:身份證號碼 字符串類型balance賬戶余額方法:deposit:存款方法,參數(shù)是double型的金額 withdraw:
2、取款方法,參數(shù)是double型的金額構造方法:有參和無參,有參構造方法用于設置必要的屬性Step1: Account 類 package entity;public class Account /屬性變量privatelongid;privateStringpassword;privateStringname;privateStringpersonId;private double balance;/構造方法public Account()public Account( long id,String name,String personID,String password,double bal
3、ance)this .id=id; this .name=name;this .personId=personID;this .password=password; this .balance=balance;/成員方法/存款,參數(shù)是需要存入的金額,返回值可以是存后的金額,此時返回值類型為double ,也可以無返回值,此時方法的返回值類型為void opublic double deposit( double money) balance+=money;return balance;/取款,參數(shù)是需要存入的金額,返回值是 boolean ,是否減款成功 public boolean with
4、draw( double money)if (balance>money) balance-=money; return true ; else System. out .println(" 取款數(shù)目過大");returnfalse/練習2:(封裝)/將Account類作成完全封裝,將各屬性變量定義為 private類型,增加相應的get,set方法 public long getId() return id;public void setId( long id) this .id = id;public String getPassword() return pas
5、sword;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;public double getBalance() re
6、turn balance;public void setBalance( double balance) this .balance = balance;練習 3:(繼承,多態(tài))銀行的客戶分為兩類,儲蓄賬戶(SavingAccount)和信用賬戶(CreditAccount),區(qū)別在于儲蓄賬戶不允許透支,而信用賬戶可以透支10000元在 entity 包中為這兩種用戶編寫相關的類。/很明顯,儲蓄賬戶(SavingAccount)和信用賬戶(CreditAccount)都是賬戶類的子類。package entity;/ 信用賬戶public class CreditAccount extends
7、 Account / 創(chuàng)建信用賬戶時我們希望可以通過輸入屬性變量,如 id,name,personID 等直接獲取一個信 / 用賬戶的對象,所以,需要構建信用賬戶的有參構造方法,為對象進行初始化賦值。/ 父類有參數(shù)的構造方法不會自動繼承, 在子類的構造方法中可以用 super( 參數(shù) ) 來調(diào)用父類的構造方法。public CreditAccount( long id, String name, String personID,String password,double balance) super (id, name, personID, password, balance);/ 取款,對
8、父類方法的重寫/ 信用賬戶可以透支 public boolean withdraw( double money) if (money> super .getBalance()+10000) / 取錢透支超過 10000 元 return false ; else / 將余額中的錢減少 super .setBalance( super .getBalance()-money); return true ;同樣,對于儲蓄賬戶也是一樣的方法。package entity;/ 儲蓄賬戶public class SavingAccountextendsAccount public SavingAc
9、count( long id, String name, String personID, String password,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); return true ;同時要求創(chuàng)建biz (業(yè)務)包,編寫B(tài)ank
10、類屬性:1 .當前所有的賬戶對象的集合,存放在數(shù)組中2 .當前賬戶數(shù)量方法 :1 .用戶開戶,需要的參數(shù):id,密碼,密碼確認,姓名,身份證號碼,賬戶類型,返回新創(chuàng)建的Account對象的賬號 提示:用s1.equals(s2)可以比較s1,s2兩個字符串的值是否相等.賬戶類型是一個整數(shù),為0的時候表示儲蓄 賬戶 ,為 1 的時候表示信用賬戶2 .用戶登錄,參數(shù):id,密碼 返回登錄賬戶的賬號3 .用戶存款,參數(shù):id,存款數(shù)額,返回void4 .用戶取款 參數(shù):id,取款數(shù)額,返回void5 .查詢余額,參數(shù):id ,返回該賬戶的余額double用戶會通過調(diào)用Bank對象以上的方法來操作自己
11、的賬戶,請分析各個方法需要的參數(shù) package biz;import entity.Account;public class Bank /當前所有的賬戶對象的集合,存放在數(shù)組中.對數(shù)組聲明并初始化。也可以將初始化的步驟/放入構造方法中。private Account accounts=new Account20;/ 賬戶集合, Account 是另外一個包里的,所以需要引包import entity.Account;private int number;/ 賬戶數(shù)目public Bank()accounts= new Account20;/以后不足時和棧一樣擴容。num=0;第一個方法,開戶
12、,對于用戶開戶,如果在開戶成功后返回一個 Account類型的對象就比/較好。并且題目 也要求返回新創(chuàng)建的Account對象的賬號。public Account openAccount(long id,String pass1,String pass2,String name,String personID,int type)/創(chuàng)建一個新帳戶Account acc= null ;/判斷兩次密碼是否一致if (pass1.equals(pass2)/如果返回為真,則說明密碼一致/賬戶類型是一個整數(shù),為0的時候表示儲蓄賬戶,為1的時候表示信用賬戶 if (type=1)acc= new Credi
13、tAccount(id,name,pass1,personID,1);/剛開卡,可以定義 balance=1else acc= new SavingAccount(id,name,pass1,personID,1);/注意:CreditAccount 和SavingAccount這兩個類在另外一個包里,需要導入包return acc; else /如果兩次密碼不一致,則開卡不成功,返回一個null 。return null;/可以進一步優(yōu)化一下代碼。/ if(pass1.equals(pass2)/引包/if(type=1)acc=newCreditAccount(id,name,pass1,
14、personID,1);/剛開卡,可以定義balance=1 /else acc=new SavingAccount(id,name,pass1,personID,1);/ return acc;/到此為止,只是 new出一個Account 對象。并沒有將其放入帳戶數(shù)組accounts 中。/判斷存儲空間是否滿了,或者說判斷數(shù)組是否滿了 if (number>=accounts.length)/擴容,新創(chuàng)建一個數(shù)組,容量是前一個數(shù)組的2倍Account newaccounts尸new Accountaccounts.length*2;/將以前的數(shù)據(jù)拷貝過來,arraycopy 方法Sys
15、tem. arraycopy (accounts, 0, newaccounts, 0, accounts.length);/ 將 newaccounts 的引用賦給 accounts accounts=newaccounts;/可以往里面放東西了 accountsnumber=acc; else /如果數(shù)組還有空間,可以直接往里面放元素 accountsnumber=acc;/小優(yōu)化/if(number>=accounts.length)/擴容/Account newaccounts尸newAccountaccounts.length*2;/將以前的數(shù)據(jù)拷貝過來,arraycopy 方
16、法/System.arraycopy(accounts,0, newaccounts, 0, accounts.length);/ 將 newaccounts口的引用賦給 accounts/accounts=newaccounts;/可以往里面放東西了/accountsnumber=acc; number+; return acc;/登錄,當我們真實使用取款機的時候,沒有手動輸入卡號這個步驟,其實卡號的信息已經(jīng)在卡里了, 需要接受2個參數(shù),卡號和密碼。返回一個 Account類型的對象。如何在數(shù)組中憑借卡號找到這個Account類型的對象呢?遍歷。public Account login(lo
17、ng id,String password) /遍歷數(shù)組Account acu = null;for(int i=1;i<accounts.length;i+)if(accountsi.getId()=id&&password.equals(accountsi.getPassword()/如果用戶名和密碼都對,則找到該用戶/如果從數(shù)組中找到相應的卡號和密碼,則返回整個對象 acu=accountsi;break;/如果找到這個元素,則直接 break,不用再找了 return acu;/如果卡號和密碼是不匹配的,則 if 是不會被執(zhí)行的。acu=null/存款,根據(jù)id存
18、款,所以id是參數(shù),還有個參數(shù)是金額 public void saveMoney( long id, double money)/剛才在Account中已經(jīng)寫好了存取款方法了,直接用Account對象調(diào)用就可以了/但是用哪個Account對象呢?就需要根據(jù)id來找/需要根據(jù)id ,找到對應的Account對象,往其中的余額中加入money ,/這時我們發(fā)現(xiàn)在bank這個類的很多方法中都要使用根據(jù)id獲取Account對象的方法,/所以我們考慮單獨做個方法,可以讓其他的方法來調(diào)用它,這樣就避免了大量代碼的重復 Account ac=selectAccountById(id);ac.deposit
19、(money); /將其定義為private,是因為這個方法只在本類中使用private Account selectAccountById(long id)Account acu =null ;for ( int i=1;i<accounts.length;i+)if (accountsi.getId()=id)/根據(jù) id 找到該用戶/如果從數(shù)組中找到相應的卡號和密碼,則返回整個對象 acu=accountsi;break ;/如果找到這個元素,則直接 break,不用再找了 return acu;/此時將登錄方法優(yōu)化public Account login( long id,Str
20、ing password) /第二步,優(yōu)化后Account acu = selectAccountByld(id); if (acu= null )/ 該 id 對應的 Account 對象不存在,如你已經(jīng)注銷了一個卡,就找不到了 return null ; else if (acu.getPassword().equals(password)/判斷密碼是否相等return acu; else return null ; / 進一步優(yōu)化if (acu!= null &&!acu.getPassword().equals(password)/ 如果 acu 不為空,并且密碼不相等
21、的時候,將acu=nullacu= null ; return acu;/ 取款,根據(jù) id 取款,所以 id 是參數(shù)public void outputMoney( long id, double money)Account ac=selectAccountById(id); ac.withdraw(money);/ 查詢余額,需要返回一個double 類型的數(shù)據(jù)public double selectMoney( long id)Account ac=selectAccountById(id); return ac.getBalance();/ 存款,根據(jù)idpublicvoid inpu
22、tMoney( long id, double money)Account ac=selectAccountById(id);ac. deposit(money);練習4:(語言高級特性,三個修飾符)1 .修改Account類,銀行用戶的賬號(id)是自動生成的,初始值為100000,第一個開戶的用戶id為100001,第 二個為100002,依此類推.提示:構造對象的時候采用static屬性為id賦值Account 類中如果將 id 聲明為 static, public static long id;每個賬戶還需要有自己的 id 。所以我們將id分為2個,一個是賬戶自己的id,還有一個是系統(tǒng)
23、分配給每個賬戶的id. private long id;publicstatic long pid ;/ 用來分配賬號的 id2 .對于Account 類,有兩個方法,存款方法和取款方法,請修改這兩個方法 .存款方法改為不允許子類修改 取款方法根據(jù)不同的子類而不同 ,因此,改為抽象方法,在兩個子類中分別實現(xiàn)Account 類中將 Bank 類中的數(shù)組換為hashmap。private Map<Long,Account> accounts;public Bank()accounts=new HashMap< Long,Account >(); number=0;/不需要擴
24、容了/開戶方法的id 就不能由用戶輸入了。public Account openAccount(String pass1,String pass2,String name,String personID,int type)/ 創(chuàng)建一個新帳戶 Account acc= null ;/ 判斷兩次密碼是否一致 if (pass1.equals(pass2)/ 引包 if (type=1)acc= new CreditAccount(Accounts.pid+,name,pass1,personID,1);/ 剛開卡,可以定義 balance=1 elseacc= new SavingAccount(
25、Accounts.pid+,name,pass1,personID,1);/ 判斷存儲空間是否滿了,或者說判斷數(shù)組是否滿了accounts.put(acc.getId(), acc); number+; return acc; / 如果密碼不相同的話,返回空 else return null ; 私有的方法: selectAccountById 就可以省略了。 HashMap 已經(jīng)提供者各方樂了,根據(jù)鍵來獲取值。存款,取款,查詢 余額等方法都要改動。/ 取款,根據(jù) id 取款,所以 id 是參數(shù)public void outputMoney( long id, double money)Account ac=accounts.get(id); ac.withdraw(money);/ 查詢余額,需要返回一個double 類型的數(shù)據(jù)public double selectMoney( l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 能源企業(yè)律師聘用協(xié)議范例
- 花店衛(wèi)生管理員聘用合同
- 酒店經(jīng)理聘用合同模板
- 收藏品租賃合同范本
- 生態(tài)園區(qū)玻璃幕墻施工合同
- 住宅區(qū)遮陽棚施工協(xié)議
- 城市出租車租賃合同
- 客戶關系績效評價
- 醫(yī)療器械發(fā)票管理規(guī)定
- 垃圾分類處理設施建設標準
- 《中華民族多元一體格局》
- 《心理統(tǒng)計學》練習題庫
- 金融資產(chǎn)投資合作協(xié)議
- 河南省2023-2024-學年度高一年級學業(yè)質(zhì)量監(jiān)測考試語文試題(含答案)
- 高中語文選擇性必修中冊《第一單元 單元研習任務》課件
- 系統(tǒng)性紅斑狼瘡(SLE)護理查房
- 呼吸內(nèi)科慢性阻塞性肺病管理PDCA循環(huán)案例
- 醫(yī)保法律法規(guī)培訓課件
- 三門峽水利工程案例分析工程倫理
- 玉米深加工簡介演示
- 吊車參數(shù)表完整版本
評論
0/150
提交評論