C++ Bank Account Error Fix, full code. I am using Dev-C++ toCompile and Execute.
The project is below, I have supplied the code and I'm gettingan error in SavingsAccount.h file.
17  5  C:\Users\adam.brunell\Documents\Classes\C++\Week4\SavingsAccount.h  [Error] 'SavingsAccount::SavingsAccount(std::string, double,double)' is protected
A.Assume
i.SavingsAccount: Assume an Interest Rateof 0.03
ii.HighInterestSavings: Assume an InterestRate of 0.05, Minimum Balance = $2500
iii.NoServiceChargeChecking: Assume anInterest Rate = 0.02, Minimum of Balance = $1000
iv.ServiceChargeChecking – Assume accountservice charge = $10, Maximum number of checks = 5, Service Chargeif customer exceeds the maximum number of checks = $5.
v.NoServicechargeChecking: Assume aninterest rate = 0.02, Minimum Balance = $1000
vi.HighInterestChecking: Assume aninterest rate = 0.05, Minimum Balance = $5000
vii.CertificateOfDepsit: Assume aninterest rate = 0.05, Initial Number of Maturity Months =6
   Â
B.Capitalizethe first letter of the derived class names.
C.Use thefollowing 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()
{
   vectoraccountsList;
      //SavingsAccount( Name, Account number, Balance ) - Assume aninterest rate = 0.03
   accountsList.push_back(new SavingsAccount(\"Bill\", 10200,2500));
      //HighInterestSavings(Name, Account Number, Balance) -- Assume aninterest rate = 0.05, Minimum balance = $2500
   accountsList.push_back(new HighInterestSavings(\"Susan\", 10210,2000));
      //NoServiceChargeChecking(Name, Account Number, Balance) -- Assumean interest rate = 0.02, Minimum balance = $1000
   accountsList.push_back(new NoServiceChargeChecking(\"John\",20100,
                                                   3500));
      //ServiceChargeChecking(Name, Account Number, Balance) -- Assumeaccount service charge = $10, Maximum number of checks = 5, ServiceCharee Excess Number of Checks = $5
   accountsList.push_back(new ServiceChargeChecking(\"Ravi\", 30100,1800));
      //HighIntererestChecking(Name, Account Number, Balance) - Assume aninerest rate = 0.05, Minimum balance = $5000
   accountsList.push_back(new HighInterestChecking(\"Sheila\", 20200,6000));
      //Certificate(name, Account Number, Balance, Interest Rate, Numberof Months) - Assume an initial interest rate = 0.05, Initial Numberof Maturity Months = 6
   accountsList.push_back(new CertificateOfDeposit(\"Hamid\", 51001,18000,
                                               0.075, 18));
   cout <<\"January:\n-------------\" << endl;
   for (int i = 0; i< accountsList.size(); i++)
   {
       accountsList[i]->createMonthlyStatement();
       accountsList[i]->print();
       cout << endl;
   }
   cout <<\"\nFebruary:\n-------------\" << 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 <<\"\nMarch:\n-------------\" << endl;
   for (int i = 0; i< accountsList.size(); i++)
   {
       accountsList[i]->createMonthlyStatement();
       accountsList[i]->print();
       cout << endl;
   }
   System(“pauseâ€);
   return 0;
}
The Expected Outputis:
January:
-------------
Savings account:Bill   ACCT# 10200   Balance:$2575.00
High Interest Savings:Susan    ACCT# 10210   Balance: $2100.00
No Service Charge Check.John   ACCT# 20100   Balance:$3500.00
Service Charge Checking:Ravi   ACCT# 30100   Balance:$1790.00
Higher Interest Checking:Sheila        ACCT#20200   Balance: $6300.00
Certificate of Deposit:Hamid   ACCT# 51001   Balance:$19350.00
February:
-------------
Savings account:Bill   ACCT# 10200   Balance:$2652.25
High Interest Savings:Susan    ACCT# 10210   Balance: $2205.00
No Service Charge Check.John   ACCT# 20100   Balance:$3500.00
Service Charge Checking:Ravi   ACCT# 30100   Balance:$1780.00
Higher Interest Checking:Sheila        ACCT#20200   Balance: $6615.00
Certificate of Deposit:Hamid   ACCT# 51001   Balance:$20801.25
March:
-------------
Savings account:Bill   ACCT# 10200   Balance:$2216.82
High Interest Savings:Susan    ACCT# 10210   Balance: $2315.25
No Service Charge Check.John   ACCT# 20100   Balance:$3000.00
Service Charge Checking:Ravi   ACCT# 30100   Balance:$1270.00
Higher Interest Checking:Sheila        ACCT#20200   Balance: $6420.75
Certificate of Deposit:Hamid   ACCT# 51001   Balance:$22361.34
Press any key to continue . ..
//testdriver.cpp
#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 ofchecks = 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:\n-------------\" << endl;
for (int i = 0; i < accountsList.size(); i++)
{
accountsList[i]->createMonthlyStatement();
accountsList[i]->print();
cout << endl;
}
cout << \"\nFebruary:\n-------------\" << 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 << \"\nMarch:\n-------------\" << endl;
for (int i = 0; i < accountsList.size(); i++)
{
accountsList[i]->createMonthlyStatement();
accountsList[i]->print();
cout << endl;
}
System(\"pause\");
return 0;
}
bankAccount.h
#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 */
//bankAccount.cpp
#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, doubleamount)
{
stringstream output;
 Â
output << setw(60) << left << statement <//.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, stringstatement)
{
if (balance >= amount)
{
balance -= amount;
addStatementLine(statement, amount);
}
else
{
addStatementLine(statement.append(\" Overdraft\"), amount);
}
}
string BankAccount::getStatementString()
{
return statementString;
}
//CertificateOfDeposit.h
#ifndef CERTIFICATEOFDEPOSIT_H
#define CERTIFICATEOFDEPOSIT_H
#include \"bankAccount.h\"
#include
using namespace std;
class CertificateOfDeposit : public bankAccount{
public:
CertificateOfDeposit(string name, double initialBalance, intmaturityMonths);
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 */
//CertificateOfDeposit.cpp
#include \"CertificateOfDeposit.h\"
CertificateOfDeposit::CertificateOfDeposit(string name, doubleinitialBalance, int maturityMonths) : bankAccount(name,initialBalance)
{
this->maturityMonths = maturityMonths;
interestRate = 0.05;
currentCDMonth = 0;
withdrawalPenaltyMonths = 3;
}
CertificateOfDeposit::CertificateOfDeposit(string name, doubleinitialBalance) : 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(), \"MonthlyInterest\");
if (getCurrentCDMonth() < getMaturityMonths())
{
currentCDMonth++;
}
else
withdraw();
}
void CertificateOfDeposit::printStatement()
{
cout << \"Certificate of Deposit Statement\" <cout << \"Name: \" << getName() << endl;
cout << \"Account Number: \" << getAccountNumber()<< endl;
cout << \"Interest Rate: \" << getInterestRate() * 100<< \"%\" << endl;
cout << \"Maturity Month: \" << getMaturityMonths()<< \", Current Month: \" << getCurrentCDMonth() <cout << \"Early Withdrawal Penalty: \" <cout << getStatementString() << endl;
cout << \"Final Balance: \" << getBalance() << endl<< endl;
}
//HighInterestChecking.h
#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 */
//HighInterestChecking.cpp
#include \"HighInterestChecking.h\"
HighInterestChecking::HighInterestChecking(string name, doubleinitialBalance) : NoServiceChargeChecking(name, initialBalance,5000, 0.05)
{
}
void HighInterestChecking::printStatement()
{
bankAccount::deposit(getBalance() * getInterestRate(),\"Interest\");
cout << \"High Interest Checking Statement\" <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;
}
//HighInterestSavings.h
#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 */
//HighInterestSavings.cpp
#include \"HighInterestSavings.h\"
HighInterestSavings::HighInterestSavings(string name, doubleinitialBalance) : SavingsAccount(name, initialBalance, 0.05)
{
minimumBalance = 2500;
}
int HighInterestSavings::getMinimumBalance()
{
return minimumBalance;
}
void HighInterestSavings::withdraw(double amount, stringstatement)
{
if (amount + getMinimumBalance() <= getBalance())
{
bankAccount::withdraw(amount, statement);
}
else
{
addStatementLine(statement.append(\" Overdraft. Below MinimumBalance.\"), amount);
}
}
void HighInterestSavings::withdraw(double amount)
{
withdraw(amount, \"Withdrawal\");
}
void HighInterestSavings::printStatement()
{
bankAccount::deposit(getBalance() * getInterestRate(),\"Interest\");
cout << \"High Interest Savings Account Statement\" <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;
}
//NoServiceChargeChecking.h
#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, intminBalance, double interestRate);
private:
double interestRate;
int minimumBalance;
};
#endif /* NOSERVICECHARGECHECKING_H */
//NoServiceChargeChecking.cpp
#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, intcheckNumber)
{
stringstream output;
output << \"Check #\" << checkNumber;
withdraw(amount, output.str());
}
void NoServiceChargeChecking::withdraw(double amount, stringstatement)
{
if (amount + getMinimumBalance() <= getBalance())
{
bankAccount::withdraw(amount, statement);
}
else
{
addStatementLine(statement.append(\" Overdraft. Below MinimumBalance.\"), amount);
}
}
void NoServiceChargeChecking::withdraw(double amount)
{
withdraw(amount, \"Withdrawal\");
}
void NoServiceChargeChecking::printStatement()
{
bankAccount::deposit(getBalance() * getInterestRate(),\"Interest\");
cout << \"No Service Charge Checking Statement\" <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;
}
//checkingAccount.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, doubleinitialBalance) : bankAccount(name, initialBalance)
{
}
//SavingsAccount.h
#ifndef SAVINGSACCOUNT_H
#define SAVINGSACCOUNT_H
#include \"bankAccount.h\"
#include
#include
using namespace std;
class SavingsAccount : public bankAccount
{
public:
SavingsAccount(string name, double initialBalance);
double getInterestRate();
void printStatement();
protected:
SavingsAccount(string name, double initialBalance, doubleinterestRate);
private:
double interestRate;
};
#endif /* SAVINGSACCOUNT_H */
//SavingsAccount.cpp
#include \"SavingsAccount.h\"
SavingsAccount::SavingsAccount(string name, doubleinitialBalance) : bankAccount(name, initialBalance)
{
interestRate = 0.03;
}
SavingsAccount::SavingsAccount(string name, doubleinitialBalance, 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;
}
//ServiceChargeChecking.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 */
//ServiceChargeChecking.cpp
#include \"ServiceChargeChecking.h\"
#include
#include
using namespace std;
ServiceChargeChecking::ServiceChargeChecking(string name, doubleinitialBalance) : CheckingAccount(name, initialBalance)
{
bankAccount::withdraw(SERVICE_CHARGE, \"Service Charge\");
checksWritten = 0;
}
void ServiceChargeChecking::writeCheck(double amount, intcheckNumber)
{
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\" <cout << \"Name: \" << getName() << endl;
cout << \"Account Number: \" << getAccountNumber()<< endl << endl;
cout << getStatementString() << endl;
cout << \"Final Balance: \" << getBalance() << endl<< endl;
}
Receiving Error in SavingsAccount.h
17  5  C:\Users\adam.brunell\Documents\Classes\C++\Week4\SavingsAccount.h  [Error] 'SavingsAccount::SavingsAccount(std::string, double,double)' is protected