1、1. 如果用户输入选项1 将查询余额,屏幕将会显示账户里的余额。这一步是ATM系统从数据库中查询出来然后显示到系统界面上。2. 如果用户输入选项2 取款,以下几个步骤将会描述发生的事件:1)屏幕将会显示一个菜单,菜单包括标准的取款数目,以及取消交易的选项。ATM取款菜单如图1.3所示图1.3 ATM取款界面2)用户通过键盘输入一个菜单选项.3)如果取款金额大于用户的账户余额,屏幕会显示一个提示信息,让用户选择一个小的数目来取款。ATM将会返回第一步。如果取款金额小于或者等于用户的账户余额,将会进行第四步。4)如果取款机里面的余额足够的话,将会进行第五步,否则提示给用户信息,让其选择小的数目来取
2、款。5)ATM将会从银行的数据库里的用户账户里扣除所取的钱。6)所取的钱将会从出钱口里出来。7)系统显示提示信息,提示用户拿钱。3. 如果用户输入选项3 存款,以下几个步骤将会描述发生的事件:1) 系统提示用户,输入存款金额,或者输入0来取消。2) 用户输入存款金额或者输入0。3) 如果用户输入一个存款金额,将会执行第四步。如果用户输入0来取消交易,系统将会返回主菜单界面等待用户输入。4) 系统提示用户,插入存折。5) 如果存储槽在2分钟内收到了存折,系统将会在银行的数据库里增加存款金额。如果在这段时间内没有收到存折,系统将会显示信息,系统取消交易。ATM返回到主界面等待用户输入。每当系统成功
3、交易后,应该返回到主界面菜单,这样用户可以执行其他的交易操作。如果用户退出系统,屏幕显示“谢谢,欢迎下次使用!”信息。Lab 2.ATM系统分析Task 1.用例图(Use Case Diagrams)1. 用例图(Use Case Diagrams)说明:用例图主要用来描述角色和用例之间的关系,着重展示系统必须实现的功能。2. 主要元素a) 用例(use case),系统为角色提供可见结果的一系列动作(简单理解为角色可见的系统功能),使用椭圆表示。b) 角色(actor),在与系统的一次或者多次交互中起作用的人,组织或者其他系统(即本系统的用户或者使用本系统的其他外部系统),使用小人图形表示
4、。c) 关系(association),角色和用例的交互,使用带箭头或者不带箭头的实线表示,箭头表示调用关系。d) 包(package),可选元素,用于组织各种UML图,使之容易管理和浏览(类似java中的包),可以包括类图和用例图,使用文件夹的形式表示。在ATM系统中我们需要一个actor和三个user case,用例图如下所示。Task 2.类图(Class Diagrams)每一个类被设计成一个长方体,有三个矩形组成。最上面一层是类名,中间一层是类的属性,下面一层是类的方法。类图可以显示出类、接口以及它们之间的静态结构和关系。从需求分析文档我们可以抽象出来ATM系统需要的组件。组件为:K
5、eyPad,Screen,ATM,DispositSlot,CashDispenser。它们在ATM系统中组件之间的的关系如下图2.1所示:图2.1ATM组件之间的关系从项目的需求分析我们可以对整个ATM系统中所需要的类进行定义。所有的类中属性和方法。如下图2.2所示。图2.2ATM系统类的属性和方法上面的图给我们提供了一个固定的基本的结构模型。类ATM包含ATM的状态信息。userAuthenticated是一个 Boolean属性。类BalanceInquiry, Withdrawal and Deposit 共享一个属性account number。分别含有execute()方法。类Ac
6、count含有四个属性,有需求分析我们可以得到应该有accountNumber 和 pin,availableBalance(账户可用余额) 和totalBalance(总余额)。五个方法:validatePIN(),getAvailableBalance(),getTotalBalance,credit(),debit()。类CashDispenser含有一个属性account。我们可以分配给其一个整形属性count,初始数值为500,另外含有两个方法dispenserCash()和isSufficientAvailable()。类Screen含有一个显示信息的方法,displayMessa
7、ge()。类KeyPad含有一个获得输入的方法getInput()。类BankDatabase包含五个方法:authenticateUser()验证用户,getAvailableBalance(),getTotalBalance(),credit(),debit()。类DepositSlot含有一个方法isEnvelopeReceived()验证是否收到存折。根据需求分析,我们可以画出ATM系统的类图,如图2.2所示。图2.2 ATM系统类图上图可以显示出类之间的关系。Task 3.活动图(Activity Diagram)活动图描述的是对象活动的顺序关系所遵循的规则,它着重表现的是系统的行为
8、,而非系统的处理过程。活动图能够表示并发活动的情形,活动图是面向对象的。ATM系统中取款交易的活动图如下图3.1如下:图3.1 取款活动图从上面的活动图中我们可以很清楚的看到每次需要执行的活动Task 4. 时序图(Sequence Diagrams)时序图(Sequence Diagram),亦称为序列图或循序图,是一种UML行为图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。它可以表示用例的行为顺序,当执行一个用例行为时,时序图中的每条消息对应了一个类操作或状态机中引起转换的触发事件。取钱交易的时序图如下图4.1所示。图4.1取钱交易的时序图获得取钱的数目后,Withd
9、rawal发送一个getAvailableBalance消息BankDatabase,然后BankDatabase发送一个getAvailableBalance消息给Account。假设用户有足够的钱来交易,Withdrawal下次发送一个isSufficientCashAvailable消息给CashDispenser,假设钱也是足够的话,Withdrawal会减少用户的账户余额通过发送一个debit消息给BankDatabase。BankDatabase通过发送一个debit消息给用用户的Account做出响应。最后的话,Withdrawal给CashDispenser发送一个dispen
10、serCash消息和给Screen发送一个displayMessage消息,提示用户从机器出取出现金。Lab 3.系统编码实现Task 1.新建项目有了需求分析以及类图,我们可以实现ATM系统的编码了。1) 首先打开Eclipse,然后新建Java project。工程名为:ATM。2) 在src的目录下新建项目需要的包,具体如下:com.icss.ATM.vo,主要存放VO对象,在ATM中用来存储账户信息。com.icss.ATM.business这个包是用来存放业务逻辑的类。com.icss.ATM.database这个包是用来存放用户数据的类。com.icss.ATM.componten
11、t这个包是用来存放ATM系统组件的com.icss.ATM.main这个包放的是测试ATM系统的,也就是运行ATM系统的入口处。3) 根据需求分析,新建类,工程的结构如下图。Task 2.编码实现1. 类ATM 类ATM代表了整个ATM系统,这个类实现了:1. authenticateUser()方法,验证用户身份信息。2. performTransactions()方法,可以执行交易。3. createTransaction()方法,可以创建交易。4. 退出主菜单,处理无效选项。5. 等待下一个ATM用户。代码如下:public class ATM private boolean userA
12、uthenticated; / whether user is authenticated private int currentAccountNumber; / current users account number private Screen screen; / ATMs screen private Keypad keypad;s keypad private CashDispenser cashDispenser;s cash dispenser private DepositSlot depositSlot;s deposit slot private BankDatabase
13、bankDatabase; / account information database / constants corresponding to main menu options private static final int BALANCE_INQUIRY = 1; private static final int WITHDRAWAL = 2; private static final int DEPOSIT = 3; private static final int EXIT = 4; /ATM构造函数 public ATM() userAuthenticated = false;
14、 / user is not authenticated to start currentAccountNumber = 0; / no current account number to start screen = new Screen(); / create screen keypad = new Keypad(); / create keypad cashDispenser = new CashDispenser(); / create cash dispenser depositSlot = new DepositSlot(); / create deposit slot bankD
15、atabase = new BankDatabase(); / create acct info database / start ATM/ATM中的run()方法 public void run() / 欢迎,验证信息,以及执行交易 while (true) / 当用户身份没有被验证的时候,循环 while (!userAuthenticated) screen.displayMessageLine(nWelcome!); authenticateUser(); / 验证用户 performTransactions(); / 用户验证了,将进行交易 userAuthenticated = f
16、alse; / reset before next ATM session currentAccountNumber = 0; screen.displayMessageLine(nThank you! Goodbye! / end method run /验证用户信息 private void authenticateUser() screen.displayMessage(nPlease enter your account number: int accountNumber = keypad.getInput(); / input account numbernEnter your PI
17、N: / prompt for PIN int pin = keypad.getInput(); / input PIN / set userAuthenticated to boolean value returned by database userAuthenticated = bankDatabase.authenticateUser(accountNumber, pin); / check whether authentication succeeded if (userAuthenticated) currentAccountNumber = accountNumber; / sa
18、ve users account # / end if elseInvalid account number or PIN. Please try again. / end method authenticateUser / display the main menu and perform transactions/执行交易 private void performTransactions() / local variable to store transaction currently being processed Transaction currentTransaction = nul
19、l; boolean userExited = false; / user has not chosen to exit / loop while user has not chosen option to exit system while (!userExited) / show main menu and get user selection int mainMenuSelection = displayMainMenu(); / decide how to proceed based on users menu selection switch (mainMenuSelection)
20、/ user chose to perform one of three transaction types case BALANCE_INQUIRY: case WITHDRAWAL: case DEPOSIT: / initialize as new object of chosen type currentTransaction = createTransaction(mainMenuSelection); currentTransaction.execute(); / execute transaction break; case EXIT: / user chose to termi
21、nate sessionnExiting the system. userExited = true; / this ATM session should end default: / user did not enter an integer from 1-4nYou did not enter a valid selection. Try again. / end switch / end while / end method performTransactions/显示主菜单 private int displayMainMenu() screen.displayMessageLine(
22、nMain menu:1 - View my balance2 - Withdraw cash3 - Deposit funds4 - ExitnEnter a choice: return keypad.getInput(); / return users selection / end method displayMainMenu / return object of specified Transaction subclass /创建交易 private Transaction createTransaction(int type) Transaction temp = null; /
23、temporary Transaction variable /决定哪种交易类型需要创建 switch (type) case BALANCE_INQUIRY: / create new BalanceInquiry transaction temp = new BalanceInquiry(currentAccountNumber, screen, bankDatabase); break; case WITHDRAWAL: / create new Withdrawal transaction temp = new WithDrawal(currentAccountNumber, scre
24、en, bankDatabase, keypad, cashDispenser); case DEPOSIT: / create new Deposit transaction temp = new Deposit(currentAccountNumber, screen, bankDatabase, keypad, depositSlot); / end switch return temp; / return the newly created object / end method createTransaction 2. 类Screen类Screen代表的是ATM的屏幕,主要实现的功能
25、就是显示给用户一些信息。我们可以使用java中标准的输出方式System.out.print()来输出信息。public class Screen / display a message without a carriage return public void displayMessage(String message) System.out.print(message); / end method displayMessage / display a message with a carriage return public void displayMessageLine(String m
26、essage) System.out.println(message); / end method displayMessageLine / displays a dollar amount public void displayDollarAmount(double amount) System.out.printf($%,.2f, amount); / end method displayDollarAmount3. 类KeypadKeypad代表的是自动取款机的键盘,负责接受用户输入的数据。我们模拟ATM,可以使用电脑的键盘来代替Keypad。我们可以使用Scanner类来获得用户输入的结果。public class Keypad private Scanner input; / reads data from the command line / no-argument constructor initializes the Scanner public Keypad() input = new Scanner(System.in); / end no-argument Keypad constructor / return an integer value entered by user public in
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1