Rabu, 31 Mei 2017

UAS PBO

Aplikasi Cetak Struk PLN Prabayar


 import javax.swing.Icon;  
 import javax.swing.ImageIcon;  
 import javax.swing.SwingConstants;  
 import java.awt.Graphics;  
 import java.awt.image.BufferedImage;  
 import java.io.File;  
 import java.io.IOException;  
 import java.util.logging.Level;  
 import java.util.logging.Logger;  
 import javax.imageio.ImageIO;  
 import javax.swing.JPanel;  
 import java.awt.GridLayout;  
 import javax.swing.JComboBox;  
 import javax.swing.JFrame;  
 import javax.swing.JPanel;  
 import javax.swing.JTextField;  
 import java.awt.FlowLayout;  
 import java.awt.event.ActionEvent;  
 import java.awt.event.ActionListener;  
 import javax.swing.JButton;  
 import javax.swing.JTextField;  
 import javax.swing.JLabel;  
 import java.awt.*;  
 import javax.swing.*;  
 import java.awt.Color;  
 import java.awt.event.ActionEvent;  
 import java.awt.event.ActionListener;  
 import javax.sound.sampled.AudioInputStream;  
 import javax.sound.sampled.AudioSystem;  
 import javax.sound.sampled.Clip;  
 import javax.sound.sampled.LineUnavailableException;  
 import javax.sound.sampled.UnsupportedAudioFileException;  
 import javax.swing.*;  
 import java.io.*;  
 import java.net.MalformedURLException;  
 import java.net.URL;  
 import java.util.logging.Level;  
 import java.util.logging.Logger;  
 import java.awt.*;  
 import java.awt.event.*;  
 public class pln extends Frame {  
   private JLabel pie;  
   private JLabel x;   
   public pln(String title) {  
       super(title);  
       // JLabel lbltitle = new JLabel("STRUK TOKEN");  
       // lbl8.setFont(new Font(lbl8.getFont().getName(), lbl8.getFont().getStyle(), 20));  
      // String s[]={"5115100139",  
      // "5115100138",  
      // "5115100141",  
      // "5115100140"};  
       JTextField textField1 = new JTextField(20);  
       Font medFont = textField1.getFont().deriveFont(Font.PLAIN, 20f);  
       textField1.setFont(medFont);  
       JLabel lbl1 = new JLabel("ID PELANGGAN  ");  
       lbl1.setFont(new Font(lbl1.getFont().getName(), lbl1.getFont().getStyle(), 20));  
        JPanel firstPanel = new JPanel();  
       firstPanel.setBackground(Color.yellow);  
       firstPanel.add(lbl1);  
       firstPanel.setLayout(new FlowLayout());  
       firstPanel.add(textField1);  
       JTextField textField2 = new JTextField(20);  
       Font medFont2 = textField2.getFont().deriveFont(Font.PLAIN, 20f);  
       textField2.setFont(medFont2);  
       JLabel lbl2 = new JLabel("NAMA          ");  
       lbl2.setFont(new Font(lbl2.getFont().getName(), lbl2.getFont().getStyle(), 20));  
       JPanel thirdPanel = new JPanel();  
       thirdPanel.setBackground(Color.yellow);  
       thirdPanel.add(lbl2);  
       thirdPanel.setLayout(new FlowLayout());  
       thirdPanel.add(textField2);  
       JComboBox comboBox1 = new JComboBox(new Object[]{"20.000                     ",   
         "30.000", "50.000", "75.000", "100.000","125.000","150.000"});  
       JLabel lbl3 = new JLabel("STATUS(PLN)    ");  
       lbl3.setFont(new Font(lbl3.getFont().getName(), lbl2.getFont().getStyle(), 20));  
       JLabel lbl4 = new JLabel("                     ");  
       JPanel fourthPanel = new JPanel();  
       fourthPanel.setBackground(Color.yellow);  
       fourthPanel.add(lbl3);  
       fourthPanel.add(comboBox1);  
       fourthPanel.add(lbl4);        
       JComboBox comboBox2 = new JComboBox(new Object[]{"R-1/450","R-1/900","R-1/1300","R-1/2200","B-1/450","B-1/900","B-1/1300                   ",   
         "B-1/2200", "S-1/450", "S-1/900", "S-1/1300","S-1/2200","I-1/450","I-1/900","I-1/1300","I-1/2200"});  
       JLabel lbl5 = new JLabel("TARIF/DAYA     ");  
       lbl5.setFont(new Font(lbl5.getFont().getName(), lbl5.getFont().getStyle(), 20));  
       JLabel lbl6 = new JLabel("                     ");  
       JPanel fifthPanel = new JPanel();  
       fifthPanel.setBackground(Color.yellow);  
       fifthPanel.add(lbl5);  
       fifthPanel.add(comboBox2);  
       fifthPanel.add(lbl6);  
       JTextField textField3 = new JTextField(20);  
       Font medFont3 = textField3.getFont().deriveFont(Font.PLAIN, 20f);  
       textField3.setFont(medFont2);  
       JLabel lbl7 = new JLabel("TOKEN         ");  
       lbl7.setFont(new Font(lbl7.getFont().getName(), lbl7.getFont().getStyle(), 20));  
       JPanel secPanel = new JPanel();  
       secPanel.setBackground(Color.yellow);secPanel.add(lbl7);  
       secPanel.setLayout(new FlowLayout());  
       secPanel.add(textField3);  
       String input3 = textField3.getText();  
       JTextField textField4 = new JTextField(20);  
       Font medFont4 = textField4.getFont().deriveFont(Font.PLAIN, 20f);  
       textField4.setFont(medFont4);  
       JLabel lbl8 = new JLabel("HARGA JUAL    ");  
       lbl8.setFont(new Font(lbl8.getFont().getName(), lbl8.getFont().getStyle(), 20));  
       JPanel sixPanel = new JPanel();  
       sixPanel.setBackground(Color.yellow);sixPanel.add(lbl8);  
       sixPanel.setLayout(new FlowLayout());  
       sixPanel.add(textField4);  
       String input4 = textField4.getText();  
       JButton print = new JButton("PRINT");  
       JButton clear = new JButton("CLEAR");  
       JButton exit = new JButton("EXIT");  
       JPanel sevPanel = new JPanel();  
       //sevPanel.setLayout(null);  
       print.setSize(50,30);  
       clear.setSize(40,30);  
       exit.setSize(40,30);  
       sevPanel.setBackground(Color.yellow);sevPanel.add(print);  
       sevPanel.add(clear);  
       sevPanel.add(exit);  
       sevPanel.setSize(50,60);  
       print.addActionListener(new ActionListener() {         
         public void actionPerformed(ActionEvent e) {   
           // int mark=0;  
           String input1 = textField1.getText();  
           String input2 = textField2.getText();  
           String input3 = textField3.getText();  
           String input4 = textField4.getText();  
       String inputcom1 = (String) comboBox1.getSelectedItem();  
       String inputcom2 = (String) comboBox2.getSelectedItem();  
           JOptionPane.showMessageDialog(null,""+input1+"\n"+input2+"\n"+inputcom1+"\n"+input3+"\n"+input4+"",  
           "STRUK TRANSAKSI",JOptionPane.PLAIN_MESSAGE);  
         }  
     }  
       );  
       clear.addActionListener(new ActionListener(){  
         public void actionPerformed(ActionEvent e){  
           textField1.setText("");  
           textField2.setText("");  
           textField3.setText("");  
           textField4.setText("");  
         }  
       }  
       );  
       exit.addActionListener(new ActionListener() {  
         public void actionPerformed(ActionEvent e) {  
         System.exit(0);  
         }  
       }  
      );  
       Icon pie = new ImageIcon("D:/OutputFF/pln.png");  
       x = new JLabel(pie,SwingConstants.LEFT);  
       JFrame frame = new JFrame();  
       frame.getContentPane().setBackground(Color.yellow);  
       frame.setBackground(Color.yellow);  
       frame.setLayout(new FlowLayout());  
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
       frame.add(x);  
       frame.add(firstPanel);  
       frame.add(thirdPanel);  
       frame.add(fourthPanel);  
       frame.add(fifthPanel);  
       frame.add(secPanel);  
       frame.add(sixPanel);  
       frame.add(sevPanel);  
       frame.pack();  
       frame.setSize(600,600);  
       frame.setLocation(150, 150);  
       frame.setVisible(true);  
       frame.setResizable(false);    
   }  
 //  public static void main(String[] args) {  
  //     pln frame = new pln("TRANSAKSI PLN");   
   //  }  
 }  

Output:

Senin, 08 Mei 2017

OOP Dalam ATM


Class ATM
 public class ATM  
 {  
   private boolean userAuthenticated; // whether user is authenticated  
   private int currentAccountNumber;  // current user's account number  
   private Screen screen; // ATM's screen  
   private Keypad keypad; // ATM's keypad  
   private CashDispenser cashDispenser;  // ATM's cash dispenser  
   private DepositSlot depositSlot;    // ATM's deposit slot  
   private BankDatabase 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;  
   // no-argument ATM constructor initializes instance variables  
   public ATM(){  
     userAuthenticated = false; // 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  
     bankDatabase = new BankDatabase();   // create account info database  
   }  // end no argument ATM constructor  
   // start ATM  
   public void run(){  
     // welcome and authenticate user; perform transactions  
     while(true){  
       // loop while user is not yet authenticated  
       while(!userAuthenticated){  
         screen.displayMessageLine("\nWelcome!");  
         authenticateUser();   // authenticate user  
       }  // end while  
       performTransactions();   // user is now authenticated  
       userAuthenticated = false; // reset before next ATM session  
       currentAccountNumber = 0;  // reset before next ATM session  
       screen.displayMessageLine("\nThank You!\nGoodbye!");  
     }  // end while  
   }  // end method run  
   // attempts to authenticate user against database  
   private void authenticateUser(){  
     screen.displayMessage("\nPlease enter your account number : ");  
     int accountNumber = keypad.getInput(); // input account number  
     screen.displayMessage("\nEnter your PIN : ");  // 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;  // save user's account  
     }  // end if  
     else{  
       screen.displayMessageLine("Invalid Account Number or PIN.");  
       screen.displayMessageLine("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 = null;  
     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 user's menu selection  
       switch(mainMenuSelection){  
         // user choose to perform one of three transaction types  
         case BALANCE_INQUIRY :  
         case WITHDRAWAL :  
         case DEPOSIT :  
           // initialize as new object choosen type  
           currentTransaction = createTransaction(mainMenuSelection);  
           currentTransaction.execute();  // execute transaction  
           break;  
         case EXIT :  
         // user choose to terminate session  
           screen.displayMessageLine("\nExiting the system...");  
           userExited = true;   // this ATM session should end  
           break;  
         default :  
         // user did not enter an integer between 1-4  
           screen.displayMessageLine("\nYou did not enter a valid selection.");  
           screen.displayMessageLine("Please try again.");  
           break;  
       }  // end switch  
     }  // end while  
   }  // end method performTransactions  
   // display the main menu and return an input selection  
   private int displayMainMenu(){  
     screen.displayMessageLine("\nMain Menu :");  
     screen.displayMessageLine("1 - View my balance");  
     screen.displayMessageLine("2 - Withdraw cash");  
     screen.displayMessageLine("3 - Deposit funds");  
     screen.displayMessageLine("4 - Exit\n");  
     screen.displayMessage("Enter a choice : ");  
     return keypad.getInput();  // return user's selection  
   }  // end method of displayMainMenu  
   // return object of specified Transaction subclass  
   private Transaction createTransaction(int type){  
     Transaction temp = null;    // temporary Transaction variable  
     // determine which type of Transaction to create  
     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, screen, bankDatabase, keypad, cashDispenser);  
         break;  
       case DEPOSIT :  
       // create new Deposit transaction  
         temp = new Deposit(currentAccountNumber, screen, bankDatabase, keypad, depositSlot);  
         break;  
     }  // end switch  
     return temp;  // return newly created object  
   }  // end method createTransaction  
 }  // end class ATM  

Class Deposit
 public class DepositSlot  
 {  
   // indicate whether envelope was received (always returns true)  
   // because this is only a software simulation of a real deposit slot  
   public boolean isEnvelopeReceived(){  
     return true;  // deposit envelope was received  
   }  // end method isEnvelopeReceived  
 }  // end class DepositSlot  

Class Screen
 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 message){  
     System.out.println(message);  
   }  // end method displayMessageLine  
   // displays a dollar amount  
   public void displayDollarAmount(double amount){  
     System.out.printf("$%,.2f", amount);  
   }  // end method displayDollarAmount  
 }  // end class Screen  

Class Keypad
 import java.util.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 int getInput(){  
     return input.nextInt();   // we assume that user enters an integer  
   }  // end method getInput  
} //end class keypad


Class CashDispenser
  1. public class CashDispenser
  2. {
  3.     // the default initial number of bills in the cash dispenser
  4.     private final static int INITIAL_COUNT = 500;
  5.     private int count;      // number of $20 bills remaining
  6.    
  7.     // no-argument CashDispenser constructor initializes count to default
  8.     public CashDispenser(){
  9.         count = INITIAL_COUNT;  // set count attribute to default
  10.     }   // end CashDispenser constructor
  11.    
  12.     // simulates dispensing of specified amount of cash
  13.     public void dispenseCash(int amount){
  14.         int billsRequired = amount / 20;    // number of $20 bills required
  15.         count -= billsRequired;     // update the count of bills
  16.     }   // end method dispenseCash
  17.    
  18.     // indicates whether cash dispenser can dispense desired amount
  19.     public boolean isSufficientCashAvailable(int amount){
  20.         int billsRequired = amount / 20;
  21.        
  22.         if(count >= billsRequired){
  23.             return true;    // enough bills required
  24.         }
  25.         else{
  26.             return false;   // not enough bills required
  27.         }
  28.     }   // end method isSufficientCashAvailable
  29. }   // end class CashDispenser

Class Transaction
  1. public abstract class Transaction
  2. {
  3.     private int accountNumber;      // indicates account involved
  4.     private Screen screen;          // ATM's screen
  5.     private BankDatabase bankDatabase;  // account info database
  6.    
  7.     // Transaction constructor invoked by subclasses using super()
  8.     public Transaction(int userAccountNumber, Screen atmScreen, BankDatabase atmBankDatabase){
  9.         accountNumber = userAccountNumber;
  10.         screen = atmScreen;
  11.         bankDatabase = atmBankDatabase;
  12.     }   // end Transaction constructor
  13.    
  14.     // return account number
  15.     public int getAccountNumber(){
  16.         return accountNumber;
  17.     }   // end method
  18.    
  19.     // return reference to screen
  20.     public Screen getScreen(){
  21.         return screen;
  22.     }   // end method
  23.    
  24.     // return reference to bank database
  25.     public BankDatabase getBankDatabase(){
  26.         return bankDatabase;
  27.     }   // end method
  28.    
  29.     // perform the transaction (overridden by each subclass)
  30.     abstract public void execute();
  31. }   // end class Transaction

Withdrawal Class
  1. public class Withdrawal extends Transaction
  2. {
  3.     private int amount;     // amount to withdraw
  4.     private Keypad keypad;  // references to keypad
  5.     private CashDispenser cashDispenser;    // references to cash dispenser
  6.    
  7.     // constant corresponding to menu option to cancel
  8.     private final static int CANCELED = 6;
  9.    
  10.     // Withdrawal constructor
  11.     public Withdrawal(int userAccountNumber, Screen atmScreen, BankDatabase atmBankDatabase, Keypad atmKeypad, CashDispenser atmCashDispenser){
  12.         // initializes superclass variables
  13.         super(userAccountNumber, atmScreen, atmBankDatabase);
  14.        
  15.         // initializes references to keypad and cash dispenser
  16.         keypad = atmKeypad;
  17.         cashDispenser = atmCashDispenser;
  18.     }   // end Withdrawal constructor
  19.    
  20.     // perform transaction
  21.     @Override
  22.     public void execute(){
  23.         boolean cashDispensed = false;  // cash was not dispensed yet
  24.         double availableBalance;        // amount available for withdrawal
  25.        
  26.         // get references to bank database and screen
  27.         BankDatabase bankDatabase = getBankDatabase();
  28.         Screen screen = getScreen();
  29.        
  30.         // loop until cash is dispensed or the user cancels
  31.         do{
  32.             // obtain a chosen withdrawal amount from the user
  33.             amount = displayMenuOfAmounts();
  34.            
  35.             // check whether user choose a withdrawal amount or canceled
  36.             if(amount != CANCELED){
  37.                 // get available balance of account involved
  38.                 availableBalance = bankDatabase.getAvailableBalance(getAccountNumber());
  39.                
  40.                 // check whether the user has enough money in the account
  41.                 if(amount <= availableBalance){
  42.                    
  43.                     // check whether the cash dispenser has enough money
  44.                     if(cashDispenser.isSufficientCashAvailable(amount)){
  45.                        
  46.                         // update the account involved to reflect the withdrawal
  47.                         bankDatabase.debit(getAccountNumber(), amount);
  48.                        
  49.                         cashDispenser.dispenseCash(amount);     // dispense cash
  50.                         cashDispensed = true;   // cash was dispensed
  51.                        
  52.                         // instructs user to take cash
  53.                         screen.displayMessageLine("\nYour cash has been dispensed. Please take your cash now.");
  54.                     }   // end if
  55.                     else{
  56.                         // cash dispenser does not have enough cash
  57.                         screen.displayMessageLine("\nInsufficient cash available in the ATM.");
  58.                         screen.displayMessageLine("\nPlease choose a smaller amount.");
  59.                     }   // end if
  60.                 }   // end if
  61.                 else{
  62.                     // not enough money available in user's account
  63.                     screen.displayMessageLine("\nInsufficient funds in your account.");
  64.                     screen.displayMessageLine("\nPlease choose a smaller amount.");
  65.                 }   // end if
  66.             }   // end if
  67.             else{
  68.                 // user choose cancel menu option
  69.                 screen.displayMessageLine("\nCancelling transactions...");
  70.                 return;     // return to main menu because user canceled
  71.             }   // end if
  72.         }   while(!cashDispensed);
  73.     }   // end method execute
  74.    
  75.     // display a menu of withdrawal amounts and the options to cancel
  76.     // return the chosen amount or 0 if the user chooses to cancel
  77.     private int displayMenuOfAmounts(){
  78.         int userChoice = 0;     // local variable to store return value
  79.        
  80.         Screen screen = getScreen();    // get screen references
  81.        
  82.         // array of amounts to correspond to menu numbers
  83.         int[] amounts = {0, 20, 40, 60, 100, 200};
  84.        
  85.         // loop while no valid choice has been made
  86.         while(userChoice == 0){
  87.             // display the withdrawal menu
  88.             screen.displayMessageLine("\nWithdrawal Menu : ");
  89.             screen.displayMessageLine("1 - $20");
  90.             screen.displayMessageLine("2 - $40");
  91.             screen.displayMessageLine("3 - $60");
  92.             screen.displayMessageLine("4 - $100");
  93.             screen.displayMessageLine("5 - $200");
  94.             screen.displayMessageLine("6 - Cancel Transaction");
  95.             screen.displayMessage("\nChoose a withdrawal amount : ");
  96.            
  97.             int input = keypad.getInput();      // get user input through keypad
  98.            
  99.             // determine how to proceed based on the input value
  100.             switch(input){
  101.                 // if the user choose a withdrawal amount
  102.                 // i.e choose option 1, 2, 3, 4 or 5
  103.                 // return the corresponding amount from amounts's array
  104.                 case 1 :
  105.                 case 2 :
  106.                 case 3 :
  107.                 case 4 :
  108.                 case 5 :
  109.                     userChoice = amounts[input];        // save user's choice
  110.                     break;
  111.                
  112.                 case CANCELED :
  113.                     // the user choose to cancel
  114.                     userChoice = CANCELED;      // save user's choice
  115.                     break;
  116.                
  117.                 default :
  118.                     // the user did not enter value between 1-6
  119.                     screen.displayMessageLine("\nInvalid selection.");
  120.                     screen.displayMessageLine("Try again.");
  121.             }   // end switch
  122.         }   // end while
  123.        
  124.         return userChoice;      // return withdrawal amount or CANCELED
  125.     }   // end method displayMenuOfAmounts
  126. }   // end class Withdrawal

Deposit Class
  1. public class Deposit extends Transaction
  2. {
  3.     private double amount;      // amount to deposit
  4.     private Keypad keypad;      // references to keypad
  5.     private DepositSlot depositSlot;    // references to deposit slot
  6.     private final static int CANCELED = 0;  // constant for cancel option
  7.    
  8.     // Deposit constructor
  9.     public Deposit(int userAccountNumber, Screen atmScreen, BankDatabase atmBankDatabase, Keypad atmKeypad, DepositSlot atmDepositSlot){
  10.         // initializes superclass variables
  11.         super(userAccountNumber, atmScreen, atmBankDatabase);
  12.        
  13.         // initialize references to keypad and deposit slot
  14.         keypad = atmKeypad;
  15.         depositSlot = atmDepositSlot;
  16.     }   // end Deposit constructor
  17.    
  18.     // perform transaction
  19.     @Override
  20.     public void execute(){
  21.         BankDatabase bankDatabase = getBankDatabase();      // get reference
  22.         Screen screen = getScreen();        // get reference
  23.        
  24.         amount = promptForDepositAmount();  // get deposit amount from user
  25.        
  26.         // check whether the user entered a deposit amount or canceled
  27.         if(amount != CANCELED){
  28.             // request deposit envelope containing specified amount
  29.             screen.displayMessage("\nPlease insert a deposit envelope containing ");
  30.             screen.displayDollarAmount(amount);
  31.             screen.displayMessage(".");
  32.            
  33.             // receive deposit envelope
  34.             boolean envelopeReceived = depositSlot.isEnvelopeReceived();
  35.            
  36.             // check whether deposit envelope was received
  37.             if(envelopeReceived){
  38.                 screen.displayMessageLine("\nYour envelope has been received.");
  39.                 screen.displayMessage("NOTE: The money just deposited will not be available until we verify the amount");
  40.                 screen.displayMessage("of any enclosed cash and your checks clear.");
  41.                
  42.                 // credit account to reflect the deposit
  43.                 bankDatabase.credit(getAccountNumber(), amount);
  44.             }   // end if
  45.             else{
  46.                 // deposit envelope not received
  47.                 screen.displayMessageLine("\nYou did not insert an envelope");
  48.                 screen.displayMessageLine("So, the ATM has canceled your transaction.");
  49.             }   // end else
  50.         }   // end if
  51.         else{
  52.             // user canceled instead of entering amount
  53.             screen.displayMessageLine("\nCanceling transaction...");
  54.         }   // end else
  55.     }   // end method execute
  56.    
  57.     // prompt user to enter a deposit amount in cents
  58.     private double promptForDepositAmount(){
  59.         Screen screen = getScreen();    // get references to screen
  60.        
  61.         // display the prompt
  62.         screen.displayMessage("\nPlease enter a deposit amount in CENTS (or 0 to cancel)");
  63.         int input = keypad.getInput();  // receive input of deposit amount
  64.        
  65.         // check whether the user canceled or entered a valid amount
  66.         if(input == CANCELED) return CANCELED;
  67.         else{
  68.             return (double) input / 100;        // return dollar amount
  69.         }   // end else
  70.     }   // end method
  71. }   // end class Deposit

BalanceInquery Class
  1. public class BalanceInquiry extends Transaction
  2. {
  3.     // BalanceInquiry constructor
  4.     public BalanceInquiry(int userAccountNumber, Screen atmScreen, BankDatabase atmBankDatabase){
  5.         super(userAccountNumber, atmScreen, atmBankDatabase);
  6.     }   // end BalanceInquiry constructor
  7.    
  8.     // performs the transaction
  9.     @Override
  10.     public void execute(){
  11.         // get references to bank database and screen
  12.         BankDatabase bankDatabase = getBankDatabase();
  13.         Screen screen = getScreen();
  14.        
  15.         // get the available balance for the account involved
  16.         double availableBalance = bankDatabase.getAvailableBalance(getAccountNumber());
  17.        
  18.         // get the total balance for the account involved
  19.         double totalBalance = bankDatabase.getTotalBalance(getAccountNumber());
  20.        
  21.         // display the balance information on the screen
  22.         screen.displayMessageLine("\nBalance Information : ");
  23.         screen.displayMessage(" - Available Balance : ");
  24.         screen.displayDollarAmount(availableBalance);
  25.         screen.displayMessage("\n - Total Balance : ");
  26.         screen.displayDollarAmount(totalBalance);
  27.         screen.displayMessageLine("");
  28.     }   // end method execute
  29. }   // end class BalanceInquiry

Bankdatabase Class
  1. public class BankDatabase
  2. {
  3.     private Account[] accounts;     // array of Accounts
  4.    
  5.     // no-argument BankDatabase constructor initializes accounts
  6.     public BankDatabase(){
  7.         accounts = new Account[2];      // just 2 accounts for testing
  8.         accounts[0] = new Account(12345, 54321, 1000.0, 1200.0);
  9.         accounts[1] = new Account(98765, 56789, 200.0, 200.0);
  10.     }   // end no-argument BankDatabase constructor
  11.    
  12.     // retrieve Account object containing specified account number
  13.     private Account getAccount(int accountNumber){
  14.         // loop through accounts searching for matching account number
  15.         for(Account currentAccount : accounts){
  16.             // return current account if match found
  17.             if(currentAccount.getAccountNumber() == accountNumber) return currentAccount;
  18.         }   // end for
  19.        
  20.         return null;    // if no matching account was found, return null
  21.     }   // end method
  22.    
  23.     // determine whether user-specified account number and PIN match
  24.     // those of an account in the database
  25.     public boolean authenticateUser(int userAccountNumber, int userPIN){
  26.         // attempt to retrieve the account with the account number
  27.         Account userAccount = getAccount(userAccountNumber);
  28.        
  29.         if(userAccount != null){
  30.             return userAccount.validatePIN(userPIN);
  31.         }
  32.         else{
  33.             return false;   // account number not found, so return false
  34.         }  
  35.     }   // end method
  36.    
  37.     // return available balance of Account with specified account number
  38.     public double getAvailableBalance(int userAccountNumber){
  39.         return getAccount(userAccountNumber).getAvailableBalance();
  40.     }   // end method
  41.    
  42.     public double getTotalBalance(int userAccountNumber){
  43.         return getAccount(userAccountNumber).getTotalBalance();
  44.     }   // end method
  45.    
  46.     public void credit(int userAccountNumber, double amount){
  47.         getAccount(userAccountNumber).credit(amount);
  48.     }   // end method
  49.    
  50.     public void debit(int userAccountNumber, double amount){
  51.         getAccount(userAccountNumber).debit(amount);
  52.     }   // end method
  53. }   // end class BankData

Account Class
  1. public class Account
  2. {
  3.     private int accountNumber;      // account number
  4.     private int pin;        // PIN for authentication
  5.     private double availableBalance;    // funds available for withdrawal
  6.     private double totalBalance;        // funds available + pending deposits
  7.    
  8.     // Account constructor initializes attributes
  9.     public Account(int theAccountNumber, int thePIN, double theAvailableBalance, double theTotalBalance){
  10.         accountNumber = theAccountNumber;
  11.         pin = thePIN;
  12.         availableBalance = theAvailableBalance;
  13.         totalBalance = theTotalBalance;
  14.     }   // end Account constructor
  15.    
  16.     // determines whether a user-specified PIN matches PIN in Account
  17.     public boolean validatePIN(int userPIN){
  18.         if(userPIN == pin){
  19.             return true;    // means the PIN input is match with the user's PIN
  20.         }
  21.         else{
  22.             return false;   // means the PIN input is not match with the user's PIN
  23.         }
  24.     }   // end method validatePIN
  25.    
  26.     // returns available balance
  27.     public double getAvailableBalance(){
  28.         return availableBalance;
  29.     }
  30.    
  31.     // returns the total balance
  32.     public double getTotalBalance(){
  33.         return totalBalance;
  34.     }
  35.    
  36.     // credits an amount to the account
  37.     public void credit(double amount){
  38.         totalBalance += amount;     // add to total balance
  39.     }
  40.    
  41.     // debits an amount from the account
  42.     public void debit(double amount){
  43.         availableBalance -= amount;     // substract from available balance
  44.         totalBalance -= amount;         // substract from total balance
  45.     }
  46.    
  47.     // returns account number
  48.     public int getAccountNumber(){
  49.         return accountNumber;
  50.     }
  51. }   // end class Account

ATM Case Study


    1. public class ATMCaseStudy
    2. {
    3.     // main method creates and runs the ATM
    4.     public static void main(String[] args){
    5.         ATM theATM = new ATM();
    6.         theATM.run();
    7.     }   // end main
    8. }   // end class ATMCaseStudy

    OUTPUT: