Hi, experts:
I am very to c++, and here is a program that should:
• create a Customer object– (although you will only be using one constructor here, be sure and test all three)
• Display the Customer’s info using the ‘get’ functions
• Ask the user how many months will be simulated
• For each of N months (the number of months the user desired):
Ask the user to provide all purchase amounts for the customer
Ask the user to provide a payment for the customer
Output the current balance for the customer
Display the Customer’s info using the display function
My question to my code is, why my out put for checking whether the customer is VIP or not is always incorrect?
To be called a VIP, the balance must be less than 0, which means the customer had prepaid some money on its account.
On the attachment, it is the original requirement for this project. I am begging for fixing this problem.
This is my Customer.h
#include<iostream>
using namespace std;
class Customer{
private:
int accountNo;
bool VIP;
double creditLimit;
double balance;
public:
Customer();
Customer(int num, bool vp = false, double creditLine = 500.00);
Customer(int id, double initBal, bool vp = true, double creditLine = 500.00);
//sets
void setAcct(int aNo);
void setCredit(double amount);
void setVIP(bool status);
void setBalance(double bal);
//gets
int getAcctNo() const;
double getCreditLimit() const;
bool getVIP() const;
double getBal() const;
double availCredit() const;
void moreCredit(double amount);
bool makePurchase(double amount);
void display(ostream& out) const;
void makePayment(double amount);
};
And this is my Customer.cpp
#include "Customer.h"
using namespace std;
Customer::Customer(){
}
//
Customer::Customer(int num, bool vp, double creditLine){
setAcct(num);
setVIP(vp);
setCredit(creditLine);
}
//
Customer::Customer(int id, double initBal, bool vp, double creditLine){
balance = initBal;
setAcct(id);
setVIP(vp);
setCredit(creditLine);
}
void Customer::setAcct(int aNo){
accountNo = (aNo >= -1) ? aNo : -1;
}
void Customer::setCredit(double amount){
creditLimit = (amount == 500.00) ? amount : 0.00;
}
void Customer::setVIP(bool status){
if(getBal() < 0)
VIP = true;
else
VIP = false;
}
void Customer::setBalance(double bal){
balance = bal;
}
//
int Customer::getAcctNo() const{
return accountNo;
}
double Customer::getCreditLimit() const{
return creditLimit;
}
bool Customer::getVIP() const{
return VIP;
}
double Customer::getBal() const{
return balance;
}
double Customer::availCredit() const{
return getCreditLimit() - getBal();
}
void Customer::moreCredit(double amount){
creditLimit = creditLimit + amount;
}
bool Customer::makePurchase(double amount){
double temp1;
bool temp2 = false;
if(VIP == true){
temp1 = availCredit() + 100.00;
if(availCredit() >= amount){
balance = balance + amount;
return !temp2;
}
else if(temp1 >= amount){
balance = balance + amount;
return !temp1;
return VIP = false;
}
else
return temp2;
}
else{
if(availCredit() >= amount){
balance = balance + amount;
return !temp2;
}
else
return temp2;
}
}
void Customer::display(ostream& out) const{
//
out << "The current account number is " << accountNo << endl;
out << "The current balance in this account is " << balance << endl;
out << "The current account credit limit is " << creditLimit << endl;
if(VIP == true)
out << "You are a VIP member";
else
out << "You are not a VIP member";
}
void Customer::makePayment(double amount){
double temp;
temp = balance - amount;
if(getBal() < 0)
VIP = true;
else
VIP = false;
}
And this is my CustomerApp.cpp
#include "Customer.h"
#include <iostream>
#include <cctype>
#include <string>
#include <cstdlib>
using namespace std;
int getSelection(string message);
int main(){
//local varaibles
int aAnswer, payment;
double bal = 0.00;
double spendings, initialBal;
cout << "Project 4" << endl << endl
<< "Please enter an account number: ";
cin >> aAnswer;
Customer newCustomer(aAnswer, bal);
int numberOfMonth, monthlyNumberOfSpendings;
char ans;
bool temp = true;
initialBal = newCustomer.getBal();
do{
//six options
cout << "\n What would you like to do ?" << endl
<< "\n 1) Get account number"
<< "\n 2) Get balance"
<< "\n 3) Get credit limit"
<< "\n 4) Check VIP status"
<< "\n 5) Running a simulation"
<< "\n 6) Overall information"
<< "\n 7) Exit";
//switch statment
switch(getSelection("\n Selection(1 to 8): ")){
//1) get account number
case 1:
cout << endl << "The account number is " << newCustomer.getAcctNo();
break;
//2) get balance
case 2:
cout << endl << "The current balance in this account is " << newCustomer.getBal();
break;
//3) get credit limit
case 3:
cout << endl << "The current account credit limit is " << newCustomer.getCreditLimit();
break;
//4) check vip
case 4:
if(newCustomer.getVIP() == true)
cout << endl << "The current customner is a VIP member";
else
cout << endl << "The current customner is not a VIP member";
break;
//5) simulations
case 5:
cout << endl << "Please enter number of the month that wants to be simulated: ";
cin >> numberOfMonth;
for (int i = 0; i < numberOfMonth; i++){
cout << endl << "Please enter number of purchases: ";
cin >> monthlyNumberOfSpendings;
for(int j = 0; j < monthlyNumberOfSpendings; j++){
cout << endl << "Please enter the amounts: ";
cin >> spendings;
if (newCustomer.makePurchase(spendings * 1.00) == true){
newCustomer.setBalance(initialBal);
initialBal = initialBal + spendings * 1.00;
}
else
cout << "You have reached your credit line, and you current"
<< "balance is " << newCustomer.getBal() << "Are you going "
<< "to pay your current balance? ";
cin >> ans;
if((ans == 'Y')||(ans == 'y')){
cout << endl << "Please enter the amount that you want to pay: ";
cin >> payment;
initialBal = initialBal - payment * 1.00;
if(newCustomer.getBal() < 0)
newCustomer.setVIP(true);
}
}
}
newCustomer.setBalance(initialBal);
if(temp == false){
cout << endl << "The cerrent balance is " << newCustomer.getBal() << endl
<< "Are you going to pay your current balance? ";
cin >> ans;
if((ans == 'Y')||(ans == 'y')){
cout << endl << "Please enter the amount that you want to pay: ";
cin >> payment;
initialBal = initialBal - payment * 1.00;
if(newCustomer.getBal() < 0)
newCustomer.setVIP(true);
}
}
break;
//6)
case 6:
cout << endl;
newCustomer.display(cout);
break;
//7)
case 7:
return 0;
}
cout << endl;
cin.ignore(100, '\n');
}while(true);
}
int getSelection(string message) {
string input;
char* pointed;
int selectedOption;
do {
cout << message;
getline(cin, input);
selectedOption = (int)(strtol(input.c_str(),&pointed,10));
if (*pointed != 0 || selectedOption < 1 || selectedOption > 7) {
cout << "Invalid selection(should be 1 to 7): '" << input << "'. Please try again." << endl;
}
}while (*pointed != 0 || selectedOption < 1 || selectedOption > 7);
return selectedOption;
}