banking/Account.java
banking/Account.java
package banking ;
import java . time . * ;
import java . util . * ;
import java . util . stream . Collectors ;
/**
*
* @author wpollock
*/
public abstract class Account implements Comparable < Account > {
private static int nextId = 1 ;
protected final Customer customer ;
protected final String accountId ;
protected String description ;
protected final LocalDateTime creationDate ;
// protected StatementCycle statementCycle; // An enum representing any
// // possible statement cycle
protected double balance ;
protected List < Transaction > transactions = new ArrayList <> ();
/**
* @param cust Customer owning this account
* @param initialBalance Current balance
* @param accountDescription A description
*/
public Account ( Customer cust , double initialBalance ,
String accountDescription ) {
this . customer = cust ;
this . creationDate = LocalDateTime . now ();
this . accountId = "" ;
// Stub
}
/**
* @param amount The amount to deposit
*/
public abstract void deposit ( double amount );
/**
* If the account doesn't have sufficient funds for the specified
* amount, an insufficient funds fee (penalty) is charged on the
* account.
* @param amount The amount to withdraw
*/
public abstract void withdraw ( double amount );
/** Transfer funds between two accounts of a single customer.
*
* @param fromAccount The source of the funds
* @param toAccount The account in which the funds will be deposited
* @param amount The amount to transfer
*/
public static void transfer ( Account fromAccount , Account toAccount ,
double amount ) {
// Stub
}
/**
* @return The description for this account
*/
public String getAccountDescription () {
return null ; // Stub
}
/**
* @param accountDescription The replacement description of this account
*/
public void setAccountDescription ( String accountDescription ) {
// Stub
}
/**
* @return The current account balance
*/
public double getBalance () {
return 0.00 ; // Stub
}
/**
* @return read-only view of the account's transaction list
*/
public List < Transaction > getTransactions () {
return null ; // Stub
}
/**
* @param transactionId The id of the transaction to search for
* @return the matching transaction
* @throws IllegalArgumentException when no such transaction exists
*/
public Transaction getTransaction ( int transactionId ) {
return null ; // Stub
}
/**
* @return Account's ID
*/
public String getAccountId () {
return null ; // Stub
}
/**
* @return the customer who owns this account
*/
public String getCustomerId () {
return null ; // Stub
}
/**
* @return The date and time the account was created.
*/
public LocalDateTime getAccountCreationDate () {
return null ; // Stub
}
@ Override
public int hashCode () {
return 0 ; // Stub
}
@ Override
public boolean equals ( Object obj ) {
return false ; // Stub
}
@ Override
public int compareTo ( Account other ) {
return 1 ; // Stub
}
@ Override
public String toString () {
return null ; // Stub
}
}
banking/Bank.java
banking/Bank.java
package banking ;
import java . util . * ;
import java . util . stream . Collectors ;
/**
* @author wpollock
*
*/
public class Bank {
private final String NAME ;
private final Map < String , Customer > customers = new HashMap <> ();
private double insufficientFundsPenalty = 10.00 ; // Default, in dollars
/** Creates a new Bank object with the given name.
*
* @param name Name of the bank
*/
public Bank ( String name ) {
this . NAME = "" ; // Stub
}
/** Starts up the Bank simulator
* @param args command line arguments - ignored
*/
public static void main ( String [] args ) {
System . out . println ( "Hello from Bank" ); // Stub
}
/**
* @return the insufficientFundsPenalty
*/
public double getInsufficientFundsPenalty () {
return insufficientFundsPenalty ;
}
/**
* @param insufficientFundsPenalty the insufficientFundsPenalty to set
*/
public void setInsufficientFundsPenalty ( double insufficientFundsPenalty ) {
// Stub
}
/**
* @return the name
*/
public String getNAME () {
return NAME ;
}
/** Adds a new bank account
*
*/
public void addAccountWizard () {
// Stub
}
/** Generates a report of all current accounts, in account ID order
* @return A list of all accounts of all customers of this bank, sorted
* by ID.
*
*/
public SortedSet < Account > getAllAccounts () {
// for each customer, get accounts and add to sorted set.
return null ; //Stub
}
/** Add a new customer to the bank, using a GUI form
*
*/
public void addCustomerWizard () {
}
/** Add a new customer to the bank.
* @param lastName Customer's last (sur- or family) name
* @param firstName Customer's first (or given) name
* @return the customer's ID
*/
public String addCustomer ( String lastName , String firstName ) {
return null ; // Stub
}
/** Deletes a customer from the bank.
* (In reality, just marks the customer as non-current.)
* @param customerId the ID of the customer to remove
*/
public void removeCustomer ( String customerId ) {
// Stub
}
/** Generates a report of all current customers, in customer ID order
* @return SortedSet of all customers at this bank.
*/
public SortedSet < Customer > getAllCustomers () {
return null ; // Stub
}
/** Get a Customer object, given a customer's ID
*
* @param customerId The ID of the customer
* @return That customer's Account, or null
*/
public Customer getCustomer ( String customerId ) {
return null ; // Stub
}
/** Get a List of Customer objects, given a customer's last and
* first names
*
* @param lastName The customer's last name
* @param firstName The customer's first name
* @return a List of Customers with that first and last name,
* or null if no such customer exists
*/
public List < Customer > getCustomer ( String lastName , String firstName ) {
return null ; // Stub
}
/** Return a List of a given customer's accounts (if any)
*
* @param customerId The Customer ID who's account list is desired.
* @return a List of the accounts of that customer, if any.
*/
public List < Account > getCustomersAccounts ( String customerId ) {
return null ; // Stub
}
}
banking/Customer.java
banking/Customer.java
package banking ;
import java . util . * ;
/**
* @author wpollock
*
*/
public class Customer implements Comparable < Customer > {
private static int nextId = 1 ;
private final Bank bank ;
private final String customerId ;
private final String lastName ;
private final String firstName ;
private final SortedSet < Account > customerAccounts = new TreeSet <> ();
/** Creates a new Customer object from a name.
* Note for this project, we assume bank names are unique.
* @param bank The bank owning this account
* @param lastName The last name of the account owner.
* @param firstName The first name of the account owner.
*/
public Customer ( Bank bank , String lastName , String firstName ) {
this . bank = null ;
this . customerId = "" ;
this . lastName = "" ;
this . firstName = "" ;
// Stub
}
/**
* @return the bank
*/
public Bank getBank () {
return null ; // Stub
}
/** Getter for customer's ID
* @return The customer's ID
*/
public String getCustomerId () {
return null ; // Stub
}
/** Getter for the customer's last name
* @return The customer's last name
*/
public String getLastName () {
return null ; // Stub
}
/** Getter for the customer's first name
* @return The customer's first name
*/
public String getFirstName () {
return null ; // Stub
}
/** Returns a read-only SortedSet of the customer's active
* accounts (if any)
*
* @return an immutable SortedSet of accounts (check for
* immutability of accounts; use a List?)
*/
public SortedSet < Account > getCustomerAccounts () {
return null ; // Stub
}
/** Returns the total fees (including penalties) paid by this customer
* for year-to-date
*
* @return YTD fees paid
*/
public double ytdFees () {
return 0.0 ; // Stub
}
/** Returns the total interest paid to this customer for year-to-date
* @return YTD interest payed
*/
public double ytdInterest () {
return 0.0 ; // Stub
}
/** Adds a new bank account
* @param initBal Initial balance
* @param desc A description for the account, chosen by the customer
* @return the newly added account object
*/
public SavingsAccount addSavingsAccount ( double initBal , String desc ) {
return null ; // Stub
}
/** Deletes a given account (in the real world, just marks it as defunct
* or something)
* @param accountId the ID of the account to remove
*/
public void removeAccount ( String accountId ) {
// Stub
}
/** Find an account given an account ID
*
* @param accountId The ID of the desired account
* @return The Account object, or null if no such account
*/
public Account getAccount ( String accountId ) {
return null ; // Stub
}
@ Override
public String toString () {
return "" ; // Stub
}
@ Override
public int hashCode () {
return 0 ; // Stub
}
@ Override
public boolean equals ( Object obj ) {
return false ; // Stub
}
@ Override
public int compareTo ( Customer other ) {
return 1 ; // Stub
}
}
banking/SavingsAccount.java
banking/SavingsAccount.java
package banking ;
import static banking . TransactionType . * ;
/**
* @author wpollock
*
*/
public class SavingsAccount extends Account {
// Default monthly interest rate, applied on last day of statement cycle:
private static double DEFAULT_INTEREST_RATE = 2.0 ; // a percent
/** SavingsAccount constructor, using default interest rate.
* @param cust The customer that owns this account
* @param initialBalance The initial account balance
* @param description An account description provided by the owner
*/
public SavingsAccount ( Customer cust , double initialBalance ,
String description ) {
super ( cust , initialBalance , description );
}
/** SavingsAccount constructor, using a custom interest rate.
* @param cust The customer that owns this account
* @param initialBalance The initial account balance
* @param description An account description provided by the owner
* @param interestRate Account's default monthly interest rate
*/
public SavingsAccount ( Customer cust , double initialBalance ,
String description , double interestRate ) {
super ( cust , initialBalance , description );
// Stub
}
@ Override
public void deposit ( double amount ) {
// Stub
}
@ Override
public void withdraw ( double amount ) {
// Stub
}
/** Adds a transaction "INTEREST PAYMENT" based on this account's
* monthly interest rate.
* @param rate Interest rate to apply, as a percentage (e.g. 2.1".
*/
public void addInterestTransaction ( double rate ) {
// Stub
}
/**
* @return the interestRate
*/
public static double getDefaultInterestRate () {
return 0.00 ; // Stub
}
/**
* @param interestRate the interestRate to set
*/
public static void setDefaultInterestRate ( double interestRate ) {
// Stub
}
}
banking/Transaction.java
banking/Transaction.java
package banking ;
import java . time . * ;
/**
* @author wpollock
*
*/
public class Transaction implements Comparable < Transaction > {
private static int nextID = 1 ;
private final int id ;
private final LocalDateTime timestamp ;
private final TransactionType type ;
private final double amount ;
private final String description ;
/**
* @param type The type of this transaction
* @param amount The amount of the transaction
* @param description The description of the transaction.
* This may include check numbers, memo, payee, etc.
*/
public Transaction ( TransactionType type , double amount ,
String description ) {
this . id = 1 ;
this . type = null ;
this . amount = 0.00 ;
this . description = "" ;
this . timestamp = LocalDateTime . now ();
// Stub
}
/**
* @return the id
*/
public int getId () {
return 0 ; // Stub
}
/**
* @return the timestamp for this transaction
*/
public LocalDateTime getTimestamp () {
return null ; // Stub
}
/**
* @return the transaction type
*/
public TransactionType getType () {
return null ; // Stub
}
/**
* @return the amount of this transaction.
* Transaction amounts are always positive.
*/
public double getAmount () {
return 0.00 ; // Stub
}
/**
* @return the description
*/
public String getDescription () {
return null ; // Stub
}
@ Override
public String toString () {
return "" ; // Stub
}
@ Override
public int hashCode () {
return 1 ; // Stub
}
@ Override
public boolean equals ( Object obj ) {
return false ; // Stub
}
@ Override
public int compareTo ( Transaction other ) {
return 0 ; // Stub
}
}
banking/TransactionType.java
banking/TransactionType.java
package banking ;
/** A list of the possible types of transactions in the banking simulation.
* @author wpollock
*
*/
public enum TransactionType {
DEPOSIT , WITHDRAWAL , INTEREST , CHECK , FEE , PENALTY , ADJUSTMENT ;
}