📄 atm.java
字号:
/* * ATM Example system - file ATM.java * * copyright (c) 2001 - Russell C. Bjork * */ package atm;import java.net.InetAddress;import atm.physical.*;import banking.Card;import banking.Money;/** Representation for the ATM itself. An object of this class "owns" * the objects representing the component parts of the ATM, and the * communications network, and is responsible for creating customer * sessions which then use it to gain access to the component parts. * This is an active class - when an instance of the class is created, * a thread is executed that actually runs the system. */ public class ATM implements Runnable{ /** Constructor * * @param id the unique ID for this ATM * @param place the physical location of this ATM * @param bankName the name of the bank owning this ATM * @param bankAddress the Internet address of the bank */ public ATM(int id, String place, String bankName, InetAddress bankAddress) { this.id = id; this.place = place; this.bankName = bankName; this.bankAddress = bankAddress; // Create objects corresponding to component parts log = new Log(); cardReader = new CardReader(this); cashDispenser = new CashDispenser(log); customerConsole = new CustomerConsole(); envelopeAcceptor = new EnvelopeAcceptor(log); networkToBank = new NetworkToBank(log, bankAddress); operatorPanel = new OperatorPanel(this); receiptPrinter = new ReceiptPrinter(); // Set up initial conditions when ATM first created state = OFF_STATE; switchOn = false; cardInserted = false; } // Methods corresponding to major responsibilities of the ATM /** The main program/applet will create a Thread that executes * this code. */ public void run() { Session currentSession = null; while (true) { switch(state) { case OFF_STATE: customerConsole.display("Not currently available"); synchronized(this) { try { wait(); } catch(InterruptedException e) { } } if (switchOn) { performStartup(); state = IDLE_STATE; } break; case IDLE_STATE: customerConsole.display("Please insert your card"); cardInserted = false; synchronized(this) { try { wait(); } catch(InterruptedException e) { } } if (cardInserted) { currentSession = new Session(this); state = SERVING_CUSTOMER_STATE; } else if (! switchOn) { performShutdown(); state = OFF_STATE; } break; case SERVING_CUSTOMER_STATE: // The following will not return until the session has // completed currentSession.performSession(); state = IDLE_STATE; break; } } } /** Inform the ATM that the switch on the operator console has been moved * to the "on" position. */ public synchronized void switchOn() { switchOn = true; notify(); } /** Inform the ATM that the switch on the operator console has been moved * to the "off" position. */ public synchronized void switchOff() { switchOn = false; notify(); } /** Inform the ATM that a card has been inserted into the card reader. */ public synchronized void cardInserted() { cardInserted = true; notify(); } // The following methods allow objects of other classes to access component // parts of the ATM /** Accessor for id * * @return unique id of this ATM */ public int getID() { return id; } /** Accessor for place * * @return physical location of this ATM */ public String getPlace() { return place; } /** Accessor for bank name * * @return name of bank owning this ATM */ public String getBankName() { return bankName; } /** Accessor for card reader * * @return card reader component of this ATM */ public CardReader getCardReader() { return cardReader; } /** Accessor for cash dispenser * * @return cash dispenser component of this ATM */ public CashDispenser getCashDispenser() { return cashDispenser; } /** Accessor for customer console * * @return customer console component of this ATM */ public CustomerConsole getCustomerConsole() { return customerConsole; } /** Accessor for envelope acceptor * * @return envelope acceptor component of this ATM */ public EnvelopeAcceptor getEnvelopeAcceptor() { return envelopeAcceptor; } /** Accessor for log * * @return log component of this ATM */ public Log getLog() { return log; } /** Accessor for network to bank * * @return network connection to bank of this ATM */ public NetworkToBank getNetworkToBank() { return networkToBank; } /** Accessor for operator panel * * @return operator panel component of this ATM */ public OperatorPanel getOperatorPanel() { return operatorPanel; } /** Accessor for receipt printer * * @return receipt printer component of this ATM */ public ReceiptPrinter getReceiptPrinter() { return receiptPrinter; } // Private methods /** Perform the System Startup use case when switch is turned on */ private void performStartup() { Money initialCash = operatorPanel.getInitialCash(); cashDispenser.setInitialCash(initialCash); networkToBank.openConnection(); } /** Perform the System Shutdown use case when switch is turned off */ private void performShutdown() { networkToBank.closeConnection(); } // Instance variables recording information about the ATM /** Unique ID for this ATM */ private int id; /** Physical location of this ATM */ private String place; /** Name of the bank owning this ATM */ private String bankName; /** Internet address of the bank */ private InetAddress bankAddress; // Instance variables referring to the omponent parts of the ATM /** The ATM's card reader */ private CardReader cardReader; /** The ATM's cash dispenser */ private CashDispenser cashDispenser; /** The ATM's customer console */ private CustomerConsole customerConsole; /** The ATM's envelope acceptor */ private EnvelopeAcceptor envelopeAcceptor; /** The ATM's log */ private Log log; /** The ATM's network connection to the bank */ private NetworkToBank networkToBank; /** The ATM's operator panel */ private OperatorPanel operatorPanel; /** The ATM's receipt printer */ private ReceiptPrinter receiptPrinter; // State information /** The current state of the ATM - one of the possible values listed below */ private int state; /** Becomes true when the operator panel informs the ATM that the switch has * been turned on - becomes false when the operator panel informs the ATM * that the switch has been turned off. */ private boolean switchOn; /** Becomes true when the card reader informs the ATM that a card has been * inserted - the ATM will make this false when it has tried to read the * card */ private boolean cardInserted; // Possible values for state /** The ATM is off. The switch must be turned on before it can operate */ private static final int OFF_STATE = 0; /** The ATM is on, but idle. It can service a customer, or it can be shut down */ private static final int IDLE_STATE = 1; /** The ATM is servicing a customer. */ private static final int SERVING_CUSTOMER_STATE = 2;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -