You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Customer.java 2.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import java.util.ArrayList;
  2. public class Customer {
  3. private final String name;
  4. private final ArrayList<Rental> rentals = new ArrayList<>();
  5. public Customer( String name ) {
  6. this.name = name;
  7. }
  8. public void addRental( Rental arg ) {
  9. rentals.add( arg );
  10. }
  11. public String getName() {
  12. return name;
  13. }
  14. public String statement() {
  15. // add header
  16. StringBuilder result = new StringBuilder();
  17. result.append("Rental Record for ").append(getName()).append("\n");
  18. // add line for each rental
  19. for( Rental curRental : rentals ) {
  20. // show figures for this rental
  21. result.append("\t").append(curRental.getMovie().getTitle()).append("\t days rented: ").append(curRental.getDaysRented()).append(" = ").append(String.valueOf( calculateAmountFor(curRental) )).append("\n");
  22. }
  23. // add footer lines
  24. result.append("Amount owed is ").append(String.valueOf( getTotalAmount() )).append("\n");
  25. result.append("You earned ").append(String.valueOf( getFrequentRenterPoints() )).append(" frequent renter points");
  26. return result.toString();
  27. }
  28. public double calculateAmountFor (Rental curRental) {
  29. double thisAmount = 0;
  30. // determine amounts for each line
  31. switch( curRental.getMovie().getPriceCode() ) {
  32. case Movie.REGULAR:
  33. thisAmount += 2;
  34. if( curRental.getDaysRented() > 2 )
  35. thisAmount += ( curRental.getDaysRented() - 2 ) * 1.5;
  36. break;
  37. case Movie.NEW_RELEASE:
  38. thisAmount += curRental.getDaysRented() * 3;
  39. break;
  40. case Movie.CHILDRENS:
  41. thisAmount += 1.5;
  42. if( curRental.getDaysRented() > 3 )
  43. thisAmount += ( curRental.getDaysRented() - 3 ) * 1.5;
  44. break;
  45. }
  46. return thisAmount;
  47. }
  48. public int calculateFrequentRenterPointsFor (Rental curRental){
  49. int frequentRenterPoints = 1;
  50. // add bonus for a two day new release rental
  51. if( ( curRental.getMovie().getPriceCode() == Movie.NEW_RELEASE ) && curRental.getDaysRented() > 1 )
  52. frequentRenterPoints++;
  53. return frequentRenterPoints;
  54. }
  55. private int getFrequentRenterPoints() {
  56. int frequentRenterPoints = 0;
  57. for( Rental curRental : rentals ) {
  58. // add frequent renter points
  59. frequentRenterPoints += calculateFrequentRenterPointsFor(curRental);
  60. }
  61. return frequentRenterPoints;
  62. }
  63. private double getTotalAmount() {
  64. double totalAmount = 0;
  65. for( Rental curRental : rentals ) {
  66. double thisAmount = calculateAmountFor(curRental);
  67. totalAmount += thisAmount;
  68. }
  69. return totalAmount;
  70. }
  71. }