C++ Bank account

Receiving error,
24 72 C:\Users\adam.brunell\Documents\Classes\C++\Week4\testdriver.cpp [Error] no matching function for call to 'HighInterestSavings::HighInterestSavings(const char [6], int, int)'


The testdriver.cpp can't be changed.

//testdriver.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <iostream>
#include <iomanip>
#include <vector>
 
#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<BankAccount *> 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:\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;
}


Everything else can,

bankAccount.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#ifndef BANKACCOUNT_H
#define BANKACCOUNT_H

#include <iostream>

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include "BankAccount.h"
#include <iostream>
#include <sstream>
#include <iomanip>

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;
}


//CertificateOfDeposit.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#ifndef CERTIFICATEOFDEPOSIT_H
#define CERTIFICATEOFDEPOSIT_H

#include "bankAccount.h"
#include <iostream>

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 */ 


//CertificateOfDeposit.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#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;
}
Last edited on
//HighInterestChecking.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HIGHINTERESTCHECKING_H
#define HIGHINTERESTCHECKING_H

#include "NoServiceChargeChecking.h"

#include <iostream>

using namespace std;

class HighInterestChecking : public NoServiceChargeChecking {
public:
HighInterestChecking(string name, double initialBalance);
void printStatement();
private:
};

#endif /* HIGHINTERESTCHECKING_H */ 


//HighInterestChecking.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#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;
}

//HighInterestSavings.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef HIGHINTERESTSAVINGS_H
#define HIGHINTERESTSAVINGS_H

#include "SavingsAccount.h"
#include <iostream>

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#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;
}

//NoServiceChargeChecking.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#ifndef NOSERVICECHARGECHECKING_H
#define NOSERVICECHARGECHECKING_H

#include "checkingAccount.h"

#include <iostream>

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 */ 


//NoServiceChargeChecking.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include "NoServiceChargeChecking.h"
#include <iostream>
#include <iomanip>

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;
}


//checkingAccount.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#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

1
2
3
4
5
6
#include "checkingAccount.h"

CheckingAccount::CheckingAccount(string name, double initialBalance) : BankAccount(name, initialBalance)
{

}

//SavingsAccount.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef SAVINGSACCOUNT_H
#define SAVINGSACCOUNT_H

#include "BankAccount.h"
#include <iostream>
#include <iomanip>

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 */ 

Last edited on
//SavingsAccount.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#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;
}

//ServiceChargeChecking.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef SERVICECHARGECHECKING_H
#define SERVICECHARGECHECKING_H

#include "checkingAccount.h"
#include <string>

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include "ServiceChargeChecking.h"
#include <sstream>
#include <iostream>

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;
}
Last edited on
Line 24 of test driver is inputting three parameters and your constructor of your class is expected only two parameters.

Can you supply code example to resolve this, my brain is a little fried from doing this and running it?
Assuming you are writing your program to make it work with the "testdriver.cpp"
Then the below code from your HighInterestChecking is not correct.

1
2
3
4
HighInterestChecking::HighInterestChecking(string name, double initialBalance) : NoServiceChargeChecking(name, initialBalance, 5000, 0.05)
{

}


The code in your testdriver.cpp on lines 24 and 33 look like this.


1
2
	//HighInterestSavings(Name, Account Number, Balance) -- Assume an interest rate = 0.05, Minimum balance = $2500
    accountsList.push_back(new HighInterestSavings("Susan", 10210, 2000));



Look close. You should be able to spot the issue.
Topic archived. No new replies allowed.