版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、項目名稱:Bank Account Management System 銀行賬戶管理系統(tǒng) 簡稱BAM項目描述:這是一個銀行賬戶管理系統(tǒng),用戶可以操作自己的銀行賬戶.項目實施方式:這是一個同步練習(xí),隨著CoreJava課程的深入,這個項目將趨于完整,學(xué)員的任務(wù)是隨著知識點的深入,完成每一個進(jìn)階的項目要求.練習(xí)1:(面向?qū)ο蠡A(chǔ)語法)創(chuàng)建entity包,編寫一個賬戶類(Account),屬性變量:id:賬戶號碼 長整數(shù)password:賬戶密碼name:真實姓名personId:身份證號碼 字符串類型balance:賬戶余額方法:deposit: 存款方法,參數(shù)是double型的金額withdra
2、w:取款方法,參數(shù)是double型的金額構(gòu)造方法:有參和無參,有參構(gòu)造方法用于設(shè)置必要的屬性Step1:Account類package entity;public class Account /屬性變量private long id;private String password;private String name;private String personId;private double balance;/構(gòu)造方法public Account()public Account(long id,String name,String personID,String password,doub
3、le balance)this.id=id;=name;this.personId=personID;this.password=password;this.balance=balance;/成員方法/存款,參數(shù)是需要存入的金額,返回值可以是存后的金額,此時返回值類型為double,也可以無返回值,此時方法的返回值類型為void。public double deposit(double money)balance+=money;return balance;/取款,參數(shù)是需要存入的金額,返回值是boolean,是否減款成功public boolean withdraw(dou
4、ble money)if(balance>money)balance-=money;return true;elseSystem.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 getPassword() return password;public void se
5、tPassword(String password) this.password = password;public String getName() return name;public void setName(String name) = name;public String getPersonId() return personId;public void setPersonId(String personId) this.personId = personId;public double getBalance() return balance;public voi
6、d setBalance(double balance) this.balance = balance;練習(xí)3:(繼承,多態(tài))銀行的客戶分為兩類,儲蓄賬戶(SavingAccount)和信用賬戶(CreditAccount),區(qū)別在于儲蓄賬戶不允許透支,而信用賬戶可以透支10000元在entity包中為這兩種用戶編寫相關(guān)的類。/很明顯,儲蓄賬戶(SavingAccount)和信用賬戶(CreditAccount)都是賬戶類的子類。package entity;/信用賬戶public class CreditAccount extends Account /創(chuàng)建信用賬戶時我們希望可以通過輸入屬性
7、變量,如id,name,personID等直接獲取一個信/用賬戶的對象,所以,需要構(gòu)建信用賬戶的有參構(gòu)造方法,為對象進(jìn)行初始化賦值。/父類有參數(shù)的構(gòu)造方法不會自動繼承,在子類的構(gòu)造方法中可以用super(參數(shù))來調(diào)用父類的構(gòu)造方法。 public CreditAccount(long id, String name, String personID,String password, double balance) super(id, name, personID, password, balance);/取款,對父類方法的重寫/信用賬戶可以透支public boolean withdraw(d
8、ouble money) if(money>super.getBalance()+10000)/取錢透支超過10000元return false;else/將余額中的錢減少super.setBalance(super.getBalance()-money);return true;同樣,對于儲蓄賬戶也是一樣的方法。package entity;/儲蓄賬戶public class SavingAccount extends Account public SavingAccount(long id, String name, String personID,String password,
9、double balance) super(id, name, personID, password, balance);public boolean withdraw(double money) if(money>super.getBalance()return false;elsesuper.setBalance(super.getBalance()-money);return true;同時要求創(chuàng)建biz(業(yè)務(wù))包,編寫B(tài)ank類,屬性:1.當(dāng)前所有的賬戶對象的集合,存放在數(shù)組中2.當(dāng)前賬戶數(shù)量方法:1.用戶開戶,需要的參數(shù):id,密碼,密碼確認(rèn),姓名,身份證號碼,賬戶類型,返回新
10、創(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對象以上的方法來操作自己的賬戶,請分析各個方法需要的參數(shù)package biz;import entity.Account;public class Bank /當(dāng)前所有的賬戶對象的集合,存放在數(shù)組中
11、.對數(shù)組聲明并初始化。也可以將初始化的步驟/放入構(gòu)造方法中。private Account accounts=new Account20;/賬戶集合,Account是另外一個包里的,所以需要引包import entity.Account;private int number;/賬戶數(shù)目public Bank()accounts=new Account20;/以后不足時和棧一樣擴(kuò)容。num=0;/第一個方法,開戶,對于用戶開戶,如果在開戶成功后返回一個Account類型的對象就比/較好。并且題目也要求返回新創(chuàng)建的Account對象的賬號。public Account openAccount(lo
12、ng 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 CreditAccount(id,name,pass1,personID,1);/剛開卡,可以定義balance=1else acc=new SavingAccount(id,name,pass1,personI
13、D,1);/注意:CreditAccount和SavingAccount這兩個類在另外一個包里,需要導(dǎo)入包return acc;else /如果兩次密碼不一致,則開卡不成功,返回一個null。return null;/可以進(jìn)一步優(yōu)化一下代碼。/if(pass1.equals(pass2)/引包/if(type=1)acc=new CreditAccount(id,name,pass1,personID,1);/剛開卡,可以定義balance=1/else acc=new SavingAccount(id,name,pass1,personID,1);/return acc;/到此為止,只是ne
14、w出一個Account對象。并沒有將其放入帳戶數(shù)組accounts中。/判斷存儲空間是否滿了,或者說判斷數(shù)組是否滿了if(number>=accounts.length)/擴(kuò)容,新創(chuàng)建一個數(shù)組,容量是前一個數(shù)組的2倍Account newaccounts=new Accountaccounts.length*2;/將以前的數(shù)據(jù)拷貝過來,arraycopy方法System.arraycopy(accounts, 0, newaccounts, 0, accounts.length);/將newaccounts的引用賦給accountsaccounts=newaccounts;/可以往里面放
15、東西了accountsnumber=acc;else/如果數(shù)組還有空間,可以直接往里面放元素accountsnumber=acc;/小優(yōu)化/if(number>=accounts.length)/擴(kuò)容/Account newaccounts=new Accountaccounts.length*2;/將以前的數(shù)據(jù)拷貝過來,arraycopy方法/System.arraycopy(accounts, 0, newaccounts, 0, accounts.length);/將newaccounts的引用賦給accounts/accounts=newaccounts;/可以往里面放東西了/a
16、ccountsnumber=acc;number+;return acc;/登錄,當(dāng)我們真實使用取款機(jī)的時候,沒有手動輸入卡號這個步驟,其實卡號的信息已經(jīng)在卡里了,需要接受2個參數(shù),卡號和密碼。返回一個Account類型的對象。如何在數(shù)組中憑借卡號找到這個Account類型的對象呢?遍歷。public Account login(long id,String password)/遍歷數(shù)組Account acu = null;for(int i=1;i<accounts.length;i+)if(accountsi.getId()=id&&password.equals(a
17、ccountsi.getPassword()/如果用戶名和密碼都對,則找到該用戶/如果從數(shù)組中找到相應(yīng)的卡號和密碼,則返回整個對象acu=accountsi;break;/如果找到這個元素,則直接break,不用再找了return acu;/如果卡號和密碼是不匹配的,則if是不會被執(zhí)行的。acu=null/存款,根據(jù)id存款,所以id是參數(shù),還有個參數(shù)是金額public void saveMoney(long id,double money)/剛才在Account中已經(jīng)寫好了存取款方法了,直接用Account對象調(diào)用就可以了/但是用哪個Account對象呢?就需要根據(jù)id來找/需要根據(jù)id,找
18、到對應(yīng)的Account對象,往其中的余額中加入money,/這時我們發(fā)現(xiàn)在bank這個類的很多方法中都要使用根據(jù)id獲取Account對象的方法,/所以我們考慮單獨做個方法,可以讓其他的方法來調(diào)用它,這樣就避免了大量代碼的重復(fù)Account ac=selectAccountById(id);ac.deposit(money);/將其定義為private,是因為這個方法只在本類中使用private Account selectAccountById(long id)Account acu = null;for(int i=1;i<accounts.length;i+)if(accounts
19、i.getId()=id)/根據(jù)id找到該用戶/如果從數(shù)組中找到相應(yīng)的卡號和密碼,則返回整個對象acu=accountsi;break;/如果找到這個元素,則直接break,不用再找了return acu;/此時將登錄方法優(yōu)化public Account login(long id,String password)/第二步,優(yōu)化后Account acu = selectAccountById(id);if(acu=null)/該id對應(yīng)的Account對象不存在,如你已經(jīng)注銷了一個卡,就找不到了return null;elseif(acu.getPassword().equals(passwo
20、rd)/判斷密碼是否相等return acu;elsereturn null;/進(jìn)一步優(yōu)化if(acu!=null&&!acu.getPassword().equals(password)/如果acu不為空,并且密碼不相等的時候,將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 dou
21、ble selectMoney(long id)Account ac=selectAccountById(id);return ac.getBalance();/存款,根據(jù)idpublic void inputMoney(long id,double money)Account ac=selectAccountById(id);ac. deposit(money);練習(xí)4:(語言高級特性,三個修飾符)1.修改Account類,銀行用戶的賬號(id)是自動生成的,初始值為100000,第一個開戶的用戶id為100001,第二個為100002,依此類推.提示:構(gòu)造對象的時候采用static屬性為i
22、d賦值A(chǔ)ccount類中如果將id聲明為static,public static long id;每個賬戶還需要有自己的id。所以我們將id分為2個,一個是賬戶自己的id,還有一個是系統(tǒng)分配給每個賬戶的id.private long id;public static long pid;/用來分配賬號的id2.對于Account類,有兩個方法,存款方法和取款方法,請修改這兩個方法.存款方法改為不允許子類修改取款方法根據(jù)不同的子類而不同,因此,改為抽象方法,在兩個子類中分別實現(xiàn)Account類中將Bank類中的數(shù)組換為hashmap。private Map<Long,Account>
23、accounts;public Bank()accounts=new HashMap< Long,Account >();number=0;/不需要擴(kuò)容了/開戶方法的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+,na
24、me,pass1,personID,1);/剛開卡,可以定義balance=1else acc=new SavingAccount(Accounts.pid+,name,pass1,personID,1);/判斷存儲空間是否滿了,或者說判斷數(shù)組是否滿了accounts.put(acc.getId(), acc);number+;return acc;/如果密碼不相同的話,返回空elsereturn 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(long id)Accoun
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 質(zhì)量檢測合同模板
- 2024年度平房區(qū)環(huán)境整治:建筑施工合同范本
- 開發(fā)商授權(quán)拆遷補(bǔ)償合同
- 2024年住家保姆工作協(xié)議
- 勞務(wù)協(xié)議書樣式
- 簡單工程承包協(xié)議范例
- 2024標(biāo)準(zhǔn)臨時用工合同樣本
- 2024年蘇州市租房合同范本
- 拼車服務(wù)協(xié)議示例
- 2024中介的買賣合同書范文
- 初中語文人教七年級上冊要拿我當(dāng)一挺機(jī)關(guān)槍使用
- 北京頌歌原版五線譜鋼琴譜正譜樂譜
- 病史采集和臨床檢查方法
- PSUR模板僅供參考
- 火力發(fā)電企業(yè)作業(yè)活動風(fēng)險分級管控清單(參考)
- 民法典合同編之保證合同實務(wù)解讀PPT
- 全國第四輪學(xué)科評估PPT幻燈片課件(PPT 24頁)
- 大氣污染控制工程課程設(shè)計-某廠酸洗硫酸煙霧治理設(shè)施設(shè)計
- 名牌包包網(wǎng)紅主播電商直播帶貨話術(shù)腳本
- 高考語文作文素材人物速遞——蘇炳添課件18張
- 蛋雞養(yǎng)殖場管理制度管理辦法
評論
0/150
提交評論