In: Computer Science
The L&L bank can handle up to 30 customers who have savings accounts. Design and implement a program that manages the accounts. Keep track of key information and let each customer make deposits and withdrawals. Produce error messages for invalid transactions. Hint: You may want to base your accounts on the Account class from chapter 5. Also provide a method to add 3 percent interest to all accounts whenever the method is invoked.
This is the account class in chapter 5:
Please use an array for all accounts. Thank you!
import java.text.NumberFormat;
public class Accounts
{
private NumberFormat fmt = NumberFormat.getCurrencyInstance();
   private final double RATE = 0.035;  // interest rate of 3.5%
   private int acctNumber;
   private double balance;
   private String name;
   //-----------------------------------------------------------------
   //  Sets up the account by defining its owner, account number,
   //  and initial balance.
   //-----------------------------------------------------------------
   public Accounts (String owner, int account, double initial)
   {
      name = owner;
      acctNumber = account;
      balance = initial;
   }
   //-----------------------------------------------------------------
   //  Validates the transaction, then deposits the specified amount
   //  into the account. Returns the new balance.
   //-----------------------------------------------------------------
   public double deposit (double amount)
   {
      if (amount < 0)  // deposit value is negative
      {
         System.out.println ();
         System.out.println ("Error: Deposit amount is invalid.");
         System.out.println (acctNumber + "  " + fmt.format(amount));
      }
      else
         balance = balance + amount;
      return balance;
   }
   //-----------------------------------------------------------------
   //  Validates the transaction, then withdraws the specified amount
   //  from the account. Returns the new balance.
   //-----------------------------------------------------------------
     public double withdraw (double amount, double fee)
       {
          amount += fee;
      if (amount < 0)  // withdraw value is negative
      {
         System.out.println ();
         System.out.println ("Error: Withdraw amount is invalid.");
         System.out.println ("Account: " + acctNumber);
         System.out.println ("Requested: " + fmt.format(amount));
      }
      else
         if (amount > balance)  // withdraw value exceeds balance
         {
            System.out.println ();
            System.out.println ("Error: Insufficient funds.");
            System.out.println ("Account: " + acctNumber);
            System.out.println ("Requested: " + fmt.format(amount));
            System.out.println ("Available: " + fmt.format(balance));
         }
         else
            balance = balance - amount;
      return balance;
   }
   //-----------------------------------------------------------------
   //  Adds interest to the account and returns the new balance.
   //-----------------------------------------------------------------
   public double addInterest ()
   {
      balance += (balance * RATE);
      return balance;
   }
   public double addInterestAll ()// I made this method myself but I am not sure if it is correct
   {
       balance += (balance * 0.03);
       return balance;
   }
   //-----------------------------------------------------------------
   //  Returns the current balance of the account.
   //-----------------------------------------------------------------
   public double getBalance ()
   {
      return balance;
   }
   //-----------------------------------------------------------------
   //  Returns the account number.
   //-----------------------------------------------------------------
   public int getAccountNumber ()
   {
      return acctNumber;
   }
   //-----------------------------------------------------------------
   //  Returns a one-line description of the account as a string.
   //-----------------------------------------------------------------
   public String toString ()
   {
      return (acctNumber + "\t" + name + "\t" + fmt.format(balance));
   }
}
Below is the account manager class
/**
*
* Accounts manager class to manage all the
* properties of accounts
*
*/
public class AccountsManager {
private Accounts[] accounts;
private final int capacity;
private int current;
private double fee;
//we give the total capacity of accounts
public AccountsManager(int capacity) {
this.capacity = capacity;
accounts = new Accounts[capacity];
current = 0;
}
// returns the account number of the new account
// or -1 if no account could be made
//account number starts with 0
public int addAccount(String name) {
if (current >= capacity) {
return -1;
}
accounts[current] = new Accounts(name, current, 0);
return current++;
}
//return the account details based on the account number
public Accounts getAccount(int number) {
if (number >= current || number < 0) {
return null;
}
return accounts[number];
}
//make the deposit into the given account number and with the given
amount
public double makeDeposit(int accountNumber, double amount) {
   Accounts account = getAccount(accountNumber);
  
   return account.deposit(amount);
}
//this is to withdraw the amount, withdrawl fee is set from main
method
public double withdrawAmount(int accountNumber, double amount)
{
   Accounts account = getAccount(accountNumber);
  
   return account.withdraw(amount, fee);
}
  
public void addInterestToAll() {
   for (int i=0; i <= current-1; i++) {
       System.out.println("i: " + i +
"account length: " + current);
       System.out.println("Interest added
to " + accounts[i].getAccountNumber() + " is : "+
accounts[i].addInterest());
   }
}
   public double getFee() {
       return fee;
   }
   public void setFee(double fee) {
       this.fee = fee;
   }
}
below is the main method class used for testing
public class Main {
   public static void main(String[] args) {
       AccountsManager manager = new
AccountsManager(30);
       manager.setFee(2.0);
      
System.out.println("accounts");
       manager.addAccount("HSK");
      
System.out.println(manager.getAccount(0));
       manager.addAccount("Saras");
      
System.out.println(manager.getAccount(1));
      
       manager.makeDeposit(0, 20.0);
       manager.makeDeposit(1, 40.0);
       System.out.println("made
deposits");
      
System.out.println(manager.getAccount(0));
      
System.out.println(manager.getAccount(1));
      
      
System.out.println("withdrawls");
       manager.withdrawAmount(0,
5.0);
       manager.withdrawAmount(1,
2.0);
      
System.out.println(manager.getAccount(0));
      
System.out.println(manager.getAccount(1));
      
       System.out.println("adding
interest");
       manager.addInterestToAll();
      
System.out.println(manager.getAccount(0));
      
System.out.println(manager.getAccount(1));
   }
}