Question
C++ help. Please fix code so that the test driver works- do NOT change the test driver, please make the changes in the areas of
C++ help. Please fix code so that the test driver works- do NOT change the test driver, please make the changes in the areas of code that need it.
Use the following driver to validate your program:
#include
#include
#include
#include "BankAccount.h"
#include "SavingsAccount.h"
#include "HighInterestSavings.h"
#include "NoServiceChargeChecking.h"
#include "ServiceChargeChecking.h"
#include "HighInterestChecking.h"
#include "CertificateOfDeposit.h"
#include "checkingAccount.h"
using namespace std;
int main()
{
vector accountsList;
//SavingsAccount( Name, Account number, Balance ) - Assume an interest rate = 0.03
accountsList.push_back(new SavingsAccount("Bill", 10200, 2500));
//HighInterestSavings(Name, Account Number, Balance) -- Assume an interest rate = 0.05, Minimum balance = $2500
accountsList.push_back(new HighInterestSavings("Susan", 10210, 2000));
//NoServiceChargeChecking(Name, Account Number, Balance) -- Assume an interest rate = 0.02, Minimum balance = $1000
accountsList.push_back(new NoServiceChargeChecking("John", 20100,
3500));
//ServiceChargeChecking(Name, Account Number, Balance) -- Assume account service charge = $10, Maximum number of checks = 5, Service Charee Excess Number of Checks = $5
accountsList.push_back(new ServiceChargeChecking("Ravi", 30100, 1800));
//HighIntererestChecking(Name, Account Number, Balance) - Assume an inerest rate = 0.05, Minimum balance = $5000
accountsList.push_back(new HighInterestChecking("Sheila", 20200, 6000));
//Certificate(name, Account Number, Balance, Interest Rate, Number of Months) - Assume an initial interest rate = 0.05, Initial Number of Maturity Months = 6
accountsList.push_back(new CertificateOfDeposit("Hamid", 51001, 18000,
0.075, 18));
cout << "January: -------------" << endl;
for (int i = 0; i < accountsList.size(); i++)
{
accountsList[i]->createMonthlyStatement();
accountsList[i]->print();
cout << endl;
}
cout << " February: -------------" << endl;
for (int i = 0; i < accountsList.size(); i++)
{
accountsList[i]->createMonthlyStatement();
accountsList[i]->print();
cout << endl;
}
for (int i = 0; i < accountsList.size(); i++)
{
accountsList[i]->withdraw(500);
}
cout << " March: -------------" << endl;
for (int i = 0; i < accountsList.size(); i++)
{
accountsList[i]->createMonthlyStatement();
accountsList[i]->print();
cout << endl;
}
System(pause);
return 0;
}
..............................................................................
#ifndef BANKACCOUNT_H #define BANKACCOUNT_H
#include
using namespace std;
class BankAccount { public: BankAccount(string name, double initialBalance); string getName(); unsigned int getAccountNumber(); double getBalance(); double getInterestRate(); string getStatementString(); void deposit(double amount); void deposit(double amount, string statement); void withdraw(double amount); void withdraw(double amount, string statement); virtual void printStatement() = 0; protected: void addStatementLine(string statement, double amount); private: string name; unsigned int accountNumber; double balance; static unsigned int nextAccountNumber; string statementString; };
#endif /* BANKACCOUNT_H */
#include "BankAccount.h" #include #include #include
using namespace std;
unsigned int BankAccount::nextAccountNumber = 1;
BankAccount::BankAccount(string name, double initialBalance) { stringstream output;
this->name = name; balance = initialBalance; accountNumber = nextAccountNumber++; output << setw(60) << left << "Transaction" << setw(10) << "Amount" << " " << "Balance" << endl; statementString = output.str(); addStatementLine("Initial Deposit", initialBalance); }
string BankAccount::getName() { return name; }
unsigned int BankAccount::getAccountNumber() { return accountNumber; }
double BankAccount::getBalance() { return balance; }
void BankAccount::addStatementLine(string statement, double amount) { stringstream output; output << setw(60) << left << statement << setw(10) << amount << " " << getBalance() << endl; //.append(statement); statementString.append(output.str()); }
void BankAccount::deposit(double amount) { deposit(amount, "Deposit"); }
void BankAccount::deposit(double amount, string statement) { balance += amount; addStatementLine(statement, amount); }
void BankAccount::withdraw(double amount) { withdraw(amount, "Withdrawal"); }
void BankAccount::withdraw(double amount, string statement) { if (balance >= amount) { balance -= amount; addStatementLine(statement, amount); } else { addStatementLine(statement.append(" Overdraft"), amount); } }
string BankAccount::getStatementString() { return statementString; }
#ifndef CERTIFICATEOFDEPOSIT_H #define CERTIFICATEOFDEPOSIT_H
#include "bankAccount.h" #include
using namespace std;
class CertificateOfDeposit : public BankAccount{ public: CertificateOfDeposit(string name, double initialBalance, int maturityMonths); CertificateOfDeposit(string name, double initialBalance); int getMaturityMonths(); double getInterestRate(); int getCurrentCDMonth(); int getWithdrawalPenaltyMonths(); void withdraw(); void incrementMonth(); void printStatement(); private: int maturityMonths; double interestRate; int currentCDMonth; int withdrawalPenaltyMonths; void withdraw(double amount); void withdraw(double amount, string statement); void deposit(double amount); };
#endif /* CERTIFICATEOFDEPOSIT_H */
#include "CertificateOfDeposit.h"
CertificateOfDeposit::CertificateOfDeposit(string name, double initialBalance, int maturityMonths) : BankAccount(name, initialBalance) { this->maturityMonths = maturityMonths; interestRate = 0.05; currentCDMonth = 0; withdrawalPenaltyMonths = 3; }
CertificateOfDeposit::CertificateOfDeposit(string name, double initialBalance) : BankAccount(name, initialBalance) { maturityMonths = 6; interestRate = 0.05; currentCDMonth = 0; withdrawalPenaltyMonths = 3; }
int CertificateOfDeposit::getCurrentCDMonth() { return currentCDMonth; }
double CertificateOfDeposit::getInterestRate() { return interestRate; }
int CertificateOfDeposit::getWithdrawalPenaltyMonths() { return withdrawalPenaltyMonths; }
int CertificateOfDeposit::getMaturityMonths() { return maturityMonths; }
void CertificateOfDeposit::withdraw() { if (getCurrentCDMonth() < getMaturityMonths()) BankAccount::withdraw(getBalance()*getInterestRate()*getWithdrawalPenaltyMonths(), "Early Withdrawal Penalty"); BankAccount::withdraw(getBalance(), "Close Account"); }
void CertificateOfDeposit::incrementMonth() { BankAccount::deposit(getBalance()*getInterestRate(), "Monthly Interest"); if (getCurrentCDMonth() < getMaturityMonths()) { currentCDMonth++; } else withdraw(); }
void CertificateOfDeposit::printStatement() { cout << "Certificate of Deposit Statement" << endl; cout << "Name: " << getName() << endl; cout << "Account Number: " << getAccountNumber() << endl; cout << "Interest Rate: " << getInterestRate() * 100 << "%" << endl; cout << "Maturity Month: " << getMaturityMonths() << ", Current Month: " << getCurrentCDMonth() << endl; cout << "Early Withdrawal Penalty: " << getWithdrawalPenaltyMonths() << " (months)" << endl << endl; cout << getStatementString() << endl; cout << "Final Balance: " << getBalance() << endl << endl; }
#ifndef HIGHINTERESTCHECKING_H #define HIGHINTERESTCHECKING_H
#include "NoServiceChargeChecking.h"
#include
using namespace std;
class HighInterestChecking : public NoServiceChargeChecking { public: HighInterestChecking(string name, double initialBalance); void printStatement(); private: };
#endif /* HIGHINTERESTCHECKING_H */
#include "HighInterestChecking.h"
HighInterestChecking::HighInterestChecking(string name, double initialBalance) : NoServiceChargeChecking(name, initialBalance, 5000, 0.05) {
}
void HighInterestChecking::printStatement() { BankAccount::deposit(getBalance() * getInterestRate(), "Interest"); cout << "High Interest Checking Statement" << endl; cout << "Name: " << getName() << endl; cout << "Account Number: " << getAccountNumber() << endl; cout << "Interest Rate: " << getInterestRate() * 100 << "%" << endl; cout << "Minimum Balance: " << getMinimumBalance() << endl << endl; cout << getStatementString() << endl; cout << "Final Balance: " << getBalance() << endl << endl; }
#ifndef HIGHINTERESTSAVINGS_H #define HIGHINTERESTSAVINGS_H
#include "SavingsAccount.h" #include
using namespace std;
class HighInterestSavings : public SavingsAccount{ public: HighInterestSavings(string name, double initialBalance); int getMinimumBalance(); void printStatement(); void withdraw(double amount, string statement); void withdraw(double amount); private: int minimumBalance; };
#endif /* HIGHINTERESTSAVINGS_H */
#include "HighInterestSavings.h"
HighInterestSavings::HighInterestSavings(string name, double initialBalance) : SavingsAccount(name, initialBalance, 0.05) { minimumBalance = 2500; }
int HighInterestSavings::getMinimumBalance() { return minimumBalance; }
void HighInterestSavings::withdraw(double amount, string statement) { if (amount + getMinimumBalance() <= getBalance()) { BankAccount::withdraw(amount, statement); } else { addStatementLine(statement.append(" Overdraft. Below Minimum Balance."), amount); } }
void HighInterestSavings::withdraw(double amount) { withdraw(amount, "Withdrawal"); }
void HighInterestSavings::printStatement() { BankAccount::deposit(getBalance() * getInterestRate(), "Interest"); cout << "High Interest Savings Account Statement" << endl; cout << "Name: " << getName() << endl; cout << "Account Number: " << getAccountNumber() << endl; cout << "Minimum Balance: " << getMinimumBalance() << endl; cout << "Interest Rate: " << getInterestRate() * 100 << "%" << endl << endl; cout << getStatementString() << endl; cout << "Final Balance: " << getBalance() << endl << endl; }
#ifndef NOSERVICECHARGECHECKING_H #define NOSERVICECHARGECHECKING_H
#include "checkingAccount.h"
#include
using namespace std;
class NoServiceChargeChecking : public CheckingAccount { public: NoServiceChargeChecking(string name, double initialBalance); void writeCheck(double amount, int checkNumber); void printStatement(); void withdraw(double amount, string statement); void withdraw(double amount); double getInterestRate(); int getMinimumBalance(); protected: NoServiceChargeChecking(string name, double initialBalance, int minBalance, double interestRate); private: double interestRate; int minimumBalance; };
#endif /* NOSERVICECHARGECHECKING_H */
#include "NoServiceChargeChecking.h" #include #include
NoServiceChargeChecking::NoServiceChargeChecking(string name, double initialBalance) : checkingAccount(name, initialBalance) { minimumBalance = 1000; this->interestRate = 0.02; }
NoServiceChargeChecking::NoServiceChargeChecking(string name, double initialBalance, int minBalance, double interestRate) : checkingAccount(name, initialBalance) { minimumBalance = minBalance; this->interestRate = interestRate; }
void NoServiceChargeChecking::writeCheck(double amount, int checkNumber) { stringstream output; output << "Check #" << checkNumber; withdraw(amount, output.str()); }
void NoServiceChargeChecking::withdraw(double amount, string statement) { if (amount + getMinimumBalance() <= getBalance()) { BankAccount::withdraw(amount, statement); } else { addStatementLine(statement.append(" Overdraft. Below Minimum Balance."), amount); } }
void NoServiceChargeChecking::withdraw(double amount) { withdraw(amount, "Withdrawal"); }
void NoServiceChargeChecking::printStatement() { BankAccount::deposit(getBalance() * getInterestRate(), "Interest"); cout << "No Service Charge Checking Statement" << endl; cout << "Name: " << getName() << endl; cout << "Account Number: " << getAccountNumber() << endl; cout << "Interest Rate: " << getInterestRate() * 100 << "%" << endl; cout << "Minimum Balance: " << getMinimumBalance() << endl << endl; cout << getStatementString() << endl; cout << "Final Balance: " << getBalance() << endl << endl; }
int NoServiceChargeChecking::getMinimumBalance() { return minimumBalance; }
double NoServiceChargeChecking::getInterestRate() { return interestRate; }
#ifndef CHECKINGACCOUNT_H #define CHECKINGACCOUNT_H
#include "BankAccount.h"
class CheckingAccount : public BankAccount { public: CheckingAccount(string name, double initialBalance); virtual void writeCheck(double amount, int checkNumber) = 0; private:
};
#endif /* CHECKINGACCOUNT_H */
#ifndef SERVICECHARGECHECKING_H #define SERVICECHARGECHECKING_H
#include "checkingAccount.h" #include
using namespace std;
class ServiceChargeChecking : public CheckingAccount { public: ServiceChargeChecking(string name, double initialBalance); void writeCheck(double amount, int checkNumber); void printStatement(); private: int checksWritten; static const int CHECK_LIMIT = 5; static const int SERVICE_CHARGE = 10; };
#endif /* SERVICECHARGECHECKING_H */
#include "ServiceChargeChecking.h" #include #include
using namespace std;
ServiceChargeChecking::ServiceChargeChecking(string name, double initialBalance) : CheckingAccount(name, initialBalance) { BankAccount::withdraw(SERVICE_CHARGE, "Service Charge"); checksWritten = 0; }
void ServiceChargeChecking::writeCheck(double amount, int checkNumber) { stringstream output; if (++checksWritten <= CHECK_LIMIT) { output << "Check #" << checkNumber; BankAccount::withdraw(amount, output.str());
} else { output << "Maximum Limit of Checks Reached. Check # " << checkNumber << " bounced"; addStatementLine(output.str(), amount); } }
void ServiceChargeChecking::printStatement() { cout << "Service Charge Checking Statement" << endl; cout << "Name: " << getName() << endl; cout << "Account Number: " << getAccountNumber() << endl << endl; cout << getStatementString() << endl; cout << "Final Balance: " << getBalance() << endl << endl; }
#include "SavingsAccount.h"
SavingsAccount::SavingsAccount(string name, double initialBalance) : BankAccount(name, initialBalance) { interestRate = 0.03; }
SavingsAccount::SavingsAccount(string name, double initialBalance, double interestRate) : BankAccount(name, initialBalance) { this->interestRate = interestRate; }
double SavingsAccount::getInterestRate() { return interestRate; }
void SavingsAccount::printStatement() { BankAccount::deposit(getBalance() * getInterestRate(), "Interest"); cout << "Savings Account Statement" << endl; cout << "Name: " << getName() << endl; cout << "Account Number: " << getAccountNumber() << endl; cout << "Interest Rate: " << getInterestRate() * 100 << "%" << endl << endl; cout << getStatementString() << endl; cout << "Final Balance: " << getBalance() << endl << endl; }
checkingAccount.h
#ifndef SAVINGSACCOUNT_H #define SAVINGSACCOUNT_H
#include "BankAccount.h" #include #include #include
using namespace std;
class SavingsAccount : public BankAccount { public: SavingsAccount(string name, double initialBalance); double getInterestRate(); void printStatement(); SavingsAccount(string name, double initialBalance, double interestRate); private: double interestRate; };
#endif /* SAVINGSACCOUNT_H */
#ifndef CHECKINGACCOUNT_H #define CHECKINGACCOUNT_H
#include "BankAccount.h"
class CheckingAccount : public BankAccount { public: CheckingAccount(string name, double initialBalance); virtual void writeCheck(double amount, int checkNumber) = 0; private:
};
#endif /* CHECKINGACCOUNT_H */
checkingAccount. cpp
#include "checkingAccount.h"
CheckingAccount::CheckingAccount(string name, double initialBalance) : BankAccount(name, initialBalance) {
}
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started