DaniWeb IT Discussion Community

DaniWeb IT Discussion Community (http://www.daniweb.com/forums/index.php)
-   C++ (http://www.daniweb.com/forums/forum8.html)
-   -   Cable Bill Program (http://www.daniweb.com/forums/thread93141.html)

dukedoc Oct 15th, 2007 10:05 pm
Cable Bill Program
 
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 :-/

Ancient Dragon Oct 15th, 2007 10:45 pm
Re: Cable Bill Program
 
you can use modf to split a double into its two parts

WaltP Oct 16th, 2007 9:54 am
Re: Cable Bill Program
 
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.


All times are GMT -4. The time now is 4:54 pm.

Forum system based on vBulletin Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
©2003 - 2009 DaniWeb® LLC