In: Computer Science
Subject is C++
Write a program to compute internet charges according to a rate schedule.
The rate schedule is as follows:
$0.08 per GB for usage between 0 and 40 GB, inclusive
$0.07 per GB for usage between 41 GB and 70 GB, inclusive
$0.05 per GB for usage between 71 GB and 110 GB, inclusive
$0.04 per GB for usage greater than 110 GB
code must use these four functions, using these names (in addition to main):
Requirements for the getData Function
| 
 Purpose:  | 
 This function prompts the user for an account number (integer) and a GB value (integer). It passes these values back to main via two output parameters.  | 
| 
 Output Parameters:  | 
  | 
| 
 Algorithm:  | 
 Prompt and read. There must be only one prompt, and the user must enter the data on one line with a space between each value.  | 
| 
 Return value:  | 
 None  | 
Requirements for the computeCharges Function
| 
 Purpose:  | 
 This function computes the charges for one transaction. It uses one input parameter (GB value as an integer) and a return value (amount of the charge, which may include decimals).  | 
| 
 Input Parameter:  | 
  | 
| 
 Algorithm:  | 
 Use a selection structure to determine the charge per GB, using the above rate schedule. Calculate the charges using multiplication.  | 
| 
 Return value:  | 
 Transaction charges (may include decimals)  | 
Requirements for the printAccountInfo Function
| 
 Purpose:  | 
 This function displays the information for one account transaction to the screen.  | 
| 
 Input Parameters:  | 
  | 
| 
 Algorithm:  | 
 Print, using appropriate spacing and formatting. The transaction charges must display with two decimal places.  | 
| 
 Return value:  | 
 None  | 
Requirements for the printTotals Function
| 
 Purpose:  | 
 This function displays totals to the screen at the end of the program.  | 
| 
 Input Parameters:  | 
  | 
| 
 Algorithm:  | 
 Print, using appropriate spacing and formatting. The sum of transaction charges must display with two decimal places.  | 
| 
 Return value:  | 
 None  | 
Requirements for main:
Be sure the first prompt is for actual data, not the continuation response.
IMPORTANT NOTE ABOUT THIS LOOP – You will encounter the situation where there is a scanf for a number immediately before the scanf for the Y or N. We have seen this problem before…
Sample Run
Enter account number and GB used (one space between data): 12345
80
Account number: 12345        GB
Used:    
80       
Charge:     4.00
Do you wish to continue? (y/n) y
Enter account number and GB used (one space between data): 98765
25
Account number: 98765        GB
Used:    
25       
Charge:     2.00
Do you wish to continue? (y/n) Y
Enter account number and GB used (one space between data): 25413
120
Account number: 25413        GB
Used:   
120       
Charge:     4.80
Do you wish to continue? (y/n) Y
Enter account number and GB used (one space between data): 42598
50
Account number: 42598        GB
Used:    
50       
Charge:     3.50
Do you wish to continue? (y/n) n
Total accounts =       
4
Total GB Used =       275
Total Charges =     14.30
Here is the code:
#include <iostream>
#include <iomanip>
using namespace std;
void getData (int &account, int &usage) {
    cout << "Enter account number and GB used (one space between data): ";
    scanf ("%d %d", &account, &usage);
    while ((getchar()) != '\n');
}
double computeCharges (int usage) {
    if (usage <= 40)
        return (0.08 * usage);
    else if (usage <= 70)
        return (usage * 0.07);
    else if (usage <= 110)
        return (usage * 0.05);
    else
        return (usage * 0.04);
}
void printAccountInfo (int account, int usage, double charges) {
    cout << "Account number: " << account << "\tGB Used:\t" << usage << "\tCharge: \t";   
    cout << std::setprecision(2) << std::fixed << charges << endl;
}
void printTotals (int totalAccounts, int totalUsage, double totalCharges) {
    cout << "Total accounts = \t" << totalAccounts << endl;
    cout << "Total GB Used = \t" << totalUsage << endl;
    cout << std::setprecision(2) << std::fixed;
    cout << "Total Charges = \t" << totalCharges << endl;
}
int main()
{
    int account, usage, totalUsage = 0, noAccounts = 0;
    double charges, totalCharges = 0;
    char yn;
    
    do {
        getData (account, usage);    
        charges = computeCharges (usage);
        printAccountInfo (account, usage, charges);
        cout << "Do you wish to continue? (y/n)";
        scanf ("%c", &yn);
        yn = tolower (yn);
        
        noAccounts++;
        totalUsage += usage;
        totalCharges += charges;
    } while (yn == 'y');
    
    printTotals (noAccounts, totalUsage, totalCharges);
    return 0;
}