In: Computer Science
Write a program In C 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
Learning Objectives
In this assignment, you will:
Requirements
Your 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
Code:
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>
//global variables
int account,gb;
//function to get account and gb
void getData()
{
printf("\nEnter account number and GB used (one space between data): ");
scanf("%d%d",&account,&gb);
}
//function to conpute charges per gb
float computeCharges(int gb)
{
//conditions for the gb rate
if(gb>0 && gb<=40)
{
return(gb*0.08);
}
else if(gb>40 && gb<=70)
{
return(gb*0.07);
}
else if(gb>70 && gb<=110)
{
return(gb*0.05);
}
return(gb*0.04);
}
//function to print account information
void printAccountInfo(int account,int gb, float charges)
{
printf("\nAccount Number:%d\t GB Used:\t%d\tCharge:\t%0.2f",account,gb,charges);
}
//function to print all the information
void printTotals(int totalAcc, int totalGB, float totalCharges)
{
printf("\nTotal Accounts=\t%d",totalAcc);
printf("\nTotal GB Used=\t%d",totalGB);
printf("\nTotal Charges=\t%0.2f",totalCharges);
}
//main function
int main()
{
//local variables for main function
//character variable for repeatation
char ch='y';
//variables to calculate total account,gb and charges
int totalAcc=0,totalGB=0;
float totalCharges=0,charge;
//do while loop
do{
//calling function to get account and gb
getData();
//incrementing number of accounts
totalAcc=totalAcc+1;
//calling function for calculating the charge
charge=computeCharges(gb);
//incrementing the totalCharge by adding charge
totalCharges=totalCharges+charge;
//incrementing the totalGB by adding gb
totalGB=totalGB+gb;
//calling function to print account information
printAccountInfo(account,gb,charge);
//if user wants to repeat the procedure
printf("\nDo you wish to continue? (y/n)");
scanf(" %c",&ch);
}while(ch=='y' || ch=='Y');//condition for the repetition
//function to print all the information
printTotals(totalAcc,totalGB,totalCharges);
return 0;
}//end of the program
(i) The above program is completly based upon the requirements mentioned in the case study. Two global variables account and gb are declared at the top of the code. The function getData prompts for giving the account number and gb used. Both of them are stored in the global variable account and gb.
(ii) The function computeCharges calculates the charge of the internet usage as conditions mentioned in the case study. In those conditions directly return statements are written. For the gb above 110 there is no conditon and the value is directly returned from the function.
(iii) printAccountinfo function prints the details of the global variable which is used single time and the function printTotals print the total number of accounts, total gb used and total charges which is passed as parameter from the main function.
(iv)In the main function local variables for calculating totals and for contiuation a char variable is declared which is initialized to 'y'. Here do-while loop is used for first time execution without any condition checkng. In the conditon of do while loop the value of ch is checked with 'y' and 'Y'. In the loop firstly the getData function is called for taking inputs from the user and the totalAcc is incremented by 1.
(v) After that the function for computing charges is called where the return value is stored in charge value and it is added to totalCharge variable and at the same time gb is added to the totalGB. The function printsAcountInfo is called for printing account details. At last the user is asked if he/she wants to continue the execution where the character is fetched using char variable. After completing the loop the function printTotals is called.
Output:
Screenshot of the code: