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
;
}