public class Customer { public static int MaximumRentals = 10; private String name; private Rental[] rentals; private int numberRented; public Customer( String name ) { this.name = name; this.rentals = new Rental[MaximumRentals]; numberRented = 0; } public void addRental( Rental r ) { if ( numberRented >= MaximumRentals ) return; rentals[numberRented] = r; numberRented++; } public String name() { return name; } public String statement() { double totalAmount = 0.0; int frequentRenterPoints = 0; String result = "Rental Record for " + name() + "\n"; for (int i=0; i < numberRented; i++) { Rental entry = rentals[i]; double amount = priceFor( entry ); totalAmount = totalAmount + amount; frequentRenterPoints = frequentRenterPoints + pointsFor( entry ); // show figures for this rental result = result + "\t" + entry.movie().title() + "\t" + amount + "\n"; } // add footer lines result = result + "Amount owed is " + totalAmount + "\n" + "You earned " + frequentRenterPoints + " frequent renter points"; return result; } private double priceFor( Rental entry ) { double amount = 0.0; switch ( entry.movie().priceCode() ) { case Movie.REGULAR: amount = amount + 2; if ( entry.daysRented() > 2 ) amount = amount + (entry.daysRented() - 2) * 1.5; break; case Movie.NEW_RELEASE: amount = amount + entry.daysRented() * 3; break; case Movie.CHILDRENS: amount = amount + 1.5; if ( entry.daysRented() > 3 ) amount = amount + (entry.daysRented() - 3) * 1.5; break; } return amount; } private int pointsFor( Rental entry ) { int frequentRenterPoints = 1; // with a bonus for a two-day new release rental if ( entry.movie().priceCode() == Movie.NEW_RELEASE && entry.daysRented() > 1 ) frequentRenterPoints = frequentRenterPoints + 1; return frequentRenterPoints; } }