版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 WORD 9/9項(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ǔ)語(yǔ)法)創(chuàng)建entity包,編寫一個(gè)賬戶類(Account),屬性變量:id:賬戶 長(zhǎng)整數(shù)password:賬戶密碼name:真實(shí)personId: 字符串類型balance:賬戶余額方法:deposit: 存款方法,參數(shù)是double型的金額withdra
2、w:取款方法,參數(shù)是double型的金額構(gòu)造方法:有參和無參,有參構(gòu)造方法用于設(shè)置必要的屬性Step1:Account類package entity;publicclass Account /屬性變量privatelong id;private String password;private String name;private String personId;privatedouble balance;/構(gòu)造方法public Account()public Account(long id,String name,String personID,String password,double
3、balance)this.id=id;=name;this.personId=personID;this.password=password;this.balance=balance;/成員方法/存款,參數(shù)是需要存入的金額,返回值可以是存后的金額,此時(shí)返回值類型為double,也可以無返回值,此時(shí)方法的返回值類型為void。publicdouble deposit(double money)balance+=money;return balance;/取款,參數(shù)是需要存入的金額,返回值是boolean,是否減款成功publicboolean withdraw(double m
4、oney)if(balancemoney)balance-=money;returntrue;elseSystem.out.println(取款數(shù)目過大);returnfalse;/練習(xí)2:(封裝)/將Account類作成完全封裝,將各屬性變量定義為private類型,增加相應(yīng)的get,set方法publiclong getId() return id;publicvoid setId(long id) this.id = id;public String getPassword() return password;publicvoid setPassword(String password)
5、 this.password = password;public String getName() return name;publicvoid setName(String name) = name;public String getPersonId() return personId;publicvoid setPersonId(String personId) this.personId = personId;publicdouble getBalance() return balance;publicvoid setBalance(double balance) t
6、his.balance = balance;練習(xí)3:(繼承,多態(tài))銀行的客戶分為兩類,儲(chǔ)蓄賬戶(SavingAccount)和信用賬戶(CreditAccount),區(qū)別在于儲(chǔ)蓄賬戶不允許透支,而信用賬戶可以透支10000元在entity包中為這兩種用戶編寫相關(guān)的類。/很明顯,儲(chǔ)蓄賬戶(SavingAccount)和信用賬戶(CreditAccount)都是賬戶類的子類。package entity;/信用賬戶publicclass CreditAccount extends Account /創(chuàng)建信用賬戶時(shí)我們希望可以通過輸入屬性變量,如id,name,personID等直接獲取一個(gè)信/用賬
7、戶的對(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(id, name, personID, password, balance);/取款,對(duì)父類方法的重寫/信用賬戶可以透支publicboolean withdraw(double money) if(moneysuper.getBa
8、lance()+10000)/取錢透支超過10000元returnfalse;else/將余額中的錢減少super.setBalance(super.getBalance()-money);returntrue;同樣,對(duì)于儲(chǔ)蓄賬戶也是一樣的方法。package entity;/儲(chǔ)蓄賬戶publicclass SavingAccount extends Account public SavingAccount(long id, String name, String personID,String password, double balance) super(id, name, personI
9、D, password, balance);publicboolean withdraw(double money) if(moneysuper.getBalance()returnfalse;elsesuper.setBalance(super.getBalance()-money);returntrue;同時(shí)要求創(chuàng)建biz(業(yè)務(wù))包,編寫B(tài)ank類,屬性:1.當(dāng)前所有的賬戶對(duì)象的集合,存放在數(shù)組中2.當(dāng)前賬戶數(shù)量方法:1.用戶開戶,需要的參數(shù):id,密碼,密碼確認(rèn),賬戶類型,返回新創(chuàng)建的Account對(duì)象的賬號(hào),提示:用s1.equals(s2) 可以比較s1,s2兩個(gè)字符串的值是否相等.
10、賬戶類型是一個(gè)整數(shù),為0的時(shí)候表示儲(chǔ)蓄賬戶,為1的時(shí)候表示信用賬戶2.用戶登錄,參數(shù):id,密碼 返回登錄賬戶的賬號(hào)3.用戶存款,參數(shù):id,存款數(shù)額,返回void4.用戶取款,參數(shù):id,取款數(shù)額,返回void5.查詢余額,參數(shù):id,返回該賬戶的余額 double用戶會(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=
11、new Account20;/賬戶集合,Account是另外一個(gè)包里的,所以需要引包import entity.Account;privateint number;/賬戶數(shù)目public Bank()accounts=new Account20;/以后不足時(shí)和棧一樣擴(kuò)容。num=0;/第一個(gè)方法,開戶,對(duì)于用戶開戶,如果在開戶成功后返回一個(gè)Account類型的對(duì)象就比/較好。并且題目也要求返回新創(chuàng)建的Account對(duì)象的賬號(hào)。public Account openAccount(long id,String pass1,String pass2,String name,String perso
12、nID,int type)/創(chuàng)建一個(gè)新Account acc=null;/判斷兩次密碼是否一致if(pass1.equals(pass2)/如果返回為真,則說明密碼一致/賬戶類型是一個(gè)整數(shù),為0的時(shí)候表示儲(chǔ)蓄賬戶,為1的時(shí)候表示信用賬戶if(type=1)acc=new CreditAccount(id,name,pass1,personID,1);/剛開卡,可以定義balance=1elseacc=new SavingAccount(id,name,pass1,personID,1);/注意:CreditAccount和SavingAccount這兩個(gè)類在另外一個(gè)包里,需要導(dǎo)入包return
13、 acc;else /如果兩次密碼不一致,則開卡不成功,返回一個(gè)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;/到此為止,只是new出一個(gè)Account對(duì)象。并沒有將其放入數(shù)組accounts中。/判斷存儲(chǔ)空間是否滿了,或者說判斷數(shù)組是否滿了if(
14、number=accounts.length)/擴(kuò)容,新創(chuàng)建一個(gè)數(shù)組,容量是前一個(gè)數(shù)組的2倍Account newaccounts=new Accountaccounts.length*2;/將以前的數(shù)據(jù)拷貝過來,arraycopy方法System.arraycopy(accounts, 0, newaccounts, 0, accounts.length);/將newaccounts的引用賦給accountsaccounts=newaccounts;/可以往里面放東西了accountsnumber=acc;else/如果數(shù)組還有空間,可以直接往里面放元素accountsnumber=acc;
15、/小優(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;/可以往里面放東西了/accountsnumber=acc;number+;return acc;/登錄,當(dāng)我們真實(shí)使用取款機(jī)的時(shí)候,沒有手動(dòng)輸入卡號(hào)這個(gè)步驟,其
16、實(shí)卡號(hào)的信息已經(jīng)在卡里了,需要接受2個(gè)參數(shù),卡號(hào)和密碼。返回一個(gè)Account類型的對(duì)象。如何在數(shù)組中憑借卡號(hào)找到這個(gè)Account類型的對(duì)象呢?遍歷。public Account login(long id,String password)/遍歷數(shù)組Account acu = null;for(int i=1;iaccounts.length;i+)if(accountsi.getId()=id&password.equals(accountsi.getPassword()/如果用戶名和密碼都對(duì),則找到該用戶/如果從數(shù)組中找到相應(yīng)的卡號(hào)和密碼,則返回整個(gè)對(duì)象acu=accountsi;bre
17、ak;/如果找到這個(gè)元素,則直接break,不用再找了return acu;/如果卡號(hào)和密碼是不匹配的,則if是不會(huì)被執(zhí)行的。acu=null/存款,根據(jù)id存款,所以id是參數(shù),還有個(gè)參數(shù)是金額publicvoid saveMoney(long id,double money)/剛才在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ú)做
18、個(gè)方法,可以讓其他的方法來調(diào)用它,這樣就避免了大量代碼的重復(fù)Account ac=selectAccountById(id);ac.deposit(money);/將其定義為private,是因?yàn)檫@個(gè)方法只在本類中使用private Account selectAccountById(long id)Account acu = null;for(int i=1;iaccounts.length;i+)if(accountsi.getId()=id)/根據(jù)id找到該用戶/如果從數(shù)組中找到相應(yīng)的卡號(hào)和密碼,則返回整個(gè)對(duì)象acu=accountsi;break;/如果找到這個(gè)元素,則直接break,
19、不用再找了return acu;/此時(shí)將登錄方法優(yōu)化public Account login(long id,String password)/第二步,優(yōu)化后Account acu = selectAccountById(id);if(acu=null)/該id對(duì)應(yīng)的Account對(duì)象不存在,如你已經(jīng)注銷了一個(gè)卡,就找不到了returnnull;elseif(acu.getPassword().equals(password)/判斷密碼是否相等return acu;elsereturnnull;/進(jìn)一步優(yōu)化if(acu!=null&!acu.getPassword().equals(passw
20、ord)/如果acu不為空,并且密碼不相等的時(shí)候,將acu=nullacu=null;return acu;/取款,根據(jù)id取款,所以id是參數(shù)publicvoid outputMoney(long id,double money)Account ac=selectAccountById(id);ac.withdraw(money);/查詢余額,需要返回一個(gè)double類型的數(shù)據(jù)publicdouble selectMoney(long id)Account ac=selectAccountById(id);return ac.getBalance();/存款,根據(jù)idpublicvoidin
21、putMoney(long id,double money)Account ac=selectAccountById(id);ac.deposit(money);練習(xí)4:(語(yǔ)言高級(jí)特性,三個(gè)修飾符)1.修改Account類,銀行用戶的賬號(hào)(id)是自動(dòng)生成的,初始值為100000,第一個(gè)開戶的用戶id為100001,第二個(gè)為100002,依此類推.提示:構(gòu)造對(duì)象的時(shí)候采用static屬性為id賦值A(chǔ)ccount類中如果將id聲明為static,public static long id;每個(gè)賬戶還需要有自己的id。所以我們將id分為2個(gè),一個(gè)是賬戶自己的id,還有一個(gè)是系統(tǒng)分配給每個(gè)賬戶的id
22、.privatelong id;publicstaticlongpid;/用來分配賬號(hào)的id2.對(duì)于Account類,有兩個(gè)方法,存款方法和取款方法,請(qǐng)修改這兩個(gè)方法.存款方法改為不允許子類修改取款方法根據(jù)不同的子類而不同,因此,改為抽象方法,在兩個(gè)子類中分別實(shí)現(xiàn)Account類中將Bank類中的數(shù)組換為hashmap。private Map accounts;public Bank()accounts=new HashMap();number=0;/不需要擴(kuò)容了/開戶方法的id就不能由用戶輸入了。public Account openAccount(String pass1,String p
23、ass2,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,personID,1);/剛開卡,可以定義balance=1else acc=new SavingAccount(Accounts.pid+,name,pass1,personID,1);/判斷存儲(chǔ)空間是否滿了,或者說判斷數(shù)組是否滿了accounts.put(acc.getId(),
24、 acc);number+;return acc;/如果密碼不一樣的話,返回空elsereturnnull;私有的方法:selectAccountById就可以省略了。HashMap已經(jīng)提供者各方樂了,根據(jù)鍵來獲取值。存款,取款,查詢余額等方法都要改動(dòng)。/取款,根據(jù)id取款,所以id是參數(shù)publicvoid outputMoney(long id,double money)Account ac=accounts.get(id);ac.withdraw(money);/查詢余額,需要返回一個(gè)double類型的數(shù)據(jù)publicdouble selectMoney(long id)Account
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025糧油銷售合同范本
- 打字員的勞動(dòng)合同書
- 印刷品訂貨合同格式
- 2025房屋商用租賃合同范本
- 2025農(nóng)機(jī)社會(huì)化服務(wù)作業(yè)合同(合同版本)
- 醫(yī)療機(jī)構(gòu)采購(gòu)與供應(yīng)合同
- 配音演員聘用合同范本
- 探索在線技能培訓(xùn)的新模式
- 指點(diǎn)迷津筑夢(mèng)未來主題班會(huì)
- 技術(shù)進(jìn)口合同范本
- 2024年高中一年級(jí)數(shù)學(xué)考試題及答案
- 2023年全國(guó)中小學(xué)思政課教師網(wǎng)絡(luò)培訓(xùn)研修總結(jié)心得體會(huì)
- CDE網(wǎng)站申請(qǐng)人之窗欄目介紹及用戶操作手冊(cè)
- 車班班長(zhǎng)工作總結(jié)5篇
- 行業(yè)會(huì)計(jì)比較(第三版)PPT完整全套教學(xué)課件
- 值機(jī)業(yè)務(wù)與行李運(yùn)輸實(shí)務(wù)(第3版)高職PPT完整全套教學(xué)課件
- 高考英語(yǔ)語(yǔ)法填空專項(xiàng)訓(xùn)練(含解析)
- 42式太極劍劍譜及動(dòng)作說明(吳阿敏)
- 部編版語(yǔ)文小學(xué)五年級(jí)下冊(cè)第一單元集體備課(教材解讀)
- 仁愛英語(yǔ)九年級(jí)下冊(cè)單詞表(中英文)
- 危險(xiǎn)化學(xué)品企業(yè)安全生產(chǎn)標(biāo)準(zhǔn)化課件
評(píng)論
0/150
提交評(píng)論