public class Account implements Cloneable { private static String accountNumber; public static double balance = 0; static Customer customer = new Senior(); public static Transaction[] trans = new Transaction[100]; public Account() { } /* getBalance * pre- existing account to retrieve balance from * post- account is not modifed * @param return - The specified balance is returned */ public static double getBalance() { return balance; } /* getCustomer * pre- existing customer to get * post- the customer is not modifed * @param return - The specified customer is returned */ public static Customer getCustomer() { return customer; } /* setCustomerd * pre- * post- the customer is added */ public static void setCustomer(String name, String address, String telephoneNumber, String accountNumber1, int age) { customer.setName(name); customer.setAddress(address); customer.setTelephoneNumber(telephoneNumber); customer.setAccountNumber(accountNumber1); customer.setAge(age); } /* toString * pre- existing customer to display * post- customer information is displayed * @param return - displays customer information */ public String toString() { return "\nCustomer name: " + customer.getName() + "\nAccount number: " + customer.getAccountNumber() + "\nBalance: " + balance + "\nTelephone Number: " + customer.getTelephoneNumber() + "\nAge: " + customer.getAge() + "\nAddress: " + customer.getAddress(); } } public class Bank { public static Account[] accounts = new Account[100]; public static int counter = 0; public static int tCounter = 0; public Bank() { } /* addAccount * pre- * post- an account is added to the array of accounts */ public static void addAccount(String name, String address, String telephoneNumber, String accountNumber, int age) { accounts[counter].setCustomer(name, address, telephoneNumber, accountNumber, age); counter++; } /* getAccount * pre- existing account to get * post- account is not modifed * @param accountValue - which account to return * @param return - The specified account is returned */ public static Account getAccount(int accountValue) { return accounts[accountValue]; } /* makeWithdrawal * pre- existing account, money in the bank * post- the amount of money is withdrawn from the specified account * @param amount - Amount to withdraw * @param accountNumber - number of the account to withdraw from * @param date - date transaction was made */ public static void makeWithdrawal(double amount, String accountNumber, String date ) { Transaction.processTransaction(amount, accountNumber, date, "Withdrawal"); } /* makeDeposit * pre- existing account * post- the amount of money is deposited in the bank * @param amount - Amount to withdraw * @param accountNumber - number of the account to withdraw from * @param date - date transaction was made */ public static void makeDeposit(double amount, String accountNumber, String date ) { Account.trans[tCounter].processTransaction(amount, accountNumber, date, "Deposit"); } } public abstract class Customer { private static String name, telephoneNumber, address, accountNumber; private static int age; public Customer() { //if this does not work, put accessors in constructor here } /* setName * pre- * post- name of customer set * @param newName - name of customer */ public static void setName(String newName) { name = newName; } /* setTelephoneNumber * pre- * post- phone number of customer set * @param newPhone - phone number */ public static void setTelephoneNumber(String newPhone) { telephoneNumber = newPhone; } /* setAddress * pre- * post- Address of customer set * @param newAddress - address of customer */ public static void setAddress(String newAddress) { address = newAddress; } /* setAccountNumber * pre- * post- account number of customer set * @param newAccountNumber - account number of customer */ public static void setAccountNumber(String newAccountNumber) { accountNumber = newAccountNumber; } /* setAge * pre- * post- age of customer set * @param newName - age of customer */ public static void setAge(int newAge) { age = newAge; } /* getName * pre- * post- name of customer retrievedd * @return - name returned */ public static String getName() { return name; } /* getTelephoneNumber * pre- * post- number of customer retrievedd * @return - number returned */ public static String getTelephoneNumber() { return telephoneNumber; } /* getAddress * pre- * post- address of customer retrievedd * @return - address returned */ public static String getAddress() { return address; } /* getAccountNumber * pre- * post- Account number of customer retrievedd * @return - Account number returned */ public static String getAccountNumber() { return accountNumber; } /* getAge * pre- * post- Age of customer retrievedd * @return - Age returned */ public static int getAge() { return age; } public abstract double getSavingsInterest(); public abstract double getCheckInterest(); public abstract double getCheckCharge(); public abstract double getOverdraftPenalty(); } public class SavingsAccount extends Account { public SavingsAccount() { } /* deposit * pre- existing Account * post- money deposited * @param amount - amount to be deposited * @param accountNumber - number of account to be modified * @param date - date transaction occurs */ public static void deposit(double amount, String accountNumber, String date) { Bank.makeDeposit(amount, accountNumber, date); } /* withdraw * pre- existing Account * post- specified money withdrawn * @param amount - amount to be withdrawn * @param accountNumber - number of account to be modified * @param date - date transaction occurs */ public static void withdraw(double amount, String accountNumber, String date) { Bank.makeWithdrawal(amount, accountNumber, date); } /* addInterest * pre- existing Account * post- interest added * @param accountNumber - number of account to be modified */ public void addInterest(String accountNumber) { if (Customer.getAge() < 24) { Bank.accounts[Bank.counter].balance = Bank.accounts[Bank.counter].balance * Student.getSavingsInterest(); } } } public class Senior extends Customer { private final double SAVINGS_INTEREST = 3.5; private final double CHECK_INTEREST = 2.1; private final double CHECK_CHARGE = .25; private final double OVERDRAFT_PENALTY = 15; public Senior() { } /* getSavingsInterest * pre- * post- constant number returned * @param return - Constant number set for Interest */ public double getSavingsInterest() { return SAVINGS_INTEREST; } /* getCheckInterest * pre- * post- constant number returned * @param return - Constant number set for check_interested returnedd */ public double getCheckInterest() { return CHECK_INTEREST; } /* getCheckcharge * pre- * post- constant number returned * @param return - Constant number set for check_charge returnedd */ public double getCheckCharge() { return CHECK_CHARGE; } /* getOverdraftPenalty * pre- * post- constant number returned * @param return - Constant number set for OverdraftPenalty returnedd */ public double getOverdraftPenalty() { return OVERDRAFT_PENALTY; } } public class Student extends Customer { public static final double SAVINGS_INTEREST = 3.3; public final double CHECK_INTEREST = 1.6; public final double CHECK_CHARGE = .75; public final double OVERDRAFT_PENALTY = 25; public Student() { } /* getSavingsInterest * pre- * post- constant number returned * @param return - Constant number set for Interest */ public double getSavingsInterest() { return SAVINGS_INTEREST; } /* getCheckInterest * pre- * post- constant number returned * @param return - Constant number set for check_interested returnedd */ public double getCheckInterest() { return CHECK_INTEREST; } /* getCheckcharge * pre- * post- constant number returned * @param return - Constant number set for check_charge returnedd */ public double getCheckCharge() { return CHECK_CHARGE; } /* getOverdraftPenalty * pre- * post- constant number returned * @param return - Constant number set for OverdraftPenalty returnedd */ public double getOverdraftPenalty() { return OVERDRAFT_PENALTY; } } public class Transaction { public static String accountNumber, transactionType, date; public static double amount; public Transaction() { } /* processTransaction * pre- existing Account * post- transaction completed * @param amount1 - amount to be deposited * @param accountNumber1 - number of account to be modified * @param date1 - date transaction occurs * @param type - deposit or withdraw */ public static void processTransaction( double amount1, String accountNumber1, String date1, String type) { amount = amount1; date = date1; accountNumber = accountNumber1; if (type == "Deposit") { Bank.accounts[Bank.counter].balance += amount1; } else { Bank.accounts[Bank.counter].balance -= amount1; } transactionType = type; } } public class CheckingAccount extends Account { public CheckingAccount() { } /* deposit * pre- existing account to deposit money into * post- money is deposited * @param amount - amount to deposit * @param accountNumber - which account to return * @param date - The specified account is returned */ public static void deposit(double amount,String accountNumber, String date) { Bank.makeDeposit(amount, accountNumber, date); } /* withdraw * pre- existing account * post- the amount of money is withdrawn in the bank * @param amount - Amount to withdraw * @param accountNumber - number of the account to withdraw from * @param date - date transaction was made */ public static void withdraw(double amount,String accountNumber, String date) { Bank.makeWithdrawal(amount, accountNumber, date); } /* addInterest * pre- existing account * post- interested is added */ public static void addInterest() { } } public class Adult extends Customer { private final double SAVINGS_INTEREST = 3.2; private final double CHECK_INTEREST = 1.8; private final double CHECK_CHARGE = .50; private final double OVERDRAFT_PENALTY = 20; public Adult() { } /* getSavingsInterest * pre- * post- constant number returned * @param return - Constant number set for Interest */ public double getSavingsInterest() { return SAVINGS_INTEREST; } /* getCheckInterest * pre- * post- constant number returned * @param return - Constant number set for check_interested returnedd */ public double getCheckInterest() { return CHECK_INTEREST; } /* getCheckcharge * pre- * post- constant number returned * @param return - Constant number set for check_charge returnedd */ public double getCheckCharge() { return CHECK_CHARGE; } /* getOverdraftPenalty * pre- * post- constant number returned * @param return - Constant number set for OverdraftPenalty returnedd */ public double getOverdraftPenalty() { return OVERDRAFT_PENALTY; } }