基于java的ATM模拟程序.docx
- 文档编号:6811039
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:19
- 大小:154.49KB
基于java的ATM模拟程序.docx
《基于java的ATM模拟程序.docx》由会员分享,可在线阅读,更多相关《基于java的ATM模拟程序.docx(19页珍藏版)》请在冰豆网上搜索。
基于java的ATM模拟程序
自动取款机(ATM)模拟程序
一、需求
我们需要设计一个具备如下功能的ATM模拟程序。
●开户:
用户能够通过ATM来开设帐号,开户需要设置密码。
●登录:
用户能够登录到已经开设的帐号上,登录需要验证密码。
●管理帐号:
用户登录到帐号上后,能够进行如下的操作。
■存款:
将指定的款项存到帐号中。
■取款:
从帐号中取出指定的款项。
■查询余额:
查询帐号的余额。
■修改密码:
修改帐号的密码。
二、分析
面向对象编程的第一步是进行面向对象分析。
面向对象分析的目标是建立问题领域的模型,包括如下模型。
●功能模型:
即画出每一个功能要求的用例图。
●对象模型:
对用例模型进行分析,把系统分解成互相协作的类,通过类图/对象图描述对象、对象的属性、对象间的关系。
●动态模型:
描述系统的动态行为,通过序列图来描述对象的交互,以揭示对象间如何写作来完成每个具体的用例,单个对象的状态变化和动态行为可以通过状态图来表达。
1.功能模型
根据我们的需求,可以很容易地画出ATM模拟程序的用例图:
可以看出,用户可以开户和登录帐号,开户或者登录帐号之后就能管理帐号。
要管理账号,就必须首先登录帐号或者开户。
管理帐号的功能包括存款、取款、查询余额和修改密码。
2.对象模型
ATM是银行相连的设备,因此银行是ATM模拟程序的相关对象,所有的操作都是针对帐号的,因此帐号是其中的核心对象。
此外,需要一个程序来启动ATM。
因此,在ATM模拟程序中,我们需要处理四个类,或者说四类对象:
启动程序、ATM、银行及帐号。
1)帐号类Account
帐号类Account包含所有的帐号信息负责所有的帐号操作。
基本的帐号信息包括:
●帐号名name
●帐号密码password
●帐号余额balance
主要的帐号操作包括:
●登录Login
●存款Deposit
●取款Withdraw
●查询余额Get_Balance
●修改密码ChangePassword
2)银行类Bank
银行类Bank的本质就是一组帐号的组合,并负责管理帐号。
基本的银行信息包括:
●银行名name
●已经开户的帐号数usedAccountNum
●可以容纳的最大账户数MaxAccountNum
●帐号集accounts
主要的银行操作包括:
●开户OpenAccount
●登录帐号LoginAccount
●撤销帐号,但是由于ATM不能撤销帐号,因此我们不关心这个操作
3)ATM类
ATM类与银行类之间在一对一的关联关系,ATM提供用户界面,并将用户的请求提交给银行、将银行的反馈提交给用户。
基本的ATM信息包括:
●银行Bank
主要的ATM操作包括:
●启动Start
●开户OpenAccount
●登录帐号LoginAccount
●管理帐号ManageAccount
●一些显示不同信息的辅助操作(PrintLogo、Print、Pause等)。
4)启动程序类Program
启动程序类Program的唯一功能就是创建银行类和ATM类的实例,并将它们关联起来,然后启动ATM(执行ATM对象的Start方法)。
因此,这个类仅仅包含程序的入口点Main方法。
5)ATM模拟程序的类图
根据上述各类的分析,可以画出ATM模拟程序的类图:
注意:
Bank类和Account类的数据成员都使用protected访问模式,主要是为了使它们的之类都能集成它们的这些数据成员。
3.动态模型
ATM模拟程序的基本工作流程:
三、设计
经过分析,我们已经了解了ATM模拟程序中的四个类的基本结构。
在设计阶段需要进一步细化个各类的结构。
对Account类,我们将进行如下的调整:
●用只读属性来实现Get_Balance方法
●增加赌气name的只读属性。
●增加构造函数。
●重载Deposit方法,并提供三个重载方法。
●重载Withdraw方法,并提供三个重载方法。
对Bank类,主要调整包括:
●提供构造函数,传入银行的名称。
●增加读取name的只读属性。
●用数组来实现帐号集。
●用常量来表示MaxAccountNum
对ATM类,主要增加几个与用户交互的函数(打印信息和输入信息),以及一个退出系统的密码。
在设计类的时候,为了提供代码的重用性,一个重要的原则是,不要将功能与用户界面紧密耦合在一起。
在这个程序中,Account类和Bank类是功能类,ATM类是用户界面类。
因此,在设计Account类和Bank类时候,不要涉及任何的用户界面操作。
所有的用户界面都放在ATM类中。
这样做的好处是:
功能类可以适用于任何的用户界面,比如,Bank类和Account可以用于网上银行,用户界面类可以适用于其他功能,比如,ATM类可以用于信用卡机构。
四、实现
1)在ATM项目中增加Account类
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
//Account.cs
//ATM项目中的Account类源文件
namespaceATM
{
classAccount
{
protectedstringname;
protectedstringpassword;
protecteddecimalbalance;
publicdecimalBanlance
{
get
{
returnbalance;
}
}
publicstringName
{
get
{
returnname;
}
}
publicAccount(stringname,stringpassword)
{
this.balance=0;
this.name=name;
this.password=password;
}
publicboolDeposit(decimalamount)
{
if(amount<=0)
{
returnfalse;
}
balance+=amount;
returntrue;
}
publicboolDeposit(doubleamount)
{
returnDeposit((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;
}
publicboolWithdraw(doubleamount)
{
returnWithdraw((decimal)amount);
}
publicboolWithdraw(intamount)
{
returnWithdraw((decimal)amount);
}
publicboolWithdraw(decimalamount,outdecimalbalance)
{
boolsucceed=Withdraw(amount);
balance=this.balance;
returnsucceed;
}
publicboolChangePassword(stringoldPassword,stringnewPassword)
{
if(oldPassword!
=password)
{
returnfalse;
}
password=newPassword;
returntrue;
}
publicboolLogin(stringname,stringpassword)
{
return(this.name==name&&this.password==password);
}
}
}
2)在ATM项目中增加Bank类
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
//Bank.cs
//ATM项目中的Bank类源文件
namespaceATM
{
classBank
{
protectedstringname;
protectedconstintMaxAccountNum=2048;
protectedintusedAccountNum;
protectedAccount[]accounts;
publicstringName
{
get
{
returnname;
}
}
publicBank(stringname)
{
this.name=name;
this.usedAccountNum=0;
accounts=newAccount[MaxAccountNum];
}
publicboolLoginAccount(stringname,stringpassword,outAccountaccount)
{
account=null;
for(inti=0;i { if(accounts[i].Login(name,password)) { account=accounts[i]; returntrue; } } returnfalse; } publicboolOpenAccount(stringname,stringpassword,outAccountaccount) { account=null; for(inti=0;i { if(accounts[i].Name==name) { returnfalse; } } account=newAccount(name,password); accounts[usedAccountNum++]=account; returntrue; } } } 3)在ATM项目中增加ATM类 usingSystem; usingSystem.Collections.Generic; usingSystem.Text; //ATM.cs //ATM项目中的ATM类源文件 namespaceATM { classATM { privateconststringquitcode="20130814"; privateBankbank; publicATM(Bankbank) { this.bank=bank; } publicvoidStart() { while(true) { //主界面 PrintLogo(); Console.WriteLine("---------------1.开户---------------"); Console.WriteLine("---------------2.登录---------------"); Console.WriteLine("---------------3.退出---------------"); Console.WriteLine("------------------------------------"); Console.WriteLine(""); Console.Write("请输入您的选择(回车结束): "); stringcode=Console.ReadLine(); //quitsystem if(code==quitcode) { return; } if(code=="1") { OpenAccount(); } elseif(code=="2") { LoginAccount(); } elseif(code=="3") { Console.WriteLine("按一下任意键直接退出..."); Console.ReadKey(); return; } } } privatevoidLoginAccount() { PrintLogo(); Console.WriteLine("---------------请输入您的帐号的用户名和密码: ---------------"); Console.WriteLine("------------------------------------------------------------"); Console.WriteLine(""); stringname=Input("用户名(回车结束): "); stringpassword=Input("密码(回车结束): "); //登录帐号 Accountaccount; if(! bank.LoginAccount(name,password,outaccount)) { Console.WriteLine("---登录错误,请检查用户名和密码是否正确。 按Enter键继续...---"); Console.Read(); } else { ManageAccount(refaccount); } } privatevoidOpenAccount() { PrintLogo(); Console.WriteLine("---------------请输入您的帐号的用户名和密码: ---------------"); Console.WriteLine("------------------------------------------------------------"); Console.WriteLine(""); stringname=Input("用户名(回车结束): "); stringpassword=Input("密码(回车结束): "); //开户 Accountaccount; if(! bank.OpenAccount(name,password,outaccount)) { Console.WriteLine("---开户错误,用户名和密码已经存在。 按Enter键继续...---"); Console.Read(); } else { Print("开户",0,account); Pause(); ManageAccount(refaccount); } } privatevoidManageAccount(refAccountaccount) { while(true) { //管理帐号界面 PrintLogo(); Console.WriteLine("---------------1.存款---------------"); Console.WriteLine("---------------2.取款---------------"); Console.WriteLine("---------------3.查询余额---------------"); Console.WriteLine("---------------4.修改密码---------------"); Console.WriteLine("---------------5.退出---------------"); Console.WriteLine("------------------------------------"); Console.WriteLine(""); Console.Write("您的选择是(回车结束): "); stringcode=Console.ReadLine(); strings; decimalamount; boolsucceed; switch(code) { case"1": amount=InputNumber("\n请输入存款数目: "); succeed=account.Deposit(amount); if(succeed) { Print("存入",amount,account); } else { Console.WriteLine("存款失败! "); } Pause(); break; case"2": amount=InputNumber("\n请输入取款数目: "); succeed=account.Withdraw(amount); if(succeed) { Print("取出",amount,account); } else { Console.WriteLine("取款失败! "); } Pause(); break; case"3": Print(account);; Pause(); break; case"4": stringoldPassword=Input("当前密码(回车结束): "); stringnewPassword=Input("新密码(回车结束): "); succeed=account.ChangePassword(oldPassword,newPassword); if(succeed) { Console.WriteLine("密码修改成功! "); } else { Console.WriteLine("密码修改失败! "); } Pause(); break; case"5": return; //break; default: break; } } } privatevoidPrintLogo() { Console.WriteLine("\n------------------------------------------"); Console.WriteLine("{0}自动取款机用专业的心做专业的事",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.Write("按Enter继续..."); Console.Read(); } privatevoidPrint(stringoperation,decimalamount,Accountaccount) { Console.WriteLine("---------------------------------------------"); Console.WriteLine("姓名: {0}",account.Name); Console.WriteLine("{0}: {1}",operation,amount); Console.WriteLine("余额: {0}",account.Banlance); Console.WriteLine("---------------------------------------------"); Console.WriteLine("{0}成功! ",operation); } privatevoidPrint(Accountaccount) { Console.WriteLine("---------------------------------------------"); Console.WriteLine("姓名: {0}",account.Name); Console.WriteLine("余额: {0}",account.Banlance); Console.WriteLine("---------------------------------------------"); } } } 4)修改ATM项目中自动创建的启动程序类Program usingSystem; usingSystem.Collections.Generic; usingSystem.Text; namespaceATM { classProgram { staticvoidMain(string[]args) { Console.WriteLine("欢迎来到\"老徐银行ATM机! \""); Bankbank=newBank("老徐银行"); ATMatm=newATM(bank); atm.Start(); } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 java ATM 模拟 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)