summaryrefslogtreecommitdiff
path: root/src/main/java/ca/mokhan/assignment1/EmployeeSavings.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/ca/mokhan/assignment1/EmployeeSavings.java')
-rw-r--r--src/main/java/ca/mokhan/assignment1/EmployeeSavings.java84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/main/java/ca/mokhan/assignment1/EmployeeSavings.java b/src/main/java/ca/mokhan/assignment1/EmployeeSavings.java
new file mode 100644
index 0000000..44eac10
--- /dev/null
+++ b/src/main/java/ca/mokhan/assignment1/EmployeeSavings.java
@@ -0,0 +1,84 @@
+package ca.mokhan.assignment1;
+
+import java.util.ArrayList;
+import java.util.Currency;
+import java.util.Locale;
+import java.util.Random;
+
+public class EmployeeSavings extends AddressBook {
+ private double accountValue;
+ private double[] monthlyInterests;
+ private double[] monthlySavings;
+ private double monthlyContribution;
+ public static final double ANNUAL_INTEREST_RATE = 0.05;
+
+ public EmployeeSavings(String firstName, String lastName) {
+ this(firstName, lastName, new Random().nextInt(800 - 100) + 100.0);
+ }
+
+ public EmployeeSavings(String firstName, String lastName, double monthlyContribution) {
+ super(firstName, "", lastName);
+ this.monthlyContribution = monthlyContribution;
+ this.accountValue = predictBalanceAfterMonths(12);
+ }
+
+ // what is d1, d2?
+ public EmployeeSavings(String firstName, String lastName, double[] d1, double[] d2) {
+ super(firstName, "", lastName);
+ }
+
+ public double getAccountValue() {
+ return this.accountValue;
+ }
+
+ public double[] getMonthlyInterests() {
+ return this.monthlyInterests;
+ }
+
+ public double[] getMonthlySavings() {
+ return this.monthlySavings;
+ }
+
+ public double[] calculateInterests() {
+ this.monthlyInterests = new double[12];
+ for (int i = 1; i <= 12; i++) this.monthlyInterests[i - 1] = predictInterestAfterMonths(i);
+ return this.monthlyInterests;
+ }
+
+ public double[] generateMonthlySavings() {
+ this.monthlySavings = new double[12];
+ for (int i = 1; i <= 12; i++) this.monthlySavings[i - 1] = predictBalanceAfterMonths(i);
+ return this.monthlySavings;
+ }
+
+ public double predictBalanceAfterMonths(int months) {
+ double monthlyRate = ANNUAL_INTEREST_RATE / 12.0;
+ double balance = 0;
+
+ for (int i = 0; i < months; i++)
+ balance = (balance + this.monthlyContribution) * (1 + monthlyRate);
+
+ return Math.round(balance * 1000) / 1000.0;
+ }
+
+ public double predictInterestAfterMonths(int months) {
+ return Math.round(
+ (predictBalanceAfterMonths(months) - (months * this.monthlyContribution)) * 1000)
+ / 1000.0;
+ }
+
+ public static String getReport(EmployeeSavings[] accounts) {
+ ArrayList<String> statement = new ArrayList<String>();
+
+ for (EmployeeSavings account : accounts) statement.add(account.toString());
+
+ return String.join(System.lineSeparator(), statement);
+ }
+
+ @Override
+ public String toString() {
+ Currency currency = Currency.getInstance(Locale.getDefault());
+ return String.format(
+ "%s %s%.2f", super.getFirstName(), currency.getSymbol(), this.getAccountValue());
+ }
+}