User Name Password Register
DaniWeb IT Discussion Community
All
What is DaniWeb IT Discussion Community?
You're currently browsing the C++ section within the Software Development category of DaniWeb, a massive community of 456,555 software developers, web developers, Internet marketers, and tech gurus who are all enthusiastic about making contacts, networking, and learning from each other. In fact, there are 3,528 IT professionals currently interacting right now! Registration is free, only takes a minute and lets you enjoy all of the interactive features of the site.
Please support our C++ advertiser: Programming Forums
Views: 1110 | Replies: 2
Reply
Join Date: Oct 2007
Posts: 5
Reputation: dukedoc is an unknown quantity at this point 
Rep Power: 0
Solved Threads: 0
dukedoc dukedoc is offline Offline
Newbie Poster

Tutorial Cable Bill Program

  #1  
Oct 15th, 2007
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
AddThis Social Bookmark Button
Reply With Quote  
Join Date: Aug 2005
Location: near St Louis, Missouri, USA
Posts: 11,541
Reputation: Ancient Dragon has much to be proud of Ancient Dragon has much to be proud of Ancient Dragon has much to be proud of Ancient Dragon has much to be proud of Ancient Dragon has much to be proud of Ancient Dragon has much to be proud of Ancient Dragon has much to be proud of Ancient Dragon has much to be proud of Ancient Dragon has much to be proud of Ancient Dragon has much to be proud of 
Rep Power: 40
Solved Threads: 972
Moderator
Featured Poster
Ancient Dragon's Avatar
Ancient Dragon Ancient Dragon is offline Offline
Most Valuable Poster

Re: Cable Bill Program

  #2  
Oct 15th, 2007
you can use modf to split a double into its two parts
<<Freelance Programmer>> << Hobby Site>>
Signature links for sale. PM me for details
Reply With Quote  
Join Date: May 2006
Posts: 2,781
Reputation: WaltP is a splendid one to behold WaltP is a splendid one to behold WaltP is a splendid one to behold WaltP is a splendid one to behold WaltP is a splendid one to behold WaltP is a splendid one to behold WaltP is a splendid one to behold 
Rep Power: 15
Solved Threads: 229
Moderator
WaltP's Avatar
WaltP WaltP is offline Offline
Posting Maven

Re: Cable Bill Program

  #3  
Oct 16th, 2007
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.
Got a cough? Go home tonight and eat a whole box of Ex-Lax. Tomorrow, you'll be afraid to cough.
-- Pearl Williams
Reply With Quote  
Reply

Only community members can participate in forum threads. You must register or log in to contribute.

DaniWeb C++ Marketplace
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)

 

Thread Tools Display Modes

Similar Threads
Other Threads in the C++ Forum

All times are GMT -4. The time now is 5:29 am.
Forum system based on vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
©2003 - 2008 DaniWeb® LLC