1 import java.util.*; 2 3 public class Customer { 4 private String _name; 5 private ArrayList _rentals = new ArrayList(); 6 7 public Customer(String name) { 8 _name = name; 9 } 10 11 public void addRental(Rental arg) { 12 _rentals.add(arg); 13 } 14 15 public String getName() { 16 return _name; 17 } 18 19 public String statement() 20 { 21 double totalAmount = 0; 22 int frequentRenterPoints = 0; 23 Iterator rentals = _rentals.iterator(); 24 String result = "Rental Record for " + getName() + "\n"; 25 while (rentals.hasNext ()) { 26 double thisAmount = 0; 27 Rental rental = (Rental) rentals.next(); 28 // Add frequent renter points 28a // Computing frequent renter points is Movie/Rental business 28b // Refactor to Rental class 29 frequentRenterPoints ++; // add bonus for a two day new release rental 30 if ((rental.getMovie().getPriceCode() == Movie.NEW_RELEASE) 31 && rental.getDaysRented() > 1) 32 frequentRenterPoints ++; 33 //show figures for this rental 34 result += "\t" + rental.getMovie().getTitle()+ "\t" + 35 rental.getCharge() + // replaces getAmount() 36 "\n"; 37 totalAmount += rental.getCharge(); 38 } 39 //add footer lines 40 result += "Amount owed is " + String.valueOf(totalAmount) + "\n"; 41 42 result += "You earned " + String.valueOf(frequentRenterPoints) + 43 " frequent renter points"; 44 return result; 45 } 46 47 public static void main(String argv[]) 48 { 49 Customer harry = new Customer("Harry"); 50 Movie movie = new Movie("Gone With The Wind", Movie.REGULAR); 51 Rental rental = new Rental(movie, 3); 52 harry.addRental(rental); 53 System.out.println(harry.statement()); 54 } 55 } 56 // Output: 57 //Rental Record for Harry 58 // Gone With The Wind 3.5 59 //Amount owed is 3.5 60 //You earned 1 frequent renter points 61 62 // What about that messiness with the frequentRenter points? Can't we 63 // move that to the Rental class?