rentals = _rentals.elements();
+ String result = "Rental Record for " + getName() + "
\n";
+ while (rentals.hasMoreElements()) {
+ Rental each = (Rental) rentals.nextElement();
+ // show figures for this rental
+ result += each.getMovie().getTitle() + ": " + String.valueOf(each.getCharge()) + "
\n";
+ }
+ // add footer lines
+ result += "
Amount owed is " + String.valueOf(getTotalCharge()) + "
\n";
+ result += "You earned " + String.valueOf(getTotalFrequentRenterPoints())
+ + " frequent renter points
";
+ return result;
+ }
+
+ private double getTotalCharge() {
+ double result = 0;
+ Enumeration rentals = _rentals.elements();
+ while (rentals.hasMoreElements()) {
+ Rental each = (Rental) rentals.nextElement();
+ result += each.getCharge();
+ }
+ return result;
+ }
+
+ private 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/src/main/java/org/kranonit/rentalStore/Movie.java b/src/main/java/org/kranonit/rentalStore/Movie.java
index f866a27..02b792a 100644
--- a/src/main/java/org/kranonit/rentalStore/Movie.java
+++ b/src/main/java/org/kranonit/rentalStore/Movie.java
@@ -1,26 +1,48 @@
package org.kranonit.rentalStore;
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 int _priceCode;
+ private Price _price;
public Movie(String title, int priceCode) {
_title = title;
- _priceCode = priceCode;
+ setPriceCode(priceCode);
}
public int getPriceCode() {
- return _priceCode;
+ return _price.getPriceCode();
}
public void setPriceCode(int arg) {
- _priceCode = 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;
}
+
+ double getCharge(int daysRented) {
+ return _price.getCharge(daysRented);
+ }
+
+ int getFrequentRenterPoints(int daysRented) {
+ return _price.getFrequentRenterPoints(daysRented);
+ }
}
\ No newline at end of file
diff --git a/src/main/java/org/kranonit/rentalStore/NewReleasePrice.java b/src/main/java/org/kranonit/rentalStore/NewReleasePrice.java
new file mode 100644
index 0000000..00f65a9
--- /dev/null
+++ b/src/main/java/org/kranonit/rentalStore/NewReleasePrice.java
@@ -0,0 +1,18 @@
+package org.kranonit.rentalStore;
+
+public class NewReleasePrice extends Price {
+ @Override
+ int getPriceCode() {
+ return Movie.NEW_RELEASE;
+ }
+
+ @Override
+ double getCharge(int daysRented){
+ return daysRented * 3;
+ }
+
+ @Override
+ int getFrequentRenterPoints(int daysRented) {
+ return (daysRented > 1) ? 2: 1;
+ }
+}
diff --git a/src/main/java/org/kranonit/rentalStore/Price.java b/src/main/java/org/kranonit/rentalStore/Price.java
new file mode 100644
index 0000000..49a81e4
--- /dev/null
+++ b/src/main/java/org/kranonit/rentalStore/Price.java
@@ -0,0 +1,10 @@
+package org.kranonit.rentalStore;
+
+abstract class Price {
+ abstract int getPriceCode();
+ abstract double getCharge(int daysRented);
+
+ int getFrequentRenterPoints(int daysRented) {
+ return 1;
+ }
+}
diff --git a/src/main/java/org/kranonit/rentalStore/RegularPrice.java b/src/main/java/org/kranonit/rentalStore/RegularPrice.java
new file mode 100644
index 0000000..cf411ae
--- /dev/null
+++ b/src/main/java/org/kranonit/rentalStore/RegularPrice.java
@@ -0,0 +1,16 @@
+package org.kranonit.rentalStore;
+
+public class RegularPrice extends Price {
+ @Override
+ int getPriceCode() {
+ return Movie.REGULAR;
+ }
+
+ @Override
+ double getCharge(int daysRented){
+ double result = 2;
+ if (daysRented > 2)
+ result += (daysRented - 2) * 1.5;
+ return result;
+ }
+}
diff --git a/src/main/java/org/kranonit/rentalStore/Rental.java b/src/main/java/org/kranonit/rentalStore/Rental.java
index 0769fe7..5cee7c4 100644
--- a/src/main/java/org/kranonit/rentalStore/Rental.java
+++ b/src/main/java/org/kranonit/rentalStore/Rental.java
@@ -3,7 +3,6 @@
class Rental {
private Movie _movie;
-
private int _daysRented;
public Rental(Movie movie, int daysRented) {
@@ -11,27 +10,6 @@ public Rental(Movie movie, int daysRented) {
_daysRented = daysRented;
}
- public double getCharge() {
- double thisAmount = 0;
- // determine amounts for each line
- switch (getMovie().getPriceCode()) {
- case Movie.REGULAR:
- thisAmount += 2;
- if (getDaysRented() > 2)
- thisAmount += (getDaysRented() - 2) * 1.5;
- break;
- case Movie.NEW_RELEASE:
- thisAmount += getDaysRented() * 3;
- break;
- case Movie.CHILDRENS:
- thisAmount += 1.5;
- if (getDaysRented() > 3)
- thisAmount += (getDaysRented() - 3) * 1.5;
- break;
- }
- return thisAmount;
- }
-
public int getDaysRented() {
return _daysRented;
}
@@ -39,4 +17,12 @@ public int getDaysRented() {
public Movie getMovie() {
return _movie;
}
+
+ double getCharge() {
+ return _movie.getCharge(_daysRented);
+ }
+
+ int getFrequentRenterPoints() {
+ return _movie.getFrequentRenterPoints(_daysRented);
+ }
}
\ No newline at end of file
diff --git a/src/test/java/org/kranonit/rentalStore/CustomerTest.java b/src/test/java/org/kranonit/rentalStore/CustomerTest.java
index 3d7175b..b424b49 100644
--- a/src/test/java/org/kranonit/rentalStore/CustomerTest.java
+++ b/src/test/java/org/kranonit/rentalStore/CustomerTest.java
@@ -31,4 +31,27 @@ public void testStatement() throws Exception {
"Amount owed is 38.0\n" +
"You earned 6 frequent renter points", statementResult);
}
+
+ @Test
+ public void testHtmlStatement() throws Exception {
+ Movie m1 = new Movie("За двумя зайцами", Movie.REGULAR);
+ Movie m2 = new Movie("Всё просто", Movie.NEW_RELEASE);
+ Movie m3 = new Movie("Хоббит", Movie.CHILDRENS);
+ Movie m4 = new Movie("Альф", Movie.NEW_RELEASE);
+
+ Customer c = new Customer("stokito");
+ c.addRental(new Rental(m1, 3));
+ c.addRental(new Rental(m2, 4));
+ c.addRental(new Rental(m3, 5));
+ c.addRental(new Rental(m4, 6));
+ String statementResult = c.htmlStatement();
+ System.out.print(statementResult);
+ Assert.assertEquals("Rental Record for stokito
\n" +
+ "За двумя зайцами: 3.5
\n" +
+ "Всё просто: 12.0
\n" +
+ "Хоббит: 4.5
\n" +
+ "Альф: 18.0
\n" +
+ "
Amount owed is 38.0
\n" +
+ "You earned 6 frequent renter points
", statementResult);
+ }
}
diff --git a/src/test/java/org/kranonit/rentalStore/MovieTest.java b/src/test/java/org/kranonit/rentalStore/MovieTest.java
new file mode 100644
index 0000000..56b9ee0
--- /dev/null
+++ b/src/test/java/org/kranonit/rentalStore/MovieTest.java
@@ -0,0 +1,25 @@
+package org.kranonit.rentalStore;
+
+import junit.framework.Assert;
+import org.junit.Test;
+
+public class MovieTest {
+
+ @Test
+ public void testGetPriceCode() throws Exception {
+ Movie aMovie = new Movie("Die Hard", 2);
+ Assert.assertEquals(Movie.CHILDRENS, aMovie.getPriceCode());
+ }
+
+ @Test
+ public void testGetCharge() throws Exception {
+ Movie aMovie = new Movie("Die Hard", Movie.NEW_RELEASE);
+ Assert.assertEquals(15d, aMovie.getCharge(5));
+ }
+
+ @Test
+ public void testGetFrequentRenterPoints() throws Exception {
+ Movie aMovie = new Movie("Die Hard", Movie.REGULAR);
+ Assert.assertEquals(1, aMovie.getFrequentRenterPoints(6));
+ }
+}
diff --git a/src/test/java/org/kranonit/rentalStore/RentalTest.java b/src/test/java/org/kranonit/rentalStore/RentalTest.java
new file mode 100644
index 0000000..f215378
--- /dev/null
+++ b/src/test/java/org/kranonit/rentalStore/RentalTest.java
@@ -0,0 +1,28 @@
+package org.kranonit.rentalStore;
+
+import junit.framework.Assert;
+import org.junit.Test;
+
+public class RentalTest {
+
+ @Test
+ public void testGetDaysRented() throws Exception {
+ Movie aMovie = new Movie("Die Hard", Movie.REGULAR);
+ Rental aRental = new Rental(aMovie, 4);
+ Assert.assertEquals(4, aRental.getDaysRented());
+ }
+
+ @Test
+ public void testGetCharge() throws Exception {
+ Movie aMovie = new Movie("Life of Pi", Movie.NEW_RELEASE);
+ Rental aRental = new Rental(aMovie, 2);
+ Assert.assertEquals(6d, aRental.getCharge());
+ }
+
+ @Test
+ public void testFrequentRenterPoints() throws Exception {
+ Movie aMovie = new Movie("Panda Kung-Fu", Movie.CHILDRENS);
+ Rental aRental = new Rental(aMovie, 3);
+ Assert.assertEquals(1, aRental.getFrequentRenterPoints());
+ }
+}