/*
* Sara Sprenkle 10/13/04
* example.c
*
* Example program: calculates the weekly salary for employees, given
* a file of employee ids, payrate, and hours worked
*
* Step 4: doing input/output, complete main function
*/
#include<stdio.h>
/*
Constants for overtime:
Get paid time and a half for working more than 40 hours
*/
#define OVERTIME_HOURS 40
#define OVERTIME_RATE 1.5
/*
Constants for double overtime:
Get paid double for working more than 60 hours
*/
#define DOUBLE_OVERTIME_HOURS 60
#define DOUBLE_OVERTIME_RATE 2
/*
* This function calculates and returns the salary for an employee.
*/
double calculateSalary( float pay_rate, float hours ) {
int overtime_hours;
// don't expect hours to be less than 0, but just in case...
if( hours < 0 ) {
return 0;
}
// handles the normal case
if( hours <= OVERTIME_HOURS ) {
return hours * pay_rate;
}
// at this point, we know that we must deal with overtime
if( hours <= DOUBLE_OVERTIME_HOURS ) {
overtime_hours = hours - OVERTIME_HOURS;
return OVERTIME_RATE * pay_rate * overtime_hours + pay_rate * OVERTIME_HOURS;
}
// we're in the case with double overtime
overtime_hours = hours - OVERTIME_HOURS;
return DOUBLE_OVERTIME_RATE * pay_rate * overtime_hours + pay_rate * OVERTIME_HOURS;
}
int main() {
FILE *inptr;
double pay_rate, hours;
int employee_id;
/* value returned by fscanf, catch end of file */
int error;
double salary;
/* open input file */
inptr = fopen( "employee.dat", "r");
if( inptr == NULL ) {
fprintf( stderr, "Error opening file 'employee.dat'\n");
exit(-1);
}
/* print header */
printf("EMPLOYEE PAY\n\n");
printf("Employee_ID Pay Rate Hours Salary\n");
printf("----------- -------- ----- ------------\n");
/* read data from input file (employee_id, pay_rate, hours_worked) */
error = fscanf( inptr, "%d %lf %lf", &employee_id, &pay_rate, &hours);
while( error != EOF ) {
/* calculate the salary for the employee */
salary = calculateSalary( pay_rate, hours );
/* print the output for the employee */
printf("%11d $%5.2lf %7.2lf $%10.2lf\n", employee_id, pay_rate, hours, salary);
/* read in the next value */
error = fscanf( inptr, "%d %lf %lf", &employee_id, &pay_rate, &hours);
}
/* close the file */
fclose(inptr);
return 0;
}