模拟ATM详细设计以及编码实现Word格式文档下载.docx
- 文档编号:18445707
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:30
- 大小:252.41KB
模拟ATM详细设计以及编码实现Word格式文档下载.docx
《模拟ATM详细设计以及编码实现Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《模拟ATM详细设计以及编码实现Word格式文档下载.docx(30页珍藏版)》请在冰豆网上搜索。
1.如果用户输入选项1将查询余额,屏幕将会显示账户里的余额。
这一步是ATM系统从数据库中查询出来然后显示到系统界面上。
2.如果用户输入选项2取款,以下几个步骤将会描述发生的事件:
1)屏幕将会显示一个菜单,菜单包括标准的取款数目,以及取消交易的选项。
ATM取款菜单如图1.3所示
图1.3ATM取款界面
2)用户通过键盘输入一个菜单选项.
3)如果取款金额大于用户的账户余额,屏幕会显示一个提示信息,让用户选择一个小的数目来取款。
ATM将会返回第一步。
如果取款金额小于或者等于用户的账户余额,将会进行第四步。
4)如果取款机里面的余额足够的话,将会进行第五步,否则提示给用户信息,让其选择小的数目来取款。
5)ATM将会从银行的数据库里的用户账户里扣除所取的钱。
6)所取的钱将会从出钱口里出来。
7)系统显示提示信息,提示用户拿钱。
3.如果用户输入选项3存款,以下几个步骤将会描述发生的事件:
1)系统提示用户,输入存款金额,或者输入0来取消。
2)用户输入存款金额或者输入0。
3)如果用户输入一个存款金额,将会执行第四步。
如果用户输入0来取消交易,系统将会返回主菜单界面等待用户输入。
4)系统提示用户,插入存折。
5)如果存储槽在2分钟内收到了存折,系统将会在银行的数据库里增加存款金额。
如果在这段时间内没有收到存折,系统将会显示信息,系统取消交易。
ATM返回到主界面等待用户输入。
每当系统成功交易后,应该返回到主界面菜单,这样用户可以执行其他的交易操作。
如果用户退出系统,屏幕显示“谢谢,欢迎下次使用!
”信息。
Lab2.ATM系统分析
Task1.用例图(UseCaseDiagrams)
1.用例图(UseCaseDiagrams)
说明:
用例图主要用来描述角色和用例之间的关系,着重展示系统必须实现的功能。
2.主要元素
a)用例(usecase),系统为角色提供可见结果的一系列动作(简单理解为角色可见的系统功能),使用椭圆表示。
b)角色(actor),在与系统的一次或者多次交互中起作用的人,组织或者其他系统(即本系统的用户或者使用本系统的其他外部系统),使用小人图形表示。
c)关系(association),角色和用例的交互,使用带箭头或者不带箭头的实线表示,箭头表示调用关系。
d)包(package),可选元素,用于组织各种UML图,使之容易管理和浏览(类似java中的包),可以包括类图和用例图,使用文件夹的形式表示。
在ATM系统中我们需要一个actor和三个usercase,用例图如下所示。
Task2.类图(ClassDiagrams)
每一个类被设计成一个长方体,有三个矩形组成。
最上面一层是类名,中间一层是类的属性,下面一层是类的方法。
类图可以显示出类、接口以及它们之间的静态结构和关系。
从需求分析文档我们可以抽象出来ATM系统需要的组件。
组件为:
KeyPad,Screen,ATM,DispositSlot,CashDispenser。
它们在ATM系统中组件之间的的关系如下图2.1所示:
图2.1ATM组件之间的关系
从项目的需求分析我们可以对整个ATM系统中所需要的类进行定义。
所有的类中属性和方法。
如下图2.2所示。
图2.2ATM系统类的属性和方法
上面的图给我们提供了一个固定的基本的结构模型。
类ATM包含ATM的状态信息。
userAuthenticated是一个Boolean属性。
类BalanceInquiry,WithdrawalandDeposit共享一个属性accountnumber。
分别含有execute()方法。
类Account含有四个属性,有需求分析我们可以得到应该有accountNumber和pin,availableBalance(账户可用余额)和totalBalance(总余额)。
五个方法:
validatePIN(),getAvailableBalance(),getTotalBalance,credit(),debit()。
类CashDispenser含有一个属性account。
我们可以分配给其一个整形属性count,初始数值为500,另外含有两个方法dispenserCash()和isSufficientAvailable()。
类Screen含有一个显示信息的方法,displayMessage()。
类KeyPad含有一个获得输入的方法getInput()。
类BankDatabase包含五个方法:
authenticateUser()验证用户,getAvailableBalance(),getTotalBalance(),credit(),debit()。
类DepositSlot含有一个方法isEnvelopeReceived()验证是否收到存折。
根据需求分析,我们可以画出ATM系统的类图,如图2.2所示。
图2.2ATM系统类图
上图可以显示出类之间的关系。
Task3.活动图(ActivityDiagram)
活动图描述的是对象活动的顺序关系所遵循的规则,它着重表现的是系统的行为,而非系统的处理过程。
活动图能够表示并发活动的情形,活动图是面向对象的。
ATM系统中取款交易的活动图如下图3.1如下:
图3.1取款活动图
从上面的活动图中我们可以很清楚的看到每次需要执行的活动
Task4.时序图(SequenceDiagrams)
时序图(SequenceDiagram),亦称为序列图或循序图,是一种UML行为图。
它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。
它可以表示用例的行为顺序,当执行一个用例行为时,时序图中的每条消息对应了一个类操作或状态机中引起转换的触发事件。
取钱交易的时序图如下图4.1所示。
图4.1取钱交易的时序图
获得取钱的数目后,Withdrawal发送一个getAvailableBalance消息BankDatabase,然后BankDatabase发送一个getAvailableBalance消息给Account。
假设用户有足够的钱来交易,Withdrawal下次发送一个isSufficientCashAvailable消息给CashDispenser,假设钱也是足够的话,Withdrawal会减少用户的账户余额通过发送一个debit消息给BankDatabase。
BankDatabase通过发送一个debit消息给用用户的Account做出响应。
最后的话,Withdrawal给CashDispenser发送一个dispenserCash消息和给Screen发送一个displayMessage消息,提示用户从机器出取出现金。
Lab3.系统编码实现
Task1.新建项目
有了需求分析以及类图,我们可以实现ATM系统的编码了。
1)首先打开Eclipse,然后新建Javaproject。
工程名为:
ATM。
2)在src的目录下新建项目需要的包,具体如下:
com.icss.ATM.vo,主要存放VO对象,在ATM中用来存储账户信息。
com.icss.ATM.business这个包是用来存放业务逻辑的类。
com.icss.ATM.database这个包是用来存放用户数据的类。
com.icss.ATM.compontent这个包是用来存放ATM系统组件的
com.icss.ATM.main这个包放的是测试ATM系统的,也就是运行ATM系统的入口处。
3)根据需求分析,新建类,工程的结构如下图。
Task2.编码实现
1.类ATM
类ATM代表了整个ATM系统,这个类实现了:
1.authenticateUser()方法,验证用户身份信息。
2.performTransactions()方法,可以执行交易。
3.createTransaction()方法,可以创建交易。
4.退出主菜单,处理无效选项。
5.等待下一个ATM用户。
代码如下:
publicclassATM{
privatebooleanuserAuthenticated;
//whetheruserisauthenticated
privateintcurrentAccountNumber;
//currentuser'
saccountnumber
privateScreenscreen;
//ATM'
sscreen
privateKeypadkeypad;
skeypad
privateCashDispensercashDispenser;
scashdispenser
privateDepositSlotdepositSlot;
sdepositslot
privateBankDatabasebankDatabase;
//accountinformationdatabase
//constantscorrespondingtomainmenuoptions
privatestaticfinalintBALANCE_INQUIRY=1;
privatestaticfinalintWITHDRAWAL=2;
privatestaticfinalintDEPOSIT=3;
privatestaticfinalintEXIT=4;
//ATM构造函数
publicATM(){
userAuthenticated=false;
//userisnotauthenticatedtostart
currentAccountNumber=0;
//nocurrentaccountnumbertostart
screen=newScreen();
//createscreen
keypad=newKeypad();
//createkeypad
cashDispenser=newCashDispenser();
//createcashdispenser
depositSlot=newDepositSlot();
//createdepositslot
bankDatabase=newBankDatabase();
//createacctinfodatabase
}
//startATM
//ATM中的run()方法
publicvoidrun(){
//欢迎,验证信息,以及执行交易
while(true){
//当用户身份没有被验证的时候,循环
while(!
userAuthenticated){
screen.displayMessageLine("
\nWelcome!
"
);
authenticateUser();
//验证用户
}
performTransactions();
//用户验证了,将进行交易
userAuthenticated=false;
//resetbeforenextATMsession
currentAccountNumber=0;
screen.displayMessageLine("
\nThankyou!
Goodbye!
}
}//endmethodrun
//验证用户信息
privatevoidauthenticateUser(){
screen.displayMessage("
\nPleaseenteryouraccountnumber:
"
intaccountNumber=keypad.getInput();
//inputaccountnumber
\nEnteryourPIN:
//promptforPIN
intpin=keypad.getInput();
//inputPIN
//setuserAuthenticatedtobooleanvaluereturnedbydatabase
userAuthenticated=bankDatabase.authenticateUser(accountNumber,pin);
//checkwhetherauthenticationsucceeded
if(userAuthenticated){
currentAccountNumber=accountNumber;
//saveuser'
saccount#
}//endif
else
InvalidaccountnumberorPIN.Pleasetryagain."
}//endmethodauthenticateUser
//displaythemainmenuandperformtransactions
//执行交易
privatevoidperformTransactions(){
//localvariabletostoretransactioncurrentlybeingprocessed
TransactioncurrentTransaction=null;
booleanuserExited=false;
//userhasnotchosentoexit
//loopwhileuserhasnotchosenoptiontoexitsystem
while(!
userExited){
//showmainmenuandgetuserselection
intmainMenuSelection=displayMainMenu();
//decidehowtoproceedbasedonuser'
smenuselection
switch(mainMenuSelection){
//userchosetoperformoneofthreetransactiontypes
caseBALANCE_INQUIRY:
caseWITHDRAWAL:
caseDEPOSIT:
//initializeasnewobjectofchosentype
currentTransaction=createTransaction(mainMenuSelection);
currentTransaction.execute();
//executetransaction
break;
caseEXIT:
//userchosetoterminatesession
\nExitingthesystem..."
userExited=true;
//thisATMsessionshouldend
default:
//userdidnotenteranintegerfrom1-4
\nYoudidnotenteravalidselection.Tryagain."
}//endswitch
}//endwhile
}//endmethodperformTransactions
//显示主菜单
privateintdisplayMainMenu(){
screen.displayMessageLine("
\nMainmenu:
1-Viewmybalance"
2-Withdrawcash"
3-Depositfunds"
4-Exit\n"
Enterachoice:
returnkeypad.getInput();
//returnuser'
sselection
}//endmethoddisplayMainMenu
//returnobjectofspecifiedTransactionsubclass
//创建交易
privateTransactioncreateTransaction(inttype){
Transactiontemp=null;
//temporaryTransactionvariable
//决定哪种交易类型需要创建
switch(type){
caseBALANCE_INQUIRY:
//createnewBalanceInquirytransaction
temp=newBalanceInquiry(currentAccountNumber,screen,
bankDatabase);
break;
caseWITHDRAWAL:
//createnewWithdrawaltransaction
temp=newWithDrawal(currentAccountNumber,screen,bankDatabase,
keypad,cashDispenser);
caseDEPOSIT:
//createnewDeposittransaction
temp=newDeposit(currentAccountNumber,screen,bankDatabase,
keypad,depositSlot);
}//endswitch
returntemp;
//returnthenewlycreatedobject
}//endmethodcreateTransaction
}
2.类Screen
类Screen代表的是ATM的屏幕,主要实现的功能就是显示给用户一些信息。
我们可以使用java中标准的输出方式System.out.print()来输出信息。
publicclassScreen{
//displayamessagewithoutacarriagereturn
publicvoiddisplayMessage(Stringmessage){
System.out.print(message);
}//endmethoddisplayMessage
//displayamessagewithacarriagereturn
publicvoiddisplayMessageLine(Stringmessage){
System.out.println(message);
}//endmethoddisplayMessageLine
//displaysadollaramount
publicvoiddisplayDollarAmount(doubleamount){
System.out.printf("
$%,.2f"
amount);
}//endmethoddisplayDollarAmount
}
3.类Keypad
Keypad代表的是自动取款机的键盘,负责接受用户输入的数据。
我们模拟ATM,可以使用电脑的键盘来代替Keypad。
我们可以使用Scanner类来获得用户输入的结果。
publicclassKeypad{
privateScannerinput;
//readsdatafromthecommandline
//no-argumentconstructorinitializestheScanner
publicKeypad(){
input=newScanner(System.in);
}//endno-argumentKeypadconstructor
//returnanintegervalueenteredbyuser
publicin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模拟 ATM 详细 设计 以及 编码 实现