Bank Accounts using C++
Design a generic 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 virtual 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 virtual 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 virtual 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 virtual 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 generic 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 generic 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.
Answer:
Account.cpp
#include "Account.h" #include <iostream> #include <iomanip> using namespace std; Account::Account() { balance = 0.00; deposits = 0; withdrawals = 0; interestRate = 0.05; serviceCharges = 0.00; status = true; //flag, false if the account below 25 } void Account::deposit(double money) { balance += money; deposits++; } void Account::withdraw(double money) { balance -= money; withdrawals++; } void Account::calcInt() { double monthlyInterestRate = interestRate / 12; double monthlyInterest = balance * monthlyInterestRate; balance += monthlyInterest; //check if the account balance is larger than 25 then set the flag to true if (balance > 25) { status = true; } } void Account::monthlyProc() { calcInt(); balance -= serviceCharges; } void Account::getMonthlyStats(){ cout << "\nWithdrawals:\t\t" << withdrawals << "\nDeposits:\t\t" << deposits << setprecision(2) << fixed << showpoint << "\nService Charges:\t" << serviceCharges << "\nEnding Balance:\t\t" << balance << endl; }
Account.h
#ifndef ACCOUNT_H #define ACCOUNT_H class Account { public: Account(); virtual void deposit(double); virtual void withdraw(double); virtual void calcInt(); virtual void monthlyProc(); void getMonthlyStats(); protected: double balance; int deposits; int withdrawals; double interestRate; double serviceCharges; bool status; }; #endif
Checking.cpp
#include "Checking.h" #include "Account.h" #include <iostream> using namespace std; void Checking::deposit(double money) { if (balance + money > 25) { status = true; } if (status == false) { cout << "\nYour account is inactive.\n"; return; } Account::deposit(money); } void Checking::withdraw(double money) { if (money < 0) { cout << "\nWithdraw positive numbers only.\n"; } if (status == false) { cout << "\nYour account is inactive\n"; return; } else if (balance - money < 0) { cout << "You cannot withdraw more than the account balance\n"; serviceCharges += 15.00; } else if (balance - money > 0 && balance - money < 25 ){ cout << "\nYour account is below $25.00. It will be deactivated\n"; status = false; } else { Account::withdraw(money); } } void Checking::monthlyProc() { cout << "\n\nCHECKING ACCOUNT MONTHLY STATISTICS:"; serviceCharges += (5.00f + (withdrawals*.10f)); Account::monthlyProc(); Account::getMonthlyStats(); deposits = 0; withdrawals = 0; serviceCharges = 0; }
Checking.h
#ifndef CHECKING_H #define CHECKING_H #include "account.h" class Checking : public Account { public: Checking() : Account() {} void deposit(double); void withdraw(double); void monthlyProc(); }; #endif
Savings.cpp
#include "Savings.h" #include <iostream> using namespace std; void Savings::deposit(double money) { if (balance + money > 25) status = true; Account::deposit(money); } void Savings::withdraw(double money) { if (money < 0) { cout << "Withdraw positive numbers only.\n"; } if (status == false) { cout << "Your account now is inactive.\n"; return; } else if (balance - money < 0) { cout << "You cannot withdraw more than \nthe account balance "; } else if (balance - money < 25.00 && balance - money > 0) { cout << "\nYour account has fallen below $25.00.It will be deactivated\n"; Account::withdraw(money); status = false; } else { Account::withdraw(money); } } void Savings::monthlyProc() { if (withdrawals > 4){ serviceCharges += 1.00f * (withdrawals - 4); if (balance - serviceCharges < 25.00) { status = false; cout << "\nYour account has fallen below $25.00.It will be deactivated\n"; } cout << "\nSAVINGS ACCOUNT MONTHLY STATISTICS:"; } Account::monthlyProc(); Account::getMonthlyStats(); deposits = 0; withdrawals = 0; serviceCharges = 0; }
Savings.h
#ifndef SAVINGS_H #define SAVINGS_H #include "account.h" class Savings : public Account { public: Savings() : Account() {} void withdraw(double); void deposit(double); void monthlyProc(); protected: bool status; }; #endif
tester.cpp
#include "Savings.h" #include "Checking.h" #include <iostream> #include <cctype> using namespace std; //function prototype void call(int, Savings &, Checking &); int main() { Savings savings; Checking checking; int num; //display the menu list do { cout << "\n******** BANK ACCOUNT MENU ********" << endl << "1. Savings Account Deposit" << endl << "2. Checking Account Deposit" << endl << "3. Savings Account Withdrawal" << endl << "4. Checking Account Withdrawal" << endl << "5. Update and Display Account Statistics" << endl << "6. Exit" << endl << "Your choice, please: (1-6)\n "; cin >> num; /*if not valid entry*/ while (num < 1 || num > 6) { cout << " please enter: (1-6) "; cin >> num; } call(num, savings, checking); } while (num != 6); return 0; } //call function void call(int num, Savings &savings, Checking &checking){ double money; //case 1 and 2 if we have deposit switch (num){ case 1: cout << "\nEnter amount to deposit: "; cin >> money; savings.deposit(money); break; case 2: cout << "\nEnter amount to deposit: "; cin >> money; checking.deposit(money); break; //case 3 and 4 if we have withdraw case 3: cout << "\nEnter amount to withdraw: "; cin >> money; savings.withdraw(money); break; case 4: cout << "\nEnter amount to withdraw: "; cin >> money; checking.withdraw(money); break; //case 5 to display the monthly report case 5: cin.ignore(); savings.monthlyProc(); cout << "\nPress enter to continue.."; cin.get(); checking.monthlyProc(); } }
Leave a reply