模拟ATM详细设计以及编码实现Word格式文档下载.docx

上传人:b****3 文档编号:18445707 上传时间:2022-12-16 格式:DOCX 页数:30 大小:252.41KB
下载 相关 举报
模拟ATM详细设计以及编码实现Word格式文档下载.docx_第1页
第1页 / 共30页
模拟ATM详细设计以及编码实现Word格式文档下载.docx_第2页
第2页 / 共30页
模拟ATM详细设计以及编码实现Word格式文档下载.docx_第3页
第3页 / 共30页
模拟ATM详细设计以及编码实现Word格式文档下载.docx_第4页
第4页 / 共30页
模拟ATM详细设计以及编码实现Word格式文档下载.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

模拟ATM详细设计以及编码实现Word格式文档下载.docx

《模拟ATM详细设计以及编码实现Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《模拟ATM详细设计以及编码实现Word格式文档下载.docx(30页珍藏版)》请在冰豆网上搜索。

模拟ATM详细设计以及编码实现Word格式文档下载.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1