//********************************************************
//
// Assignment 6 - Structures
//
// Name: Megan Tetreault
//
// Class: C Programming, Spring 2025
//
// Date: March 4, 2025
//
// Description: Program which determines overtime and
// gross pay for a set of employees with outputs sent
// to standard output (the screen).
//
// Call by Value design
//
//********************************************************
#include <stdio.h>
// Define Constants
#define SIZE 5
#define STD_HOURS 40.0
#define OT_RATE 1.5
// Define a global structure to pass employee data between functions
// Note that the structure type is global, but you don't want a variable
// of that type to be global. Best to declare a variable of that type
// in a function like main or another function and pass as needed.
struct employee {
long int clockNumber;
float wageRate;
float hours;
float overtimeHrs;
float grossPay;
};
// define prototypes here for each function except main
float getHours(long int clockNumber);
void printHeader(void);
void printEmp(long int clockNumber, float wageRate, float hours, float overtimeHrs, float grossPay);
// TODO: add your other function prototypes here
float calcOT(float hours);
float calcGross(float wageRate, float hours, float overtimeHrs);
int main()
{
//st up a local variable to store the employee information
struct employee employeeData[SIZE] = {
{ 98401, 10.60 },
{ 526488, 9.75 },
{ 765349, 10.50 }, // initialize clock and wage values
{ 34645, 12.25 },
{ 127615, 8.35 }
};
int i; // loop and array index
//Call functions as needed to read and calculate information
for (i = 0; i < SIZE; ++i)
{
//Prompt for the number hours worked by the employee
employeeData[i].hours = getHours(employeeData[i].clockNumber);
//Calculate Overtime
employeeData[i].overtimeHrs = calcOT(employeeData[i].hours);
//Calculate Grosspay
employeeData[i].grossPay = calcGross(employeeData[i].wageRate, employeeData[i].hours, employeeData[i].overtimeHrs);
}// for
//Print the column headers
printHeader();
//print out each employee
for (i = 0; i < SIZE; ++i) {
printEmp(employeeData[i].clockNumber, employeeData[i].wageRate, employeeData[i].hours, employeeData[i].overtimeHrs, employeeData[i].grossPay);
}
return 0; //success
} //main
//**************************************************************
// Function: getHours
//
// Purpose: Obtains input from user, the number of hours worked
// per employee and stores the result in a local variable
// that is passed back to the calling function.
//
// Parameters: clockNumber - The unique employee ID
//
// Returns: hoursWorked - hours worked in a given week
//
//**************************************************************
// Function to get hours worked
float getHours(long int clockNumber) {
float hoursWorked;
printf("\nEnter hours worked by emp # %06li: ", clockNumber
); if (scanf("%f", &hoursWorked
) != 1) { printf("Invalid input. Please enter a number.\n"); hoursWorked = 0.0;
}
return hoursWorked;
} //getHours
//**************************************************************
// Function: printHeader
//
// Purpose: Prints the initial table header information.
//
// Parameters: none
//
// Returns: void
//
//**************************************************************
// Function to print header
void printHeader(void) {
printf("\n\n*** Pay Calculator ***\n"); printf("\nClock# Wage Hours OT Gross\n"); printf("------------------------------------------------\n");
} //printHeader
//*************************************************************
// Function: printEmp
//
// Purpose: Prints out all the information for an employee
// in a nice and orderly table format.
//
// Parameters:
//
// clockNumber - unique employee ID
// wageRate - hourly wage rate
// hours - Hours worked for the week
// overtimeHrs - overtime hours worked in a week
// grossPay - gross pay for the week
//
// Returns: void
//
//**************************************************************
// Function to print employee data
void printEmp(long int clockNumber, float wageRate, float hours, float overtimeHrs, float grossPay) {
printf("\n %06li %5.2f %4.1f %4.1f %8.2f", clockNumber
, wageRate
, hours
, overtimeHrs
, grossPay
); }
// Function to calculate overtime hours
float calcOT(float hours) {
return (hours > STD_HOURS) ? (hours - STD_HOURS) : 0.0;
}
// Function to calculate gross pay
float calcGross(float wageRate, float hours, float overtimeHrs) {
return (hours > STD_HOURS) ? (STD_HOURS * wageRate) + (overtimeHrs * wageRate * OT_RATE) : (hours * wageRate);
}