1 /**
2 An ATM that accesses a bank.
3 */
4 public class ATM
5 {
6 public static final int CHECKING = 1;
7 public static final int SAVINGS = 2;
8
9 private int state;
10 private int customerNumber;
11 private Customer currentCustomer;
12 private BankAccount currentAccount;
13 private Bank theBank;
14
15 public static final int START = 1;
16 public static final int PIN = 2;
17 public static final int ACCOUNT = 3;
18 public static final int TRANSACT = 4;
19
20 /**
21 Constructs an ATM for a given bank.
22 @param aBank the bank to which this ATM connects
23 */
24 public ATM(Bank aBank)
25 {
26 theBank = aBank;
27 reset();
28 }
29
30 /**
31 Resets the ATM to the initial state.
32 */
33 public void reset()
34 {
35 customerNumber = -1;
36 currentAccount = null;
37 state = START;
38 }
39
40 /**
41 Sets the current customer number
42 and sets state to PIN.
43 (Precondition: state is START)
44 @param number the customer number.
45 */
46 public void setCustomerNumber(int number)
47 {
48 customerNumber = number;
49 state = PIN;
50 }
51
52 /**
53 Finds customer in bank.
54 If found sets state to ACCOUNT, else to START.
55 (Precondition: state is PIN)
56 @param pin the PIN of the current customer
57 */
58 public void selectCustomer(int pin)
59 {
60 currentCustomer
61 = theBank.findCustomer(customerNumber, pin);
62 if (currentCustomer == null)
63 {
64 state = START;
65 }
66 else
67 {
68 state = ACCOUNT;
69 }
70 }
71
72 /**
73 Sets current account to checking or savings. Sets
74 state to TRANSACT.
75 (Precondition: state is ACCOUNT or TRANSACT)
76 @param account one of CHECKING or SAVINGS
77 */
78 public void selectAccount(int account)
79 {
80 if (account == CHECKING)
81 {
82 currentAccount = currentCustomer.getCheckingAccount();
83 }
84 else
85 {
86 currentAccount = currentCustomer.getSavingsAccount();
87 }
88 state = TRANSACT;
89 }
90
91 /**
92 Withdraws amount from current account.
93 (Precondition: state is TRANSACT)
94 @param value the amount to withdraw
95 */
96 public void withdraw(double value)
97 {
98 currentAccount.withdraw(value);
99 }
100
101 /**
102 Deposits amount to current account.
103 (Precondition: state is TRANSACT)
104 @param value the amount to deposit
105 */
106 public void deposit(double value)
107 {
108 currentAccount.deposit(value);
109 }
110
111 /**
112 Gets the balance of the current account.
113 (Precondition: state is TRANSACT)
114 @return the balance
115 */
116 public double getBalance()
117 {
118 return currentAccount.getBalance();
119 }
120
121 /**
122 Moves back to the previous state.
123 */
124 public void back()
125 {
126 if (state == TRANSACT)
127 {
128 state = ACCOUNT;
129 }
130 else if (state == ACCOUNT)
131 {
132 state = PIN;
133 }
134 else if (state == PIN)
135 {
136 state = START;
137 }
138 }
139
140 /**
141 Gets the current state of this ATM.
142 @return the current state
143 */
144 public int getState()
145 {
146 return state;
147 }
148 }