From af4cf65830fc8c9ee15512faa270d3d0d023ce36 Mon Sep 17 00:00:00 2001 From: Luiz Felipe Date: Tue, 25 Nov 2025 17:42:15 -0300 Subject: [PATCH 1/9] commit 1 - versao inicial --- .gitignore | 1 + src/Customer.java | 67 +++++++++++++++++++++++++++++++++++++++++++++++ src/Movie.java | 26 ++++++++++++++++++ src/Rental.java | 18 +++++++++++++ 4 files changed, 112 insertions(+) create mode 100644 .gitignore create mode 100644 src/Customer.java create mode 100644 src/Movie.java create mode 100644 src/Rental.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..9f11b755 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea/ diff --git a/src/Customer.java b/src/Customer.java new file mode 100644 index 00000000..51fac121 --- /dev/null +++ b/src/Customer.java @@ -0,0 +1,67 @@ +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() { + double totalAmount = 0; + int frequentRenterPoints = 0; + Enumeration rentals = _rentals.elements(); + String result = "Rental Record for " + getName() + "\n"; + while (rentals.hasMoreElements()) { + Rental each = (Rental) rentals.nextElement(); + double thisAmount = 0; + + // Determine amounts for each line + switch (each.getMovie().getPriceCode()) { + case Movie.REGULAR: + thisAmount += 2; + if (each.getDaysRented() > 2) + thisAmount += (each.getDaysRented() - 2) * 1.5; + break; + case Movie.NEW_RELEASE: + thisAmount += each.getDaysRented() * 3; + break; + case Movie.CHILDRENS: + thisAmount += 1.5; + if (each.getDaysRented() > 3) + thisAmount += (each.getDaysRented() - 3) * 1.5; + break; + } + + // add frequent renter points + frequentRenterPoints++; + if ((each.getMovie().getPriceCode() == Movie.NEW_RELEASE) && + each.getDaysRented() > 1) frequentRenterPoints++; + + // show figures for this rental + result += "\t" + each.getMovie().getTitle() + "\t" + + String.valueOf(thisAmount) + "\n"; + totalAmount += thisAmount; + } + + // add footer lines + result += "Amount owed is " + String.valueOf(totalAmount) + "\n"; + result += "You earned " + String.valueOf(frequentRenterPoints) + + " frequent renter points"; + return result; + } +} diff --git a/src/Movie.java b/src/Movie.java new file mode 100644 index 00000000..0532f4e7 --- /dev/null +++ b/src/Movie.java @@ -0,0 +1,26 @@ +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; + + public Movie(String title, int priceCode) { + _title = title; + _priceCode = priceCode; + } + + public int getPriceCode() { + return _priceCode; + } + + public void setPriceCode(int arg) { + _priceCode = arg; + } + + public String getTitle() { + return _title; + } +} diff --git a/src/Rental.java b/src/Rental.java new file mode 100644 index 00000000..5b222d98 --- /dev/null +++ b/src/Rental.java @@ -0,0 +1,18 @@ +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; + } +} From fa4a1accb72bae0385c209414ae14d319d2b31b2 Mon Sep 17 00:00:00 2001 From: Luiz Felipe Date: Tue, 25 Nov 2025 17:50:35 -0300 Subject: [PATCH 2/9] commit 2 - extract method --- src/Customer.java | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/Customer.java b/src/Customer.java index 51fac121..9d852dff 100644 --- a/src/Customer.java +++ b/src/Customer.java @@ -28,40 +28,40 @@ public String statement() { String result = "Rental Record for " + getName() + "\n"; while (rentals.hasMoreElements()) { Rental each = (Rental) rentals.nextElement(); - double thisAmount = 0; + double thisAmount = amountFor(each); - // Determine amounts for each line - switch (each.getMovie().getPriceCode()) { - case Movie.REGULAR: - thisAmount += 2; - if (each.getDaysRented() > 2) - thisAmount += (each.getDaysRented() - 2) * 1.5; - break; - case Movie.NEW_RELEASE: - thisAmount += each.getDaysRented() * 3; - break; - case Movie.CHILDRENS: - thisAmount += 1.5; - if (each.getDaysRented() > 3) - thisAmount += (each.getDaysRented() - 3) * 1.5; - break; - } - - // add frequent renter points frequentRenterPoints++; if ((each.getMovie().getPriceCode() == Movie.NEW_RELEASE) && each.getDaysRented() > 1) frequentRenterPoints++; - // show figures for this rental result += "\t" + each.getMovie().getTitle() + "\t" + String.valueOf(thisAmount) + "\n"; totalAmount += thisAmount; } - // add footer lines result += "Amount owed is " + String.valueOf(totalAmount) + "\n"; result += "You earned " + String.valueOf(frequentRenterPoints) + " frequent renter points"; return result; } + + private double amountFor(Rental each) { + double thisAmount = 0; + switch (each.getMovie().getPriceCode()) { + case Movie.REGULAR: + thisAmount += 2; + if (each.getDaysRented() > 2) + thisAmount += (each.getDaysRented() - 2) * 1.5; + break; + case Movie.NEW_RELEASE: + thisAmount += each.getDaysRented() * 3; + break; + case Movie.CHILDRENS: + thisAmount += 1.5; + if (each.getDaysRented() > 3) + thisAmount += (each.getDaysRented() - 3) * 1.5; + break; + } + return thisAmount; + } } From b92e6f90dd9507c4a989060e32b23a10f5619ce8 Mon Sep 17 00:00:00 2001 From: Luiz Felipe Date: Tue, 25 Nov 2025 17:54:18 -0300 Subject: [PATCH 3/9] commit 3 - rename paramenter --- src/Customer.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Customer.java b/src/Customer.java index 9d852dff..dea5515b 100644 --- a/src/Customer.java +++ b/src/Customer.java @@ -45,23 +45,24 @@ public String statement() { return result; } - private double amountFor(Rental each) { + private double amountFor(Rental aRental) { double thisAmount = 0; - switch (each.getMovie().getPriceCode()) { + switch (aRental.getMovie().getPriceCode()) { case Movie.REGULAR: thisAmount += 2; - if (each.getDaysRented() > 2) - thisAmount += (each.getDaysRented() - 2) * 1.5; + if (aRental.getDaysRented() > 2) + thisAmount += (aRental.getDaysRented() - 2) * 1.5; break; case Movie.NEW_RELEASE: - thisAmount += each.getDaysRented() * 3; + thisAmount += aRental.getDaysRented() * 3; break; case Movie.CHILDRENS: thisAmount += 1.5; - if (each.getDaysRented() > 3) - thisAmount += (each.getDaysRented() - 3) * 1.5; + if (aRental.getDaysRented() > 3) + thisAmount += (aRental.getDaysRented() - 3) * 1.5; break; } return thisAmount; } + } From e80d5d0366b6753cd17e75d5fa682df81a1386d4 Mon Sep 17 00:00:00 2001 From: Luiz Felipe Date: Tue, 25 Nov 2025 17:59:14 -0300 Subject: [PATCH 4/9] commit 4 - move and rename amountFor to getCharge in Rental --- src/Customer.java | 23 +---------------------- src/Rental.java | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/src/Customer.java b/src/Customer.java index dea5515b..03102507 100644 --- a/src/Customer.java +++ b/src/Customer.java @@ -28,7 +28,7 @@ public String statement() { String result = "Rental Record for " + getName() + "\n"; while (rentals.hasMoreElements()) { Rental each = (Rental) rentals.nextElement(); - double thisAmount = amountFor(each); + double thisAmount = each.getCharge(); frequentRenterPoints++; if ((each.getMovie().getPriceCode() == Movie.NEW_RELEASE) && @@ -44,25 +44,4 @@ public String statement() { " frequent renter points"; return result; } - - private double amountFor(Rental aRental) { - double thisAmount = 0; - switch (aRental.getMovie().getPriceCode()) { - case Movie.REGULAR: - thisAmount += 2; - if (aRental.getDaysRented() > 2) - thisAmount += (aRental.getDaysRented() - 2) * 1.5; - break; - case Movie.NEW_RELEASE: - thisAmount += aRental.getDaysRented() * 3; - break; - case Movie.CHILDRENS: - thisAmount += 1.5; - if (aRental.getDaysRented() > 3) - thisAmount += (aRental.getDaysRented() - 3) * 1.5; - break; - } - return thisAmount; - } - } diff --git a/src/Rental.java b/src/Rental.java index 5b222d98..8882905f 100644 --- a/src/Rental.java +++ b/src/Rental.java @@ -1,5 +1,4 @@ public class Rental { - private Movie _movie; private int _daysRented; @@ -15,4 +14,24 @@ public int getDaysRented() { public Movie getMovie() { return _movie; } + + public double getCharge() { + double result = 0; + switch (_movie.getPriceCode()) { + case Movie.REGULAR: + result += 2; + if (_daysRented > 2) + result += (_daysRented - 2) * 1.5; + break; + case Movie.NEW_RELEASE: + result += _daysRented * 3; + break; + case Movie.CHILDRENS: + result += 1.5; + if (_daysRented > 3) + result += (_daysRented - 3) * 1.5; + break; + } + return result; + } } From 5d5ab2485f34b03f13eb7d9628e916cddbdf6f29 Mon Sep 17 00:00:00 2001 From: Luiz Felipe Date: Tue, 25 Nov 2025 18:01:55 -0300 Subject: [PATCH 5/9] commit 5 - extract and move frequentReterPoints to Rental --- src/Customer.java | 62 ++++++++++++++--------------------------------- src/Rental.java | 8 ++++++ 2 files changed, 26 insertions(+), 44 deletions(-) diff --git a/src/Customer.java b/src/Customer.java index 03102507..3a0e6fdf 100644 --- a/src/Customer.java +++ b/src/Customer.java @@ -1,47 +1,21 @@ -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 String statement() { + double totalAmount = 0; + int frequentRenterPoints = 0; + Enumeration rentals = _rentals.elements(); + String result = "Rental Record for " + getName() + "\n"; + while (rentals.hasMoreElements()) { + Rental each = (Rental) rentals.nextElement(); + double thisAmount = each.getCharge(); + + frequentRenterPoints += each.getFrequentRenterPoints(); + + result += "\t" + each.getMovie().getTitle() + "\t" + + String.valueOf(thisAmount) + "\n"; + totalAmount += thisAmount; } - public Enumeration getRentals() { - return _rentals.elements(); - } - - public String statement() { - double totalAmount = 0; - int frequentRenterPoints = 0; - Enumeration rentals = _rentals.elements(); - String result = "Rental Record for " + getName() + "\n"; - while (rentals.hasMoreElements()) { - Rental each = (Rental) rentals.nextElement(); - double thisAmount = each.getCharge(); - - frequentRenterPoints++; - if ((each.getMovie().getPriceCode() == Movie.NEW_RELEASE) && - each.getDaysRented() > 1) frequentRenterPoints++; - - result += "\t" + each.getMovie().getTitle() + "\t" + - String.valueOf(thisAmount) + "\n"; - totalAmount += thisAmount; - } - - result += "Amount owed is " + String.valueOf(totalAmount) + "\n"; - result += "You earned " + String.valueOf(frequentRenterPoints) + - " frequent renter points"; - return result; - } + result += "Amount owed is " + String.valueOf(totalAmount) + "\n"; + result += "You earned " + String.valueOf(frequentRenterPoints) + + " frequent renter points"; + return result; } diff --git a/src/Rental.java b/src/Rental.java index 8882905f..faebca79 100644 --- a/src/Rental.java +++ b/src/Rental.java @@ -34,4 +34,12 @@ public double getCharge() { } return result; } + + public int getFrequentRenterPoints() { + if (_movie.getPriceCode() == Movie.NEW_RELEASE && _daysRented > 1) { + return 2; + } else { + return 1; + } + } } From 937ae3a3cef251b8cbdd76ea9f61c641df6289fa Mon Sep 17 00:00:00 2001 From: Luiz Felipe Date: Tue, 25 Nov 2025 18:03:34 -0300 Subject: [PATCH 6/9] commit 6 repalce temp with query for totalCharge and frequentReterPoints --- src/Customer.java | 71 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 53 insertions(+), 18 deletions(-) diff --git a/src/Customer.java b/src/Customer.java index 3a0e6fdf..5260ecf8 100644 --- a/src/Customer.java +++ b/src/Customer.java @@ -1,21 +1,56 @@ -public String statement() { - double totalAmount = 0; - int frequentRenterPoints = 0; - Enumeration rentals = _rentals.elements(); - String result = "Rental Record for " + getName() + "\n"; - while (rentals.hasMoreElements()) { - Rental each = (Rental) rentals.nextElement(); - double thisAmount = each.getCharge(); - - frequentRenterPoints += each.getFrequentRenterPoints(); - - result += "\t" + each.getMovie().getTitle() + "\t" + - String.valueOf(thisAmount) + "\n"; - totalAmount += thisAmount; +import java.util.Enumeration; + +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); } - result += "Amount owed is " + String.valueOf(totalAmount) + "\n"; - result += "You earned " + String.valueOf(frequentRenterPoints) + - " frequent renter points"; - return result; + public String getName() { + return _name; + } + + public Enumeration getRentals() { + return _rentals.elements(); + } + + public String statement() { + String result = "Rental Record for " + getName() + "\n"; + Enumeration rentals = _rentals.elements(); + while (rentals.hasMoreElements()) { + Rental each = (Rental) rentals.nextElement(); + result += "\t" + each.getMovie().getTitle() + "\t" + + String.valueOf(each.getCharge()) + "\n"; + } + result += "Amount owed is " + String.valueOf(getTotalCharge()) + "\n"; + result += "You earned " + String.valueOf(getTotalFrequentRenterPoints()) + + " frequent renter points"; + return result; + } + + 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; + } } From 47652f306dcf6db38000332376c66eb93a95c1af Mon Sep 17 00:00:00 2001 From: Luiz Felipe Date: Tue, 25 Nov 2025 18:05:26 -0300 Subject: [PATCH 7/9] commit 8 - adiciona htmlStatement em Customer --- src/Customer.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/Customer.java b/src/Customer.java index 5260ecf8..b60b2db4 100644 --- a/src/Customer.java +++ b/src/Customer.java @@ -1,4 +1,6 @@ import java.util.Enumeration; +import java.util.Vector; + public class Customer { private String _name; @@ -53,4 +55,20 @@ public int getTotalFrequentRenterPoints() { } return result; } + + public String htmlStatement() { + String result = "

Rentals for " + getName() + "

\n"; + Enumeration rentals = _rentals.elements(); + while (rentals.hasMoreElements()) { + Rental each = (Rental) rentals.nextElement(); + result += each.getMovie().getTitle() + ": " + + String.valueOf(each.getCharge()) + "
\n"; + } + result += "

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

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

"; + return result; + } + } From 635b4e0f81d032f6f24144ca645ba86a1e7c800d Mon Sep 17 00:00:00 2001 From: Luiz Felipe Date: Tue, 25 Nov 2025 18:08:08 -0300 Subject: [PATCH 8/9] Commit 7 - Refactoring 6: Replace Temp With Query e htmlStatement --- src/Movie.java | 25 ++++++++++++++++++++++--- src/Rental.java | 18 +----------------- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/Movie.java b/src/Movie.java index 0532f4e7..c96fcc67 100644 --- a/src/Movie.java +++ b/src/Movie.java @@ -1,5 +1,4 @@ public class Movie { - public static final int CHILDRENS = 2; public static final int REGULAR = 0; public static final int NEW_RELEASE = 1; @@ -12,6 +11,10 @@ public Movie(String title, int priceCode) { _priceCode = priceCode; } + public String getTitle() { + return _title; + } + public int getPriceCode() { return _priceCode; } @@ -20,7 +23,23 @@ public void setPriceCode(int arg) { _priceCode = arg; } - public String getTitle() { - return _title; + public double getCharge(int daysRented) { + double result = 0; + switch (_priceCode) { + case REGULAR: + result += 2; + if (daysRented > 2) + result += (daysRented - 2) * 1.5; + break; + case NEW_RELEASE: + result += daysRented * 3; + break; + case CHILDRENS: + result += 1.5; + if (daysRented > 3) + result += (daysRented - 3) * 1.5; + break; + } + return result; } } diff --git a/src/Rental.java b/src/Rental.java index faebca79..7ee54ffe 100644 --- a/src/Rental.java +++ b/src/Rental.java @@ -16,23 +16,7 @@ public Movie getMovie() { } public double getCharge() { - double result = 0; - switch (_movie.getPriceCode()) { - case Movie.REGULAR: - result += 2; - if (_daysRented > 2) - result += (_daysRented - 2) * 1.5; - break; - case Movie.NEW_RELEASE: - result += _daysRented * 3; - break; - case Movie.CHILDRENS: - result += 1.5; - if (_daysRented > 3) - result += (_daysRented - 3) * 1.5; - break; - } - return result; + return _movie.getCharge(_daysRented); } public int getFrequentRenterPoints() { From afb8de8fd6aeed38d56620213a7ea4f82c7e0775 Mon Sep 17 00:00:00 2001 From: Luiz Felipe Date: Tue, 25 Nov 2025 18:11:20 -0300 Subject: [PATCH 9/9] commit 8 - Refactoring 7: Replace Conditional with Polymorphism --- src/Customer.java | 2 -- src/Movie.java | 8 ++++++++ src/Rental.java | 6 +----- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Customer.java b/src/Customer.java index b60b2db4..2d938487 100644 --- a/src/Customer.java +++ b/src/Customer.java @@ -1,7 +1,6 @@ import java.util.Enumeration; import java.util.Vector; - public class Customer { private String _name; private Vector _rentals = new Vector(); @@ -70,5 +69,4 @@ public String htmlStatement() { " frequent renter points

"; return result; } - } diff --git a/src/Movie.java b/src/Movie.java index c96fcc67..0747048b 100644 --- a/src/Movie.java +++ b/src/Movie.java @@ -42,4 +42,12 @@ public double getCharge(int daysRented) { } return result; } + + public int getFrequentRenterPoints(int daysRented) { + if (_priceCode == NEW_RELEASE && daysRented > 1) { + return 2; + } else { + return 1; + } + } } diff --git a/src/Rental.java b/src/Rental.java index 7ee54ffe..3f47c368 100644 --- a/src/Rental.java +++ b/src/Rental.java @@ -20,10 +20,6 @@ public double getCharge() { } public int getFrequentRenterPoints() { - if (_movie.getPriceCode() == Movie.NEW_RELEASE && _daysRented > 1) { - return 2; - } else { - return 1; - } + return _movie.getFrequentRenterPoints(_daysRented); } }