session.java
来自「含有uml的多个实例及实例的java源码。」· Java 代码 · 共 163 行
JAVA
163 行
/* * ATM Example system - file Session.java * * copyright (c) 2001 - Russell C. Bjork * */ package atm;import banking.Card;import banking.Status;import banking.Receipt;import atm.physical.CustomerConsole;import atm.transaction.Transaction;/** Representation for one ATM session serving a single customer. */public class Session{ /** Constructor * * @param atm the ATM on which the session is performed */ public Session(ATM atm) { this.atm = atm; state = READING_CARD_STATE; } /** Perform the Session Use Case */ public void performSession() { Card card = null; Transaction currentTransaction = null; while (state != FINAL_STATE) { switch(state) { case READING_CARD_STATE: card = atm.getCardReader().readCard(); if (card != null) state = READING_PIN_STATE; else { atm.getCustomerConsole().display("Unable to read card"); state = EJECTING_CARD_STATE; } break; case READING_PIN_STATE: try { pin = atm.getCustomerConsole().readPIN( "Please enter your PIN\n" + "Then press ENTER"); state = CHOOSING_TRANSACTION_STATE; } catch(CustomerConsole.Cancelled e) { state = EJECTING_CARD_STATE; } break; case CHOOSING_TRANSACTION_STATE: try { currentTransaction = Transaction.makeTransaction(atm, this, card, pin); state = PERFORMING_TRANSACTION_STATE; } catch(CustomerConsole.Cancelled e) { state = EJECTING_CARD_STATE; } break; case PERFORMING_TRANSACTION_STATE: try { boolean doAgain = currentTransaction.performTransaction(); if (doAgain) state = CHOOSING_TRANSACTION_STATE; else state = EJECTING_CARD_STATE; } catch(Transaction.CardRetained e) { state = FINAL_STATE; } break; case EJECTING_CARD_STATE: atm.getCardReader().ejectCard(); state = FINAL_STATE; break; } } } /** Change the pin recorded for the customer (if invalid pin extension * was performed by a transaction * * @param pin the newly entered pin */ public void setPIN(int pin) { this.pin = pin; } // Instance variables /** The ATM on which the session is performed */ private ATM atm; /** The PIN entered (or re-entered) by the customer */ private int pin; /** The current state of the session */ private int state; // Possible values for state /** Reading the customer's card */ private static final int READING_CARD_STATE = 1; /** Asking the customer to enter a PIN */ private static final int READING_PIN_STATE = 2; /** Asking the customer to choose a transaction type */ private static final int CHOOSING_TRANSACTION_STATE = 3; /** Peforming a transaction */ private static final int PERFORMING_TRANSACTION_STATE = 4; /** Ejecting the customer's card */ private static final int EJECTING_CARD_STATE = 5; /** Session finished */ private static final int FINAL_STATE = 6; }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?