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

Recommended Answers

All 2 Replies

you can use modf to split a double into its two parts

Write another function that simply prints out the double values by converting to ints. Then at all places you output the values, call the function instead.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.