I have this program for computing an individual's cable bill, then summing each column of values and calculating the average of each column. I got a 100 on the assignment, the program works fine, but this time we have to use functions. I created my functions and the program, again, works fine. Only problem is I have to convert money values into integers for dollars and cents and print them explicitly.
My problem is I don't know where to keep money values in doubles and when to actually convert them to integers. Ugh, this is so frustrating.
int main() {
// Constants
double UTILITYFEE = 3.00; // convert into cents
double TAX = 0.0012; // convert into cents
// Input Variables
string CustomerName; // Customer's first name
string AccountNo; // Customer's last name
string Date; // Date
double Outlets; // Number of Outlets
char Cable; // Type of cable service
ifstream In; // input stream
ofstream Out; // output stream
// Local Variables
int NumCustomers; // number of customers
double ServiceCharge; // charge for N, B, or P
double RegTax; // tax on services
double OutletCharge; // number of outlets over one
int TotalOutletCharge; // total charge of outlets
int TotalCustomerCharge; // total charge of services for customer
int TotalServiceCharge; // total charge of all services
int TotalUtilityCharge; // total charge of utility tax
int TotalTax; // total regulatory tax
int TotalFee; // total charged to customer
double AverageOutlet; // average number of outlets
double AverageService; // average service charge
double AverageUtility; // average utility fee
double AverageTax; // average regulatory tax
double AverageFee; // average total fee
// Initialize Variables
NumCustomers = 0;
TotalOutletCharge = 0;
TotalCustomerCharge = 0;
TotalServiceCharge = 0;
TotalUtilityCharge = 0;
TotalTax = 0;
TotalFee = 0;
AverageOutlet = 0;
AverageService = 0;
AverageUtility = 0;
AverageTax = 0;
AverageFee = 0;
// Open input and output file streams
In.open("CableRecs.txt");
Out.open("CableBills.txt");
Out << fixed << showpoint; // enables setprecision for output file
// Print error message if input file not found
if (In.fail()) {
cout << "Input file not found" << endl;
cout << "Exiting..." << endl;
return EXIT_FAILURE;
}
// Print output header
PrintHeader( Out );
// Priming Read
In.ignore(35, '\n');
getline(In, CustomerName, '\t');
getline(In, AccountNo, '\t');
getline(In, Date, '\t');
In >> Outlets >> Cable;
while ( In ) {
NumCustomers++; // count number of customers
CalcOutletCharge( Outlets, OutletCharge ); // calculate outlet charge
SumTotal( OutletCharge, TotalOutletCharge ); // sum total outlet charge
SumTotal( UTILITYFEE, TotalUtilityCharge ); // sum total utility fee
PickService( In, Cable, ServiceCharge ); // pick service plan
CalcRegTax( ServiceCharge, OutletCharge, TAX, RegTax ); // calculate regulatory tax
CalcTotalCustomerCharge( ServiceCharge, OutletCharge, UTILITYFEE, RegTax, TotalCustomerCharge ); // calculate total customer charges
SumTotal( RegTax, TotalTaxDollars, TotalTaxCents ); // sum total tax
SumTotal( TotalCustomerCharge, TotalFee ); // sum total customer charges
SumTotal( ServiceCharge, TotalServiceCharge ); // sum total service charges
PrintResults( Out, CustomerName, AccountNo, Date, OutletCharge, ServiceCharge, UTILITYFEE, RegTax, TotalCustomerCharge ); // print results to output
// get new line of input
getline(In, CustomerName, '\t');
getline(In, AccountNo, '\t');
getline(In, Date, '\t');
In >> Outlets >> Cable;
}
CalcAverage( TotalOutletCharge, NumCustomers, AverageOutlet ); // average outlet charge
CalcAverage( TotalServiceCharge, NumCustomers, AverageService ); // average service charge
CalcAverage( TotalUtilityCharge, NumCustomers, AverageUtility ); // average utility charge
CalcAverage( TotalTax, NumCustomers, AverageTax ); // average tax charge
CalcAverage( TotalFee, NumCustomers, AverageFee ); // average fee charge
// print rest of output file
PrintCloser( Out, TotalOutletCharge, TotalServiceCharge, TotalUtilityCharge,
TotalTax, TotalFee, AverageOutlet, AverageService, AverageUtility,
AverageTax, AverageFee );
return EXIT_SUCCESS;
}
/////////////////////////////////////////////////////////////////////////// PrintHeader
// Prints header of output file
//
// Parameters:
// Out file stream to be printed to
//
// Returns: header of output file
//
// Pre: ofstream opened
// Post: header of output file printed
//
void PrintHeader( ofstream& Out)
{
Out << "Programmer: " << "Ryan Dougherty" << endl;
Out << "CS 1044 Project 4 Fall 2007" << endl << endl;
Out << "Adufia Customer Billing Report:" << endl << endl;
Out << left;
Out << setw(24) << "Customer"
<< setw(18) << "Account"
<< setw(14) << "Billing"
<< setw(8) << "Outlets"
<< setw(8) << "Service"
<< setw(8) << "Utility"
<< setw(11) << "Regulatory"
<< setw(6) << "Total" << endl;
Out << setw(24) << "Name"
<< setw(18) << "Number"
<< setw(14) << "Date"
<< setw(8) << "Charge"
<< setw(8) << "Plan"
<< setw(8) << "Tax"
<< setw(11) << "Tax"
<< setw(6) << "Fee" << endl;
Out << "________________________________________________________________________________________________"
<< endl;
}
/////////////////////////////////////////////////////////////////////////// CalcOutletCharge
// Calculates charge for outlets used over 1
//
// Parameters:
// int number of outlets used
//
// Returns: charge for outlets in cents
//
// Pre: outlets read from input file
// Post: outlet charge stored into OutletCharge
//
void CalcOutletCharge( double Outlets, double& OutletCharge )
{
OutletCharge = (Outlets - 1.0); // will calculate outlet charge in cents
}
/////////////////////////////////////////////////////////////////////////// SumTotal
// keeps a running total of a sum of numbers
//
// Parameters:
// int number to be summed
// int& sum of the numbers
//
// Returns: sum stored into variable
//
// Pre: sum is initialized, number to be summed has value
// Post: sum is updated
//
void SumTotal( double Number, double& Sum )
{
int Sum;
int Temp;
Temp = Number * 100;
Sum = Sum + Number;
Dollars = Sum / 100;
Cents = Sum % 100;
}
/////////////////////////////////////////////////////////////////////////// PickService
// picks the service plan/charge for each customer based on a char value
//
// Parameters:
// ifstream& for if statement
// char determines service plan type
// int& service plan charge, in cents
//
// Returns: service plan charge in cents
//
// Pre: char value is read from input file
// Post: service plan is determined for customer
//
void PickService( ifstream& In, char Cable, double& ServiceCharge )
{
int temp;
if (Cable == 'N')
ServiceCharge = 14.95; // converts service charge to cents
else if (Cable == 'B')
ServiceCharge = 34.95; // converts service charge to cents
else if (Cable == 'P')
ServiceCharge = 69.95; // converts service charge to cents
}
/////////////////////////////////////////////////////////////////////////// CalcRegTax
// calculates regulatory tax for customer
//
// Parameters:
// int charge for service
// int charge for outlets
// int tax applied
// int& regulatory tax calculated
//
// Returns: regulatory tax to be added to customer's bill
//
// Pre: all variables have values stored, regtax intialized
// Post: regtax given new value for customer
//
void CalcRegTax(double ServiceCharge, double OutletCharge, double TAX, double& RegTax)
{
RegTax = (ServiceCharge + OutletCharge) * TAX; // tax is converted to cents
}
/////////////////////////////////////////////////////////////////////////// CalcTotalCustomerCharge
// calculates total bill for customer
//
// Parameters:
// int service charge in cents
// int outlet charge in cents
// int regulatory taxin cents
// int utility fee in cents
// int& total charge for customer
//
// Returns: total charge for individual customer
//
// Pre: all variables have values stored, totalcustomercharge initialized
// Post: totalcustomercharge stored with new value
//
void CalcTotalCustomerCharge( double ServiceCharge, double OutletCharge, double UTILITYFEE, double RegTax, double& TotalCustomerCharge )
{
TotalCustomerCharge = ServiceCharge + OutletCharge + UTILITYFEE + RegTax;
}
/////////////////////////////////////////////////////////////////////////// PrintResults
// prints results for each customer
//
// Parameters:
// ofstream& output file stream
//
// Returns: printed values of results
//
// Pre: all variables have values
// Post: results printed to output file
//
void PrintResults( ofstream& Out, string CustomerName, string AccountNo, string Date, double OutletCharge, double ServiceCharge, double UTILITYFEE, double RegTax, double TotalCustomerCharge )
{
Out << left;
Out << setw(24) << CustomerName;
Out << setw(18) << AccountNo;
Out << setw(15) << Date;
Out << setw(8) << setprecision(2) << OutletCharge;
Out << setw(8) << setprecision(2) << ServiceCharge;
Out << setw(8) << setprecision(2) << UTILITYFEE;
Out << setw(11) << setprecision(2) << RegTax;
Out << setw(6) << setprecision(2) << TotalCustomerCharge << endl;
}
/////////////////////////////////////////////////////////////////////////// CalcAverage
// calculates the average of a sum and the number of customers
//
// Parameters:
// int total to be averaged
// int number of customers
// int& average value in cents
//
// Returns: average value in cents
//
// Pre: all variables have values
// Post: average is calculated and stored into average
//
void CalcAverage( double Total, int Divisor, double& Average )
{
Average = Total / Divisor;
}
/////////////////////////////////////////////////////////////////////////// PrintCloser
// prints the rest of the output file
//
// Parameters:
// ofstream& output file stream
//
// Returns: rest of output file
//
// Pre: all variables have values
// Post: all of output file is printed
//
void PrintCloser( ofstream& Out, double TotalOutletCharge, double TotalServiceCharge, double TotalUtilityCharge, double TotalTax, double TotalFee, double AverageOutlet, double AverageService, double AverageUtility, double AverageTax, double AverageFee )
{
Out << "________________________________________________________________________________________________"
<< endl;
Out << left;
Out << setw(56) << "Totals:"
<< setw(8) << setprecision(2) << TotalOutletCharge
<< setw(8) << setprecision(2) << TotalServiceCharge
<< setw(8) << setprecision(2) << TotalUtilityCharge
<< setw(11) << setprecision(2) << TotalTax
<< setw(6) << setprecision(2) << TotalFee << endl;
Out << setw(56) << "Averages:"
<< setw(8) << setprecision(2) << AverageOutlet
<< setw(8) << setprecision(2) << AverageService
<< setw(8) << setprecision(2) << AverageUtility
<< setw(11) << setprecision(2) << AverageTax
<< setw(6) << setprecision(2) << AverageFee << endl;
}
HELP :-/