diff --git a/ChildrensPrice.java b/ChildrensPrice.java new file mode 100644 index 00000000..f28c8157 --- /dev/null +++ b/ChildrensPrice.java @@ -0,0 +1,11 @@ +public class ChildrensPrice extends Price { + public int getPriceCode() { + return Movie.CHILDRENS; + } + public double getCharge(int daysRented) { + double result = 1.5; + if (daysRented > 3) + result += (daysRented - 3) * 1.5; + return result; + } +} \ No newline at end of file diff --git a/Customer.java b/Customer.java new file mode 100644 index 00000000..2bc3a496 --- /dev/null +++ b/Customer.java @@ -0,0 +1,44 @@ +import java.util.Enumeration; +import java.util.Vector; + +public class Customer { + private String _name; + private Vector _rentals = new Vector(); + + public Customer(String name) { + _name = name; + } + public void addRental(Rental arg) { + _rentals.addElement(arg); + } + public String getName() { + return _name; + } + public Enumeration getRentals() { + return _rentals.elements(); + } + public String statement() { + return new TextStatement().value(this); + } + public String htmlStatement() { + return new HtmlStatement().value(this); + } + public double getTotalCharge() { + double result = 0; + Enumeration rentals = _rentals.elements(); + while (rentals.hasMoreElements()) { + Rental each = (Rental) rentals.nextElement(); + result += each.getCharge(); + } + return result; + } + public int getTotalFrequentRenterPoints() { + int result = 0; + Enumeration rentals = _rentals.elements(); + while (rentals.hasMoreElements()) { + Rental each = (Rental) rentals.nextElement(); + result += each.getFrequentRenterPoints(); + } + return result; + } +} \ No newline at end of file diff --git a/HtmlStatement.java b/HtmlStatement.java new file mode 100644 index 00000000..24229d1f --- /dev/null +++ b/HtmlStatement.java @@ -0,0 +1,12 @@ +public class HtmlStatement extends Statement { + public String headerString(Customer aCustomer) { + return "

Rentals for " + aCustomer.getName() + "

\n"; + } + public String eachRentalString(Rental aRental) { + return aRental.getMovie().getTitle() + ": " + String.valueOf(aRental.getCharge()) + "
\n"; + } + public String footerString(Customer aCustomer) { + return "

You owe " + String.valueOf(aCustomer.getTotalCharge()) + "

\n" + + "On this rental you earned " + String.valueOf(aCustomer.getTotalFrequentRenterPoints()) + " frequent renter points

"; + } +} \ No newline at end of file diff --git a/Movie.java b/Movie.java new file mode 100644 index 00000000..a335a373 --- /dev/null +++ b/Movie.java @@ -0,0 +1,39 @@ +public class Movie { + public static final int CHILDRENS = 2; + public static final int REGULAR = 0; + public static final int NEW_RELEASE = 1; + private String _title; + private Price _price; + + public Movie(String title, int priceCode) { + _title = title; + setPriceCode(priceCode); + } + public int getPriceCode() { + return _price.getPriceCode(); + } + public void setPriceCode(int arg) { + switch (arg) { + case REGULAR: + _price = new RegularPrice(); + break; + case CHILDRENS: + _price = new ChildrensPrice(); + break; + case NEW_RELEASE: + _price = new NewReleasePrice(); + break; + default: + throw new IllegalArgumentException("Incorrect Price Code"); + } + } + public String getTitle() { + return _title; + } + public double getCharge(int daysRented) { + return _price.getCharge(daysRented); + } + public int getFrequentRenterPoints(int daysRented) { + return _price.getFrequentRenterPoints(daysRented); + } +} \ No newline at end of file diff --git a/NewReleasePrice.java b/NewReleasePrice.java new file mode 100644 index 00000000..0aee1d9c --- /dev/null +++ b/NewReleasePrice.java @@ -0,0 +1,11 @@ +public class NewReleasePrice extends Price { + public int getPriceCode() { + return Movie.NEW_RELEASE; + } + public double getCharge(int daysRented) { + return daysRented * 3; + } + public int getFrequentRenterPoints(int daysRented) { + return (daysRented > 1) ? 2 : 1; + } +} \ No newline at end of file diff --git a/Price.java b/Price.java new file mode 100644 index 00000000..f92cd0a2 --- /dev/null +++ b/Price.java @@ -0,0 +1,7 @@ +public abstract class Price { + public abstract int getPriceCode(); + public abstract double getCharge(int daysRented); + public int getFrequentRenterPoints(int daysRented) { + return 1; + } +} \ No newline at end of file diff --git a/RegularPrice.java b/RegularPrice.java new file mode 100644 index 00000000..a1b73f34 --- /dev/null +++ b/RegularPrice.java @@ -0,0 +1,11 @@ +public class RegularPrice extends Price { + public int getPriceCode() { + return Movie.REGULAR; + } + public double getCharge(int daysRented) { + double result = 2; + if (daysRented > 2) + result += (daysRented - 2) * 1.5; + return result; + } +} \ No newline at end of file diff --git a/Rental.java b/Rental.java new file mode 100644 index 00000000..0bd80253 --- /dev/null +++ b/Rental.java @@ -0,0 +1,21 @@ +public class Rental { + private Movie _movie; + private int _daysRented; + + public Rental(Movie movie, int daysRented) { + _movie = movie; + _daysRented = daysRented; + } + public int getDaysRented() { + return _daysRented; + } + public Movie getMovie() { + return _movie; + } + public double getCharge() { + return _movie.getCharge(_daysRented); + } + public int getFrequentRenterPoints() { + return _movie.getFrequentRenterPoints(_daysRented); + } +} \ No newline at end of file diff --git a/Statement.java b/Statement.java new file mode 100644 index 00000000..4ca805a2 --- /dev/null +++ b/Statement.java @@ -0,0 +1,18 @@ +import java.util.Enumeration; + +public abstract class Statement { + public abstract String headerString(Customer aCustomer); + public abstract String eachRentalString(Rental aRental); + public abstract String footerString(Customer aCustomer); + + public String value(Customer aCustomer) { + Enumeration rentals = aCustomer.getRentals(); + String result = headerString(aCustomer); + while (rentals.hasMoreElements()) { + Rental each = (Rental) rentals.nextElement(); + result += eachRentalString(each); + } + result += footerString(aCustomer); + return result; + } +} \ No newline at end of file diff --git a/TextStatement.java b/TextStatement.java new file mode 100644 index 00000000..e95e1f89 --- /dev/null +++ b/TextStatement.java @@ -0,0 +1,12 @@ +public class TextStatement extends Statement { + public String headerString(Customer aCustomer) { + return "Rental Record for " + aCustomer.getName() + "\n"; + } + public String eachRentalString(Rental aRental) { + return "\t" + aRental.getMovie().getTitle() + "\t" + String.valueOf(aRental.getCharge()) + "\n"; + } + public String footerString(Customer aCustomer) { + return "Amount owed is " + String.valueOf(aCustomer.getTotalCharge()) + "\n" + + "You earned " + String.valueOf(aCustomer.getTotalFrequentRenterPoints()) + " frequent renter points"; + } +} \ No newline at end of file