12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- import java.util.ArrayList;
-
- public class Customer {
-
- private final String name;
- private final ArrayList<Rental> rentals = new ArrayList<>();
-
- public Customer( String name ) {
- this.name = name;
- }
-
- public void addRental( Rental arg ) {
- rentals.add( arg );
- }
-
- public String getName() {
- return name;
- }
-
- public String statement() {
- // add header
- StringBuilder result = new StringBuilder();
- result.append("Rental Record for ").append(getName()).append("\n");
-
- // add line for each rental
- for( Rental curRental : rentals ) {
- // show figures for this rental
- result.append("\t").append(curRental.getMovie().getTitle()).append("\t days rented: ").append(curRental.getDaysRented()).append(" = ").append(String.valueOf( calculateAmountFor(curRental) )).append("\n");
- }
- // add footer lines
- result.append("Amount owed is ").append(String.valueOf( getTotalAmount() )).append("\n");
- result.append("You earned ").append(String.valueOf( getFrequentRenterPoints() )).append(" frequent renter points");
- return result.toString();
- }
- public double calculateAmountFor (Rental curRental) {
- double thisAmount = 0;
- // determine amounts for each line
- switch( curRental.getMovie().getPriceCode() ) {
- case Movie.REGULAR:
- thisAmount += 2;
- if( curRental.getDaysRented() > 2 )
- thisAmount += ( curRental.getDaysRented() - 2 ) * 1.5;
- break;
- case Movie.NEW_RELEASE:
- thisAmount += curRental.getDaysRented() * 3;
- break;
- case Movie.CHILDRENS:
- thisAmount += 1.5;
- if( curRental.getDaysRented() > 3 )
- thisAmount += ( curRental.getDaysRented() - 3 ) * 1.5;
- break;
-
- }
- return thisAmount;
- }
- public int calculateFrequentRenterPointsFor (Rental curRental){
- int frequentRenterPoints = 1;
- // add bonus for a two day new release rental
- if( ( curRental.getMovie().getPriceCode() == Movie.NEW_RELEASE ) && curRental.getDaysRented() > 1 )
- frequentRenterPoints++;
- return frequentRenterPoints;
- }
-
- private int getFrequentRenterPoints() {
- int frequentRenterPoints = 0;
- for( Rental curRental : rentals ) {
- // add frequent renter points
- frequentRenterPoints += calculateFrequentRenterPointsFor(curRental);
- }
- return frequentRenterPoints;
- }
-
- private double getTotalAmount() {
- double totalAmount = 0;
- for( Rental curRental : rentals ) {
- double thisAmount = calculateAmountFor(curRental);
- totalAmount += thisAmount;
- }
- return totalAmount;
- }
-
- }
|