TicketMachine

/**

 * Revised version

 * 

 * TicketMachine models a naive ticket machine that issues

 * flat-fare tickets.

 * The price of a ticket is specified via the constructor.

 * It is a naive machine in the sense that it trusts its users

 * to insert enough money before trying to print a ticket.

 * It also assumes that users enter sensible amounts.

 *

 * @author David J. Barnes and Michael Kolling

 * @version 2008.03.30

 */

public class TicketMachine

{

    // The price of a ticket from this machine.

    private int price;

    // The amount of money entered by a customer so far.

    private int balance;

    // The total amount of money collected by this machine.

    private int total;

    /**

     * Create a machine that issues tickets of the given price.

     * Note that the price must be greater than zero, and there

     * are no checks to ensure this.

     */

    public TicketMachine(int ticketCost)

    {

        if (ticketCost > 0)

        {

            price = ticketCost;

        }

        else if (ticketCost == 0)

        {

            price = 5; // Default value

        }

        else

        {

            price = -1 * ticketCost;

        }

        balance = 0;

        total = 0;

    }

    /**

     * Return the price of a ticket.

     */

    public int getPrice()

    {

        return price;

    }

    /**

     * Return the amount of money already inserted for the

     * next ticket.

     */

    public int getBalance()

    {

        return balance;

    }

    /**

     * Receive an amount of money in cents from a customer.

     */

    public void insertMoney(int amount)

    {

        // Sanity-check: amount > 0

        if (amount > 0)

        {

            balance = balance + amount;

        }

    }

    /**

     * Print a ticket.

     * Update the total collected and

     * reduce the balance to zero.

     */

    public void printTicket()

    {

        if (balance >= price)

        {

            // Simulate the printing of a ticket.

            System.out.println("##################");

            System.out.println("# The BlueJ Line");

            System.out.println("# Ticket");

            System.out.println("# " + price + " cents.");

            System.out.println("##################");

            System.out.println();

            

            if (balance > price)

            {

                int change = balance - price;

                System.out.println("Your change: " + change + " cents");

                balance = price; // deduct price of ticket

            }

            // Update the total collected with the balance.

            total = total + balance;

            // Clear the balance.

            balance = 0;

        }

        else

        {

            System.out.println("Insufficient funds!");

        }

    }

}

This page was last modified on 8/25/09