Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Java Design a base class to hold the following information about a bank account:

ID: 3750693 • Letter: J

Question

Java

Design a base class to hold the following information about a bank account:

Balance

Number of deposits this month

Number of withdrawals

Annual interest rate

Monthly service charges

The class should have the following member functions:

Constructor:

Accepts arguments for the balance and annual interest rate.

deposit:

A function that accepts an argument for the amount of the deposit. The function should add the argument to the account balance. It should also increment the variable holding the number of deposits.

withdraw:

A function that accepts an argument for the amount of the withdrawal. The function should subtract the argument from the balance. It should also increment the variable holding the number of withdrawals.

calcInt:A function that updates the balance by calculating the monthly interest earned by the account, and adding this interest to the balance. This is performed by the following formulas:

Monthly Interest Rate = (Annual Interest Rate / 12)

Monthly Interest = Balance * Monthly Interest Rate

Balance = Balance + Monthly Interest

monthlyProc:

A function that subtracts the monthly service charges from the balance, calls the calcInt function, and then sets the variables that hold the number of withdrawals, number of deposits, and monthly service charges to zero.

Next, design a savings account class, derived from the base account class. The savings account class should have the following additional member:

status (to represent an active or inactive account)

If the balance of a savings account falls below $25, it becomes inactive. (The status member could be a flag variable.) No more withdrawals may be made until the balance is raised above $25, at which time the account becomes active again.

The savings account class should have the following member functions:

withdraw:

A function that checks to see if the account is inactive before a withdrawal is made. (No withdrawal will be allowed if the account is not active.) A withdrawal is then made by calling the base class version of the function

deposit:

A function that checks to see if the account is inactive before a deposit is made. If the account is inactive and the deposit brings the balance above $25, the account becomes active again. The deposit is then made by calling the base class version of the function.

monthlyProc:

Before the base class function is called, this function checks the number of withdrawals. If the number of withdrawals for the month is more than 4, a service charge of $1 for each withdrawal above 4 is added to the base class variable that holds the monthly service charges. (Don't forget to check the account balance after the service charge is taken. If the balance falls below $25, the account becomes inactive.)

Next, design a checking account class, also derived from the base account class. It should have the following member functions:

withdraw:

Before the base class function is called, this function will determine if a withdrawal (a check written) will cause the balance to go below $0. If the balance goes below $0, a service charge of $15 will be taken from the account. (The withdrawal will not be made.) If there isn't enough in the account to pay the service charge, the balance will become negative and the customer will owe the negative amount to the bank.

monthlyProc:

Before the base class function is called, this function adds the monthly fee of $5 plus $0.10 per withdrawal (check written) to the base class variable that holds the monthly service charges.

Write a complete program that demonstrates these classes by asking the user to enter the amounts of deposits and withdrawals for a savings account and checking account. The program should display statistics for the month, including beginning balance, total amount of deposits, total amount of withdrawals, service charges, and ending balance.

Explanation / Answer

An instance cannot be created for an abstract class. What can be done is, the sub-class which is using the methods and variables of the base class, can have an instance or object. Hence, in the given program, create an object to SavingsAccount class. The methods of the BankAccount class are invoked in the SavingsAcoount class using the "super" keyword.

P.S.

Modified Code is highlighted in bold and italics.

The underlined part of code can be removed. It is only added to show the execpution of program!

public class Bank
{
   public static void main(String args[])
   {
       SavingsAccount sa=new SavingsAccount(4501,12.2);
       sa.withdraw(120);
       sa.deposit(33);
       sa.monthlyProcess();
      
   }
}

Executed Program Code:


public class Bank
{
   public static void main(String args[])
   {
       SavingsAccount sa=new SavingsAccount(4501,12.2);
       sa.withdraw(120);
       sa.deposit(33);
       sa.monthlyProcess();
      
   }
}

abstract class BankAccount
{

    // data members
    protected double balance;
    protected int numOfDeposits;
    protected int numOfWithdrawals;
    protected double interestRate;
    protected double serviceCharge;

    // 2-argument constructor
    public BankAccount(double bal, double intRate)
    {
        balance = bal;
        interestRate = intRate;
    }

    // Deposits amount into the account
    public void deposit(double amount)
    {
        balance += amount;
        numOfDeposits++;
       System.out.println(" After deposit :"+balance);
    }

    // Withdrawals amount from the account
    public void withdraw(double amount)
    {
        balance -= amount;
        numOfWithdrawals++;
       System.out.println(" After withdraw: "+balance);
    }

    // Calculates monthly interest and adds it to the main balance
    public void calcInterest()
    {
        double monthlyInterestRate = interestRate / 12;
        monthlyInterestRate = balance * monthlyInterestRate;
        balance = balance + monthlyInterestRate;
    }

    // less the service charges from the balance
    // and clears number of withdrawals and deposits.
    public void monthlyProcess()
    {
        balance = balance - serviceCharge;
        calcInterest();
        numOfDeposits = 0;
        numOfWithdrawals = 0;
        serviceCharge = 0;
    }
}

class SavingsAccount extends BankAccount
{

    // account status
    private boolean status;

    // 2-argument constructor
    // calls base class constructor
    // and sets account status based on balance
    public SavingsAccount(double balance, double interestRate)
    {
        super(balance, interestRate);
        if (balance < 25)
            status = false;
        else
            status = true;
    }

    // allows withdrawal if the account is active
    // otherwise denies
    public void withdraw(double amount)
    {
        if (status)
            super.withdraw(amount);
          
        else
            System.out.println("Account is inactive");
    }

    // deposits amount into the account by calling
    // base class deposit method and sets status
    public void deposit(double amount)
    {
        super.deposit(amount);
        if (balance > 24)
            status = true;
    }

    // sets service charge based on number of withdrawals
    // and process monthly charges updates account status
    public void monthlyProcess()
    {
        if (numOfWithdrawals > 4)
            serviceCharge = (numOfWithdrawals - 4);
        super.monthlyProcess();
        if (balance < 25)
            status = false;
    }
}

Sample Output:

After withdraw: 4381.0
After deposit: 4414.0

hope it works

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote