1  import java.io.IOException;
  2  import java.sql.SQLException;
  3  import java.util.Scanner;
  4  
  5  /**
  6     A text-based simulation of an automatic teller machine
  7  */
  8  public class ATMSimulator
  9  {  
 10     public static void main(String[] args)
 11           throws IOException, SQLException, ClassNotFoundException
 12     {  
 13        if (args.length == 0)
 14        {   
 15           System.out.println(
 16                 "Usage: ATMTester propertiesFile");
 17           return;
 18        }
 19        else 
 20        {
 21           SimpleDataSource.init(args[0]);
 22        }
 23  
 24        Bank theBank = new Bank();
 25        ATM theATM = new ATM(theBank);
 26  
 27        Scanner in = new Scanner(System.in);
 28  
 29        while (true)
 30        {
 31           int state = theATM.getState();
 32           if (state == ATM.START)
 33           {
 34              System.out.print("Enter account number: ");
 35              int number = in.nextInt();
 36              theATM.setCustomerNumber(number);            
 37           }
 38           else if (state == ATM.PIN)
 39           {
 40              System.out.print("Enter PIN: ");
 41              int pin = in.nextInt();
 42              theATM.selectCustomer(pin);
 43           }
 44           else if (state == ATM.ACCOUNT)
 45           {
 46              System.out.print("A=Checking, B=Savings, C=Quit: ");
 47              String command = in.next();
 48              if (command.equalsIgnoreCase("A"))
 49              {
 50                 theATM.selectAccount(ATM.CHECKING);
 51              }
 52              else if (command.equalsIgnoreCase("B"))
 53              {
 54                 theATM.selectAccount(ATM.SAVINGS);
 55              }
 56              else if (command.equalsIgnoreCase("C"))
 57              {
 58                 theATM.reset();
 59              }
 60              else
 61              {
 62                 System.out.println("Illegal input!");                        
 63              }
 64           }
 65           else if (state == ATM.TRANSACT)
 66           {
 67              System.out.println("Balance=" + theATM.getBalance());
 68              System.out.print("A=Deposit, B=Withdrawal, C=Cancel: ");
 69              String command = in.next();
 70              if (command.equalsIgnoreCase("A"))
 71              {
 72                 System.out.print("Amount: ");
 73                 double amount = in.nextDouble();
 74                 theATM.deposit(amount);
 75                 theATM.back();
 76              }
 77              else if (command.equalsIgnoreCase("B"))
 78              {
 79                 System.out.print("Amount: ");
 80                 double amount = in.nextDouble();
 81                 theATM.withdraw(amount);
 82                 theATM.back();
 83              }
 84              else if (command.equalsIgnoreCase("C"))
 85              {
 86                 theATM.back();
 87              }
 88              else
 89              {
 90                 System.out.println("Illegal input!");                                    
 91              }
 92           }         
 93        }
 94     }
 95  }
 96