Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

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

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

The Database Relational Model A Retrospective Review And Analysis

Authors: C. J. Date

1st Edition

0201612941, 978-0201612943

More Books

Students also viewed these Databases questions

Question

How wide are Salary Structure Ranges?

Answered: 1 week ago