In: Computer Science
Create a class BankAccount to hold at least the following data / information about a bank account:
The class should have the following member functions:
Constructor |
To set the required data. It may be parameterized or user’s input. |
depositAmount |
A virtual function used to accept an argument for the amount to be deposited. It should add the argument (amount) to the account balance. It should also increment the variable used to track the number of deposits. |
withdrawAmount |
A virtual function used to accept an argument for the withdraw amount operation. It should subtract the argument from the account balance. It should also increment the used to track the number of withdrawals. |
calculateInterest |
A virtual function which calculates the monthly interest of the account and then updates the account balance by adding it to the principal amount. Note: Use the standard formulas/operations (monthly interest calculation) to implement this function. |
monthlyProcessing |
A virtual function which calls the calculateInterest function, subtracts the monthly service charges from the balance, and then sets the corresponding variables such as no. of withdrawals, no. of deposits, monthly service charges and so on. |
getMonthlyStatistics |
A member function used to display the monthly statistics of the account such as deposit, withdrawals, service charges, balance etc. |
Next, create a SavingAccount class which is derived from the generic class BankAccount. It should at least have one additional data member, i.e., ‘status’ that will be used to show whether account is active or inactive.
If the balance of a savings account falls below RM 25, it becomes inactive and the account holder will not be able to perform withdraw operation anymore until the balance is raised above RM 25. If balance becomes greater than or equal to RM 25, the account will become active again.
The most common member functions of the SavingAccount class are given below.
depositAmount |
A function which first checks whether the account is active/inactive before making a deposit. If inactive and the deposit brings the balance above RM 25, the account will become active again. The deposit will then be made by calling the base class version of the function. |
withdrawAmount |
A function which first checks whether the account is active/inactive before making a withdrawal. If active, the withdrawal will be made by calling the base class version of the function. |
monthlyProcessing |
This function first checks the no. of withdrawals before calling the base class version of this function. If the number of withdrawals are more than 4, a service charge of RM 1 for each withdrawal greater than or equal to RM 4 is added to the base class variable that holds the monthly service charges. Note: check the account balance after applying the service charge. If the balance become lower than RM 25, the account becomes inactive again. |
Next step is to design a CheckingAccount class. It is also derived from the generic account class and should at least have the following member functions.
withdrawAmount |
This function first determines whether a withdrawal request will cause the balance to go below RM 0. If it falls below RM 0, a service charge of RM 15 will be deducted from the account, and the withdrawal will not be made. If there is not enough amount to deduct the service charges, the balance will become negative accordingly. |
monthlyProcessing |
This function applies a monthly fee of RM 5 plus RM 0.10 per withdrawal to the base class variable that holds the monthly service charges. |
Input Validations: Apply input validations wherever appropriate such as input data format for account number and title, and other validation checks applied in a practical banking system. Assume the account number is a 6-digit integer value (324561).
Implement the above functionality using abstraction methodology. This project requires to simulate one Saving and one Checking account, however, simulating multiple accounts (may be up to 5) is encouraged. If you simulate multiple accounts, highlight it in your report and the presentation file. You may need to add more member variables and functions than those listed above. Your application should at least provide the following functionality (a sample run):
Bank Account System
|
Upon selecting the desired option in the above menu, your application should perform the required functionality.
Code:-
///BankAccount.h///
#pragma once
#include<string>
using namespace std;
class BankAccount
{
protected:
double balance;
double rate = .05;
int noOfDeposit;
int noOfWithdrawal;
int serviceCharge;
public:
BankAccount()
{
balance=0;
rate = .05;
noOfDeposit=0;
noOfWithdrawal=0;
serviceCharge=0;
}
BankAccount(double b)
{
balance = b;
rate = .05;
noOfDeposit = 0;
noOfWithdrawal = 0;
serviceCharge = 0;
}
void setServiceCharge(double d)
{
serviceCharge = d;
}
double getBalance()
{
return balance;
}
virtual void depositAmount(double amt)
{
balance += amt;
noOfDeposit++;
}
virtual void withdrawAmount(double amt)
{
if ((balance - amt) >=
0)
{
balance -= amt;
noOfWithdrawal++;
}
}
virtual void calculateInterest()
{
balance += (balance*rate /
12);
}
virtual void monthlyProcessing()
{
calculateInterest();
balance -=
serviceCharge;
noOfDeposit = 0;
noOfWithdrawal = 0;
}
void getMonthlyStatistics()
{
cout << "Account balance
is $" << balance;
cout << "\nNumber of
deposit per month is " << noOfDeposit;
cout << "\nNumber of
withdrawal per month is " << noOfWithdrawal;
}
};
///CheckingAccount.h///
#pragma once
#include"BankAccount.h"
class SavingsBankAccount:public BankAccount
{
private:
bool active;
public:
SavingsBankAccount():BankAccount()
{
active = true;
}
SavingsBankAccount(double d) :BankAccount(d)
{
active = true;
}
virtual void depositAmount(double amt)
{
balance += amt;
if (balance >= 25)
{
active
= true;
}
noOfDeposit++;
}
virtual void withdrawAmount(double amt)
{
if ((balance - amt) >= 0
&& active==true)
{
balance -= amt;
}
monthlyProcessing(amt);
if (balance < 25)
{
active
= false;
}
noOfWithdrawal++;
}
virtual void monthlyProcessing(double amt)
{
if (noOfWithdrawal >
4)
{
if
(amt >= 4)
{
balance -= serviceCharge;
}
}
}
};
///SavingsAccount.h///
#pragma once
#include"BankAccount.h"
class CheckingBankAccount :public BankAccount
{
private:
public:
CheckingBankAccount() :BankAccount() {}
CheckingBankAccount(double d) :BankAccount(d) {}
virtual void depositAmount(double amt)
{
balance += amt;
noOfDeposit++;
}
virtual void withdrawAmount(double amt)
{
balance -= amt;
noOfWithdrawal++;
if (balance < 0)
{
balance -= 15;
}
monthlyProcessing(amt);
}
virtual void monthlyProcessing(double amt)
{
if (amt >= 4)
{
balance -= serviceCharge;
}
}
};
Output:-
Please UPVOTE thank you...!!!