C++ Bank Account Error Fix, full code. I am using Dev-C++ to Compile and Execute. The project...
80.2K
Verified Solution
Question
Programming
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
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 <
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 << \"Account Number: \" << getAccountNumber()<< endl;
cout << \"Interest Rate: \" << getInterestRate() * 100<< \"%\" << endl;
cout << \"Maturity Month: \" << getMaturityMonths()<< \", Current Month: \" << getCurrentCDMonth() <
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 << \"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 << \"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 << \"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 << \"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
Answer & Explanation Solved by verified expert
Get Answers to Unlimited Questions
Join us to gain access to millions of questions and expert answers. Enjoy exclusive benefits tailored just for you!
Membership Benefits:
- Unlimited Question Access with detailed Answers
- Zin AI - 3 Million Words
- 10 Dall-E 3 Images
- 20 Plot Generations
- Conversation with Dialogue Memory
- No Ads, Ever!
- Access to Our Best AI Platform: Flex AI - Your personal assistant for all your inquiries!
Other questions asked by students
StudyZin's Question Purchase
1 Answer
$0.99
(Save $1 )
One time Pay
- No Ads
- Answer to 1 Question
- Get free Zin AI - 50 Thousand Words per Month
Unlimited
$4.99*
(Save $5 )
Billed Monthly
- No Ads
- Answers to Unlimited Questions
- Get free Zin AI - 3 Million Words per Month
*First month only
Free
$0
- Get this answer for free!
- Sign up now to unlock the answer instantly
You can see the logs in the Dashboard.