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;
}