自動取款機(ATM)模擬程序(C#控制臺應用程序)_第1頁
自動取款機(ATM)模擬程序(C#控制臺應用程序)_第2頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、自動取款機(ATM)模擬程序一、需求我們需要設計一個具備如下功能的ATM模擬程序。開戶:用戶能夠通過ATM來開設帳號,開戶需要設置密碼。登錄:用戶能夠登錄到已經開設的帳號上,登錄需要驗證密碼管理帳號:用戶登錄到帳號上后,能夠進行如下的操作。存款:將指定的款項存到帳號中。取款:從帳號中取出指定的款項。查詢余額:查詢帳號的余額。修改密碼:修改帳號的密碼。二、分析面向對象編程的第一步是進行面向對象分析。面向對象分析的目標是建立問題領域的模型,包括如下模型。 功能模型:即畫出每一個功能要求的用例圖。 對象模型:對用例模型進行分析,把系統(tǒng)分解成互相協(xié)作的類,通過類圖/對象圖描述對象、對象的屬性、對象間的

2、關系。 動態(tài)模型:描述系統(tǒng)的動態(tài)行為,通過序列圖來描述對象的交互,以揭示對象間如何寫作來完成每個具體的用例,單個對象的狀態(tài)變化和動態(tài)行為可以通過狀態(tài)圖來表達。1.功能模型根據(jù)我們的需求,可以很容易地畫出ATM模擬程序的用例圖:豎量*號團8-1ATM模擬程序用例圖«UMS»可以看出,用戶可以開戶和登錄帳號,開戶或者登錄帳號之后就能管理帳號。要管理賬號就必須首先登錄帳號或者開戶。管理帳號的功能包括存款、取款、查詢余額和修改密碼。2.對象模型ATM是銀行相連的設備,因此銀行是ATM模擬程序的相關對象,所有的操作都是針對帳號的,因此帳號是其中的核心對象。此外,需要一個程序來啟動AT

3、M。因此,在ATM模擬程序中,我們需要處理四個類,或者說四類對象:啟動程序、ATM、銀行及帳號。1) 帳號類Account帳號類Account包含所有的帳號信息負責所有的帳號操作?;镜膸ぬ栃畔ǎ?帳號名name 帳號密碼password 帳號余額balance主要的帳號操作包括: 登錄Login 存款Deposit 取款Withdraw 查詢余額Get_Balance 修改密碼ChangePassword2) 銀行類Bank銀行類Bank的本質就是一組帳號的組合,并負責管理帳號?;镜你y行信息包括: 銀行名name 已經開戶的帳號數(shù)usedAccountNum 可以容納的最大賬戶數(shù)Max

4、AccountNum 帳號集accounts主要的銀行操作包括: 開戶OpenAccount 登錄帳號LoginAccount撤銷帳號,但是由于ATM不能撤銷帳號,因此我們不關心這個操作3) ATM類ATM類與銀行類之間在一對一的關聯(lián)關系,ATM提供用戶界面,并將用戶的請求提交給銀行、將銀行的反饋提交給用戶?;镜腁TM信息包括: 銀行Bank主要的ATM操作包括: 啟動Start 開戶OpenAccount 登錄帳號LoginAccount 管理帳號ManageAccount 一些顯示不同信息的輔助操作(PrintLogo、Print、Pause等)。4) 啟動程序類Program啟動程序類

5、Program的唯一功能就是創(chuàng)建銀行類和ATM類的實例,并將它們關聯(lián)起來,然后啟動ATM(執(zhí)行ATM對象的Start方法)。因此,這個類僅僅包含程序的入口點Main方法。5) ATM模擬程序的類圖根據(jù)上述各類的分析,可以畫出ATM模擬程序的類圖:比0©0牡?1nflincistring,mpas!s!w0fd:(Jecimal:ba£l+Dcptuianwunt:dimd):tool+Withdraw(iDaiiiK沖皿皿”創(chuàng)4Chin,gePasswand(inoLdPass*理輕竺)雙巴竺竺豎竺竺迥空色<<ijnplEinriiitBtionla5fi>

6、;>Awuiml.凰缶2ATM撲擬程序類圖passwordzslrifig#baLafiee:-de£imal#u5cdAccx3witNum:iilil*MaxA8Mn<Nuni;iiit鼻acctHJ口壓/csuEit.注意:Bank類和Account類的數(shù)據(jù)成員都使用protected訪問模式,主要是為了使它們的之類都能集成它們的這些數(shù)據(jù)成員。3.動態(tài)模型ATM模擬程序的基本工作流程:三、設計經過分析,我們已經了解了ATM模擬程序中的四個類的基本結構。在設計階段需要進一步細化個各類的結構。對Account類,我們將進行如下的調整:用只讀屬性來實現(xiàn)Get_Balanc

7、e方法 增加賭氣name的只讀屬性。 增加構造函數(shù)。 重載Deposit方法,并提供三個重載方法。 重載Withdraw方法,并提供三個重載方法。對Bank類,主要調整包括: 提供構造函數(shù),傳入銀行的名稱。 增加讀取name的只讀屬性。 用數(shù)組來實現(xiàn)帳號集。用常量來表示MaxAccountNum對ATM類,主要增加幾個與用戶交互的函數(shù)(打印信息和輸入信息),以及一個退出系統(tǒng)的密碼。在設計類的時候,為了提供代碼的重用性,一個重要的原則是,不要將功能與用戶界面緊密耦合在一起。在這個程序中,Account類和Bank類是功能類,ATM類是用戶界面類。因此,在設計Account類和Bank類時候,不要

8、涉及任何的用戶界面操作。所有的用戶界面都放在ATM類中。這樣做的好處是:功能類可以適用于任何的用戶界面,比如,Bank類和Account可以用于網上銀行,用戶界面類可以適用于其他功能,比如,ATM類可以用于信用卡機構。四、實現(xiàn)1)在ATM項目中增加Account類usingSystem;usingSystem.Collections.Generic;usingSystem.Text;/Account.cs/ATM項目中的Account類源文件namespaceATMclassAccountprotectedstringname;protectedstringpassword;protected

9、decimalbalance;publicdecimalBanlancegetreturnbalance;publicstringNamegetreturnname;publicAccount(stringname,stringpassword)this.balance=0;=name;this.password=password;publicboolDeposit(decimalamount)if(amount<=0)returnfalse;balance+=amount;returntrue;publicboolDeposit(doubleamount)return

10、Deposit(decimal)amount);publicboolDeposit(intamount)returnDeposit(decimal)amount);publicboolDeposit(decimalamount,outdecimalbalance)boolsucceed=Deposit(amount);balance=this.balance;returnsucceed;publicboolWithdraw(decimalamount)if(amount>balance|amount<=0)returnfalse;balance-=amount;returntrue

11、;publicboolWithdraw(doubleamount)returnWithdraw(decimal)amount);publicboolWithdraw(intamount)returnWithdraw(decimal)amount);publicboolWithdraw(decimalamount,outdecimalbalance)boolsucceed=Withdraw(amount);balance=this.balance;returnsucceed;publicboolChangePassword(stringoldPassword,stringnewPassword)

12、if(oldPassword!=password)returnfalse;password=newPassword;returntrue;publicboolLogin(stringname,stringpassword)return(=name&&this.password=password);2)在ATM項目中增加Bank類usingSystem;usingSystem.Collections.Generic;usingSystem.Text;/Bank.cs/ATM項目中的Bank類源文件namespaceATMclassBankprotectedstr

13、ingname;protectedconstintMaxAccountNum=2048;protectedintusedAccountNum;protectedAccountaccounts;publicstringNamegetreturnname;publicBank(stringname)=name;this.usedAccountNum=0;accounts=newAccountMaxAccountNum;publicboolLoginAccount(stringname,stringpassword,outAccountaccount)account=null;fo

14、r(inti=0;i<usedAccountNum;+i)if(accountsi.Login(name,password)account=accountsi;returnfalse;publicboolOpenAccount(stringname,stringpassword,outAccountaccount)account=null;for(inti=0;i<usedAccountNum;+i)if(accountsi.Name=name)returnfalse;account=newAccount(name,password);accountsusedAccountNum+

15、=account;returntrue;3)在ATM項目中增加ATM類usingSystem;usingSystem.Collections.Generic;usingSystem.Text;/ATM.cs/ATM項目中的ATM類源文件namespaceATMclassATMprivateconststringquitcode="20130814"privateBankbank;publicATM(Bankbank)this.bank=bank;publicvoidStart()while(true)/主界面PrintLogo();Console.WriteLine(&qu

16、ot;1.開戶")Console.WriteLine("2.登錄")Console.WriteLine("3.退出")Console.WriteLine("")Console.WriteLine("");Console.Write("請輸入您的選擇(回車結束):");stringcode=Console.ReadLine();/quitsystemif(code=quitcode)return;if(code="1")OpenAccount();elseif(cod

17、e="2")LoginAccount();elseif(code="3")Console.WriteLine("按一下任意鍵直接退出.");Console.ReadKey();return;privatevoidLoginAccount()PrintLogo();Console.WriteLine("請輸入您的帳號的用戶名和密碼:");Console.WriteLine("");Console.WriteLine("");stringname=Input("用戶名(

18、回車結束):");stringpassword=Input("密碼(回車結束):");/登錄帳號Accountaccount;if(!bank.LoginAccount(name,password,outaccount)Console.WriteLine("登錄錯誤,請檢查用戶名和密碼是否正確。按Enter鍵繼續(xù).-");Console.Read();elseManageAccount(refaccount);privatevoidOpenAccount()PrintLogo();Console.WriteLine("請輸入您的帳號的

19、用戶名和密碼");Console.WriteLine("");Console.WriteLine("");stringname=Input("用戶名(回車結束):");stringpassword=Input("密碼(回車結束):");/開戶Accountaccount;if(!bank.OpenAccount(name,password,outaccount)Console.WriteLine("開戶錯誤,用戶名和密碼已經存在。按Enter鍵繼續(xù).");Console.Read();

20、elsePrint("開戶",0,account);Pause();ManageAccount(refaccount);privatevoidManageAccount(refAccountaccount)while(true)/管理帳號界面PrintLogo();1. 存款");2. 取款");3.查詢余額");4. 修改密碼");5. 退出");");Console.WriteLine("Console.WriteLine("Console.WriteLine("Console.W

21、riteLine("Console.WriteLine("Console.WriteLine("Console.WriteLine("");ConsoleWrite("您的選擇是(回車結束):");stringcode=Console.ReadLine();strings;decimalamount;boolsucceed;switch(code)case"1":amount=InputNumber("n請輸入存款數(shù)目:");succeed=account.Deposit(amount

22、);if(succeed)Print("存入",amount,account);elseConsole.WriteLine("存款失?。 ?;Pause();break;case"2":amount=InputNumber("n請輸入取款數(shù)目:");succeed=account.Withdraw(amount);if(succeed)Print("取出",amount,account);elseConsole.WriteLine("取款失敗!”);Pause();break;case"

23、;3":Print(account);Pause();break;case"4":stringoldPassword=Input("當前密碼(回車結束):");stringnewPassword=Input("新密碼(回車結束):");succeed=account.ChangePassword(oldPassword,newPassword);if(succeed)Console.WriteLine("密碼修改成功!”);elseConsole.WriteLine("密碼修改失敗!”);Pause();

24、break;case"5":return;/break;default:break;privatevoidPrintLogo()Console.WriteLine("n");Console.WriteLine("0自動取款機用專業(yè)的心做專業(yè)的事",bank.Name);Console.WriteLine("");privatestringInput(stringprompt)Console.Write(prompt);stringstr=Console.ReadLine();while(str="")Console.Write("不能為空,0",prompt);str=Console.ReadLine();returnstr;privatedecimalInputNumber(stringprompt)Console.Write(prompt);strings=Console.ReadLine();decimalamount=Decimal.Parse(s);returnamount;privatevoidPause()Console

溫馨提示

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

評論

0/150

提交評論