/**
   A cash register totals up sales and computes change due.
*/
public class CashRegister
{
   /**
    * Constructs a cash register with no money in it.
   */
   public CashRegister()
   {
      purchase = 0;
      payment = 0;
   }

   /**
      Records the sale of an item.
    
      Adds the amount of this sale to the current purchase total. 
      Only the total is remembered.
    
      @param amount the price of the item
   */
   public void recordPurchase(double amount)
   {
      double total = purchase + amount;
      purchase = total;
   }

   /**
      Enters the payment received from the customer. It does not
      modify the purchase total. 
      The amount must be equal to or greater than the current purchase
      total.

      @throws IllegalArgumentException amount is less than the purchase total
      @param amount the amount of the payment
   */
   public void enterPayment(double amount)
   {
     if ( amount - purchase < -0.005 ) {
       throw new IllegalArgumentException();
     }
      payment = amount;
   }

   /**
      Computes the change due and resets the machine for the next 
      customer.
      @return the change due to the customer

   */
   public double giveChange()
   {
     if ( payment - purchase < -0.005 ) {
       throw new IllegalStateException();
     }
      double change = payment - purchase;
      purchase = 0;
      payment = 0;
      return change;
   }

   private double purchase;
   private double payment;
}