I need to write a program that handles a bank account and does a number of transactions using an arraylist. However, I'm having trouble getting the arraylist to store all the transactions and then output them. There are 2 classes, Bank and BankAccount. I also have a tester. Any help would be appreciated.
Bank
BankAccount
Tester
Bank
Code:
package bank;
import java.util.ArrayList;
/**
This bank contains a collection of bank accounts.
*/
public class Bank
{
/**
Constructs a bank with no bank accounts.
*/
public Bank()
{
accounts = new ArrayList<BankAccount>();
}
/**
Adds an account to this bank.
@param a the account to add
*/
public void addAccount(BankAccount a)
{
accounts.add(a);
}
/**
Gets the sum of the balances of all accounts in this bank.
@return the sum of the balances
*/
public double getTotalBalance()
{
double total = 0;
for (BankAccount a : accounts)
{
total = total + a.getBalance();
}
return total;
}
/**
Counts the number of bank accounts whose balance is at
least a given value.
@param atLeast the balance required to count an account
@return the number of accounts having least the given balance
*/
public int count(double atLeast)
{
int matches = 0;
for (BankAccount a : accounts)
{
if (a.getBalance() >= atLeast) matches++; // Found a match
}
return matches;
}
/**
Finds a bank account with a given number.
@param accountNumber the number to find
@return the account with the given number, or null if there
is no such account
*/
public BankAccount find(int accountNumber)
{
for (BankAccount a : accounts)
{
if (a.getAccountNumber() == accountNumber) // Found a match
return a;
}
return null; // No match in the entire array list
}
/**
Gets the bank account with the largest balance.
@return the account with the largest balance, or null if the
bank has no accounts
*/
public BankAccount getMaximum()
{
if (accounts.size() == 0) return null;
BankAccount largestYet = accounts.get(0);
for (int i = 1; i < accounts.size(); i++)
{
BankAccount a = accounts.get(i);
if (a.getBalance() > largestYet.getBalance())
largestYet = a;
}
return largestYet;
}
/**
* adds a Bank Account with an initial balance
*/
public void addAccount(int accountNumber, double initialBalance){
accounts.add(new BankAccount(accountNumber, initialBalance));
}
/**
* deposit method handles transactions that deposit money into bank account
*/
public void deposit(int accountNumber, double amount){
BankAccount anAccount = this.find(accountNumber);
anAccount.deposit(amount);
}
/**
* withdraw method handles transactions that withdraw money from the bank account
*/
public void withdraw(int accountNumber, double amount){
BankAccount anAccount=this.find(accountNumber);
anAccount.withdraw(amount);
}
/**
* @return returns bank account's balance
*/
public double getBalance(int accountNumber){
BankAccount anAccount = this.find(accountNumber);
return anAccount.getBalance();
}
/**
* method which suspends an account
*/
public void suspendAccount(int accountNumber){
BankAccount temp = this.find(accountNumber);
temp.suspend();
}
/**
* method that reopens an account
*/
public void reOpenAccount(int accountNumber){
BankAccount temp = this.find(accountNumber);
temp.reOpen();
}
/**
* method that closes an account
*/
public void closeAccount(int accountNumber){
BankAccount anAccount = this.find(accountNumber);
anAccount.close();
}
/**
* @return returns the current status of an account
*/
public String getAccountStatus(int accountNumber){
BankAccount anAccount = this.find(accountNumber);
return anAccount.getStatus();
}
/**
* @return returns the transactions from an account
*/
public String retrieveAccountTransactions(int accountNumber){
return find(accountNumber).retrieveTransactions();
}
/**
* Printout string of account summary
*/
public String summarizeAllAccounts(){
String string1 = "Bank Account Summary\n\nAccount \tBalance \t#Transactions \t\t Status\n";
String string2 = new String();
String string3 = new String();
for(BankAccount a : accounts)
{
string2 += a.getAccountNumber() + "\t\t " + a.getBalance() + "\t\t " + a.retrieveNumberOfTransactions() + "\t\t\t" + a.getStatus() + "\n";
}
string3 += "End of Account Summary";
return string1 + string2 + string3;
}
private ArrayList<BankAccount> accounts;
}
BankAccount
Code:
package bank;
import java.util.ArrayList;
/**
A bank account has a balance that can be changed by
deposits and withdrawals.
*/
public class BankAccount
{
public static final String OPEN = "open";
public static final String SUSPENDED = "suspended";
public static final String CLOSED = "closed";
private String status;
private int accountNumber;
private double balance;
private ArrayList<Double> transactions;
/**
Constructs a bank account with a zero balance
@param anAccountNumber the account number for this account
*/
public BankAccount(int anAccountNumber)
{
status = new String();
transactions = new ArrayList<Double>();
setStatus(OPEN);
accountNumber = anAccountNumber;
balance = 0;
}
/**
Constructs a bank account with a given balance
@param anAccountNumber the account number for this account
@param initialBalance the initial balance
*/
public BankAccount(int anAccountNumber, double initialBalance)
{
status = new String();
setStatus(OPEN);
transactions = new ArrayList<Double>();
accountNumber = anAccountNumber;
deposit(initialBalance);
}
/**
Gets the account number of this bank account.
@return the account number
*/
public int getAccountNumber()
{
return accountNumber;
}
/**
Deposits money into the bank account.
@param amount the amount to deposit
*/
public void deposit(double amount){
if (status.equals(OPEN) && amount > 0){
double newBalance = balance + amount;
balance = newBalance;
addTransaction(amount);
}
}
/**
Withdraws money from the bank account.
@param amount the amount to withdraw
*/
public void withdraw(double amount)
{
if (status.equals(OPEN) && amount > 0 && amount <= balance){
double newBalance = balance - amount;
balance = newBalance;
addTransaction(amount);
}
}
/**
* Suspends an account
*/
public void suspend(){
{
if (!isSuspended() && !isClosed())
{
setStatus(SUSPENDED);
}
}
}
/**
* Closes an ccount
*/
public void close(){
if (isSuspended())
{
reOpen();
withdraw(getBalance());
setStatus(CLOSED);
}
else
{
withdraw(getBalance());
setStatus(CLOSED);
}
}
/**
* reopens an account
*/
public void reOpen(){
if (isSuspended())
{
setStatus(OPEN);
}
}
/**
* @return returns whether or not the status is open
*/
public boolean isOpen(){
if (status.equals(OPEN)){
return true;
}
else
return false;
}
/**
* @return returns whether or not the status is suspended
*/
public boolean isSuspended(){
if (status.equals(SUSPENDED)){
return true;
}
else
return false;
}
/**
* @return returns whether or not the status is closed
*/
public boolean isClosed(){
if (status.equals(CLOSED)){
return true;
}
else
return false;
}
/**
* adds a transaction
*/
private void addTransaction(double amount){
transactions.add(amount);
}
/**
* @return returns the output message
*/
public String retrieveTransactions(){
String output = "Account #" + accountNumber + " transactions\n\n";
int count = 1;
for (double i : transactions){
output += (count + ": " + i +"\n");
count++;
}
output += "balance = "+ balance + "\nEnd of transactions\n";
return output;
}
/**
* @return returns the number of transactions
*/
public int retrieveNumberOfTransactions(){
return transactions.size();
}
/**
* @return returns the status of account
*/
private String setStatus(String newStatus){
if (status.equals(OPEN))
{
this.status = OPEN;
}
if (status.equals(SUSPENDED))
{
this.status = SUSPENDED;
}
if (status.equals(CLOSED))
{
this.status = CLOSED;
}
return status;
}
/**
* @return returns the status of account
*/
public String getStatus(){
return status;
}
/**
Gets the current balance of the bank account.
@return the current balance
*/
public double getBalance()
{
return balance;
}
}
Code:
package bank;
public class BankTester
{
public static void main(String[] args)
{
Bank firstBankOfJava = new Bank();
firstBankOfJava.addAccount(new BankAccount(1001, 500.00));
firstBankOfJava.deposit(1001, 300.00);
firstBankOfJava.deposit(1001, 50.00);
firstBankOfJava.withdraw(1001, 500.00);
firstBankOfJava.closeAccount(1001);
firstBankOfJava.addAccount(new BankAccount(1002, 2500.00));
firstBankOfJava.deposit(1002, 1500.00);
firstBankOfJava.withdraw(1002, 2000.00);
firstBankOfJava.withdraw(1002, 500.00);
firstBankOfJava.deposit(1002, 4000.00);
firstBankOfJava.suspendAccount(1002);
firstBankOfJava.addAccount(new BankAccount(1003,1000));
firstBankOfJava.deposit(1003, 100);
firstBankOfJava.withdraw(1003,250);
firstBankOfJava.deposit(1003,750);
//MasterTester will close account before this is reached
//firstBankOfJava.withdraw(1003,1600);
firstBankOfJava.closeAccount(1003);
String transactionReport1001 = firstBankOfJava.retrieveAccountTransactions(1001);
System.out.println(transactionReport1001);
String transactionReport1002 = firstBankOfJava.retrieveAccountTransactions(1002);
System.out.println(transactionReport1002);
String transactionReport1003 = firstBankOfJava.retrieveAccountTransactions(1003);
System.out.println(transactionReport1003);
String summaryReport = firstBankOfJava.summarizeAllAccounts();
System.out.println(summaryReport);
}
}
Comment