//********************************************************
//
// Assignment 6 - Structures
//
// Name: Carlos Dominguez
//
// Class: C Programming,spring 2026
//
// Date: 03/08/2026 ------------- Spring is almost here!
//
// 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
// Structure definition
struct employee
{
long int clockNumber;
float wageRate;
float hours;
float overtimeHrs;
float grossPay;
};
// Function Prototypes
float getHours(long int clockNumber);
void printHeader(void);
void printEmp(long int clockNumber, float wageRate, float hours,
float overtimeHrs, float grossPay);
// Added prototypes
float calcOvertime(float hours);
float calcGross(float hours, float wageRate, float overtimeHrs);
// --- Summary function prototype ---
// Prints totals and averages for Wage, Hours, OT, and Gross
void printSummary(const float wageRate[], const float hours[],
const float overtimeHrs[], const float grossPay[], int n);
int main()
{
struct employee employeeData[SIZE] = {
{ 98401, 10.60 },
{ 526488, 9.75 },
{ 765349, 10.50 },
{ 34645, 12.25 },
{ 127615, 8.35 }
};
int i;
// Input and calculations
for (i = 0; i < SIZE; ++i)
{
employeeData[i].hours = getHours(employeeData[i].clockNumber);
employeeData[i].overtimeHrs = calcOvertime(employeeData[i].hours);
employeeData[i].grossPay = calcGross(
employeeData[i].hours,
employeeData[i].wageRate,
employeeData[i].overtimeHrs
);
}
// Print table header
printHeader();
// Print each employee
for (i = 0; i < SIZE; ++i)
{
printEmp(employeeData[i].clockNumber,
employeeData[i].wageRate,
employeeData[i].hours,
employeeData[i].overtimeHrs,
employeeData[i].grossPay);
}
// --- Call summary function ---
printSummary(
&employeeData[0].wageRate,
&employeeData[0].hours,
&employeeData[0].overtimeHrs,
&employeeData[0].grossPay,
SIZE
);
return 0;
}
//**************************************************************
float getHours(long int clockNumber)
{
float hoursWorked;
printf("\nEnter hours worked by emp # %06li: ", clockNumber
); scanf("%f", &hoursWorked
);
return hoursWorked;
}
//**************************************************************
void printHeader(void)
{
printf("\n\n*** Pay Calculator ***\n");
printf("\nClock# Wage Hours OT Gross\n"); printf("------------------------------------------------\n"); }
//**************************************************************
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);
}
//**************************************************************
float calcOvertime(float hours)
{
if (hours > STD_HOURS)
return hours - STD_HOURS;
else
return 0.0;
}
//**************************************************************
float calcGross(float hours, float wageRate, float overtimeHrs)
{
float normalPay;
float overtimePay;
if (overtimeHrs > 0)
{
normalPay = STD_HOURS * wageRate;
overtimePay = overtimeHrs * wageRate * OT_RATE;
}
else
{
normalPay = hours * wageRate;
overtimePay = 0.0;
}
return normalPay + overtimePay;
}
//**************************************************************
// Function: printSummary
//
// Purpose:
// Prints totals and averages for wage rate, hours,
// overtime hours, and gross pay.
//
// Parameters:
// wageRate[] - array of wage rates
// hours[] - array of hours worked
// overtimeHrs[]- array of overtime hours
// grossPay[] - array of gross pay values
// n - number of employees
//
// Returns: void
//**************************************************************
void printSummary(const float wageRate[], const float hours[],
const float overtimeHrs[], const float grossPay[], int n)
{
float totalWage = 0.0;
float totalHours = 0.0;
float totalOT = 0.0;
float totalGross = 0.0;
for (int i = 0; i < n; i++)
{
totalWage += wageRate[i];
totalHours += hours[i];
totalOT += overtimeHrs[i];
totalGross += grossPay[i];
}
printf("\n\n------------------------------------------------"); printf("\nTOTALS %5.2f %5.1f %4.1f %8.2f", totalWage, totalHours, totalOT, totalGross);
printf("\nAVERAGES %5.2f %5.1f %4.1f %8.2f\n", totalWage / n, totalHours / n, totalOT / n, totalGross / n);
}
Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovLyAKLy8gQXNzaWdubWVudCA2IC0gU3RydWN0dXJlcwovLwovLyBOYW1lOiBDYXJsb3MgRG9taW5ndWV6Ci8vCi8vIENsYXNzOiBDIFByb2dyYW1taW5nLHNwcmluZyAyMDI2Ci8vCi8vIERhdGU6IDAzLzA4LzIwMjYgLS0tLS0tLS0tLS0tLSBTcHJpbmcgaXMgYWxtb3N0IGhlcmUhIAovLwovLyBEZXNjcmlwdGlvbjogUHJvZ3JhbSB3aGljaCBkZXRlcm1pbmVzIG92ZXJ0aW1lIGFuZCAKLy8gZ3Jvc3MgcGF5IGZvciBhIHNldCBvZiBlbXBsb3llZXMgd2l0aCBvdXRwdXRzIHNlbnQgCi8vIHRvIHN0YW5kYXJkIG91dHB1dCAodGhlIHNjcmVlbikuCi8vCi8vIENhbGwgYnkgVmFsdWUgZGVzaWduCi8vCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiNpbmNsdWRlIDxzdGRpby5oPgoKLy8gRGVmaW5lIENvbnN0YW50cwojZGVmaW5lIFNJWkUgNQojZGVmaW5lIFNURF9IT1VSUyA0MC4wCiNkZWZpbmUgT1RfUkFURSAxLjUKCi8vIFN0cnVjdHVyZSBkZWZpbml0aW9uCnN0cnVjdCBlbXBsb3llZQp7CiAgICBsb25nIGludCBjbG9ja051bWJlcjsKICAgIGZsb2F0IHdhZ2VSYXRlOwogICAgZmxvYXQgaG91cnM7CiAgICBmbG9hdCBvdmVydGltZUhyczsKICAgIGZsb2F0IGdyb3NzUGF5Owp9OwoKLy8gRnVuY3Rpb24gUHJvdG90eXBlcwpmbG9hdCBnZXRIb3Vycyhsb25nIGludCBjbG9ja051bWJlcik7CnZvaWQgcHJpbnRIZWFkZXIodm9pZCk7CnZvaWQgcHJpbnRFbXAobG9uZyBpbnQgY2xvY2tOdW1iZXIsIGZsb2F0IHdhZ2VSYXRlLCBmbG9hdCBob3VycywKICAgICAgICAgICAgICBmbG9hdCBvdmVydGltZUhycywgZmxvYXQgZ3Jvc3NQYXkpOwoKLy8gQWRkZWQgcHJvdG90eXBlcwpmbG9hdCBjYWxjT3ZlcnRpbWUoZmxvYXQgaG91cnMpOwpmbG9hdCBjYWxjR3Jvc3MoZmxvYXQgaG91cnMsIGZsb2F0IHdhZ2VSYXRlLCBmbG9hdCBvdmVydGltZUhycyk7CgovLyAtLS0gU3VtbWFyeSBmdW5jdGlvbiBwcm90b3R5cGUgLS0tCi8vIFByaW50cyB0b3RhbHMgYW5kIGF2ZXJhZ2VzIGZvciBXYWdlLCBIb3VycywgT1QsIGFuZCBHcm9zcwp2b2lkIHByaW50U3VtbWFyeShjb25zdCBmbG9hdCB3YWdlUmF0ZVtdLCBjb25zdCBmbG9hdCBob3Vyc1tdLAogICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBvdmVydGltZUhyc1tdLCBjb25zdCBmbG9hdCBncm9zc1BheVtdLCBpbnQgbik7CgppbnQgbWFpbigpCnsKICAgIHN0cnVjdCBlbXBsb3llZSBlbXBsb3llZURhdGFbU0laRV0gPSB7CiAgICAgICAgeyA5ODQwMSwgMTAuNjAgfSwKICAgICAgICB7IDUyNjQ4OCwgOS43NSB9LAogICAgICAgIHsgNzY1MzQ5LCAxMC41MCB9LAogICAgICAgIHsgMzQ2NDUsIDEyLjI1IH0sCiAgICAgICAgeyAxMjc2MTUsIDguMzUgfQogICAgfTsKCiAgICBpbnQgaTsKCiAgICAvLyBJbnB1dCBhbmQgY2FsY3VsYXRpb25zCiAgICBmb3IgKGkgPSAwOyBpIDwgU0laRTsgKytpKQogICAgewogICAgICAgIGVtcGxveWVlRGF0YVtpXS5ob3VycyA9IGdldEhvdXJzKGVtcGxveWVlRGF0YVtpXS5jbG9ja051bWJlcik7CgogICAgICAgIGVtcGxveWVlRGF0YVtpXS5vdmVydGltZUhycyA9IGNhbGNPdmVydGltZShlbXBsb3llZURhdGFbaV0uaG91cnMpOwoKICAgICAgICBlbXBsb3llZURhdGFbaV0uZ3Jvc3NQYXkgPSBjYWxjR3Jvc3MoCiAgICAgICAgICAgIGVtcGxveWVlRGF0YVtpXS5ob3VycywKICAgICAgICAgICAgZW1wbG95ZWVEYXRhW2ldLndhZ2VSYXRlLAogICAgICAgICAgICBlbXBsb3llZURhdGFbaV0ub3ZlcnRpbWVIcnMKICAgICAgICApOwogICAgfQoKICAgIC8vIFByaW50IHRhYmxlIGhlYWRlcgogICAgcHJpbnRIZWFkZXIoKTsKCiAgICAvLyBQcmludCBlYWNoIGVtcGxveWVlCiAgICBmb3IgKGkgPSAwOyBpIDwgU0laRTsgKytpKQogICAgewogICAgICAgIHByaW50RW1wKGVtcGxveWVlRGF0YVtpXS5jbG9ja051bWJlciwKICAgICAgICAgICAgICAgICBlbXBsb3llZURhdGFbaV0ud2FnZVJhdGUsCiAgICAgICAgICAgICAgICAgZW1wbG95ZWVEYXRhW2ldLmhvdXJzLAogICAgICAgICAgICAgICAgIGVtcGxveWVlRGF0YVtpXS5vdmVydGltZUhycywKICAgICAgICAgICAgICAgICBlbXBsb3llZURhdGFbaV0uZ3Jvc3NQYXkpOwogICAgfQoKICAgIC8vIC0tLSBDYWxsIHN1bW1hcnkgZnVuY3Rpb24gLS0tCiAgICBwcmludFN1bW1hcnkoCiAgICAgICAgJmVtcGxveWVlRGF0YVswXS53YWdlUmF0ZSwKICAgICAgICAmZW1wbG95ZWVEYXRhWzBdLmhvdXJzLAogICAgICAgICZlbXBsb3llZURhdGFbMF0ub3ZlcnRpbWVIcnMsCiAgICAgICAgJmVtcGxveWVlRGF0YVswXS5ncm9zc1BheSwKICAgICAgICBTSVpFCiAgICApOwoKICAgIHJldHVybiAwOwp9CgovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmZsb2F0IGdldEhvdXJzKGxvbmcgaW50IGNsb2NrTnVtYmVyKQp7CiAgICBmbG9hdCBob3Vyc1dvcmtlZDsKCiAgICBwcmludGYoIlxuRW50ZXIgaG91cnMgd29ya2VkIGJ5IGVtcCAjICUwNmxpOiAiLCBjbG9ja051bWJlcik7CiAgICBzY2FuZigiJWYiLCAmaG91cnNXb3JrZWQpOwoKICAgIHJldHVybiBob3Vyc1dvcmtlZDsKfQoKLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgp2b2lkIHByaW50SGVhZGVyKHZvaWQpCnsKICAgIHByaW50ZigiXG5cbioqKiBQYXkgQ2FsY3VsYXRvciAqKipcbiIpOwoKICAgIHByaW50ZigiXG5DbG9jayMgV2FnZSAgSG91cnMgIE9UICAgICAgR3Jvc3NcbiIpOwogICAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwp9CgovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCnZvaWQgcHJpbnRFbXAobG9uZyBpbnQgY2xvY2tOdW1iZXIsIGZsb2F0IHdhZ2VSYXRlLCBmbG9hdCBob3VycywKICAgICAgICAgICAgICBmbG9hdCBvdmVydGltZUhycywgZmxvYXQgZ3Jvc3NQYXkpCnsKICAgIHByaW50ZigiXG4gJTA2bGkgJTUuMmYgJTQuMWYgJTQuMWYgJTguMmYiLAogICAgICAgICAgIGNsb2NrTnVtYmVyLCB3YWdlUmF0ZSwgaG91cnMsCiAgICAgICAgICAgb3ZlcnRpbWVIcnMsIGdyb3NzUGF5KTsKfQoKLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpmbG9hdCBjYWxjT3ZlcnRpbWUoZmxvYXQgaG91cnMpCnsKICAgIGlmIChob3VycyA+IFNURF9IT1VSUykKICAgICAgICByZXR1cm4gaG91cnMgLSBTVERfSE9VUlM7CiAgICBlbHNlCiAgICAgICAgcmV0dXJuIDAuMDsKfQoKLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpmbG9hdCBjYWxjR3Jvc3MoZmxvYXQgaG91cnMsIGZsb2F0IHdhZ2VSYXRlLCBmbG9hdCBvdmVydGltZUhycykKewogICAgZmxvYXQgbm9ybWFsUGF5OwogICAgZmxvYXQgb3ZlcnRpbWVQYXk7CgogICAgaWYgKG92ZXJ0aW1lSHJzID4gMCkKICAgIHsKICAgICAgICBub3JtYWxQYXkgPSBTVERfSE9VUlMgKiB3YWdlUmF0ZTsKICAgICAgICBvdmVydGltZVBheSA9IG92ZXJ0aW1lSHJzICogd2FnZVJhdGUgKiBPVF9SQVRFOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIG5vcm1hbFBheSA9IGhvdXJzICogd2FnZVJhdGU7CiAgICAgICAgb3ZlcnRpbWVQYXkgPSAwLjA7CiAgICB9CgogICAgcmV0dXJuIG5vcm1hbFBheSArIG92ZXJ0aW1lUGF5Owp9CgovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi8vIEZ1bmN0aW9uOiBwcmludFN1bW1hcnkKLy8KLy8gUHVycG9zZToKLy8gICAgIFByaW50cyB0b3RhbHMgYW5kIGF2ZXJhZ2VzIGZvciB3YWdlIHJhdGUsIGhvdXJzLAovLyAgICAgb3ZlcnRpbWUgaG91cnMsIGFuZCBncm9zcyBwYXkuCi8vCi8vIFBhcmFtZXRlcnM6Ci8vICAgICB3YWdlUmF0ZVtdICAgLSBhcnJheSBvZiB3YWdlIHJhdGVzCi8vICAgICBob3Vyc1tdICAgICAgLSBhcnJheSBvZiBob3VycyB3b3JrZWQKLy8gICAgIG92ZXJ0aW1lSHJzW10tIGFycmF5IG9mIG92ZXJ0aW1lIGhvdXJzCi8vICAgICBncm9zc1BheVtdICAgLSBhcnJheSBvZiBncm9zcyBwYXkgdmFsdWVzCi8vICAgICBuICAgICAgICAgICAgLSBudW1iZXIgb2YgZW1wbG95ZWVzCi8vCi8vIFJldHVybnM6IHZvaWQKLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgp2b2lkIHByaW50U3VtbWFyeShjb25zdCBmbG9hdCB3YWdlUmF0ZVtdLCBjb25zdCBmbG9hdCBob3Vyc1tdLAogICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBvdmVydGltZUhyc1tdLCBjb25zdCBmbG9hdCBncm9zc1BheVtdLCBpbnQgbikKewogICAgZmxvYXQgdG90YWxXYWdlID0gMC4wOwogICAgZmxvYXQgdG90YWxIb3VycyA9IDAuMDsKICAgIGZsb2F0IHRvdGFsT1QgPSAwLjA7CiAgICBmbG9hdCB0b3RhbEdyb3NzID0gMC4wOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQogICAgewogICAgICAgIHRvdGFsV2FnZSAgKz0gd2FnZVJhdGVbaV07CiAgICAgICAgdG90YWxIb3VycyArPSBob3Vyc1tpXTsKICAgICAgICB0b3RhbE9UICAgICs9IG92ZXJ0aW1lSHJzW2ldOwogICAgICAgIHRvdGFsR3Jvc3MgKz0gZ3Jvc3NQYXlbaV07CiAgICB9CgogICAgcHJpbnRmKCJcblxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAgICBwcmludGYoIlxuVE9UQUxTICAgICU1LjJmICU1LjFmICU0LjFmICU4LjJmIiwKICAgICAgICAgICB0b3RhbFdhZ2UsIHRvdGFsSG91cnMsIHRvdGFsT1QsIHRvdGFsR3Jvc3MpOwoKICAgIHByaW50ZigiXG5BVkVSQUdFUyAgJTUuMmYgJTUuMWYgJTQuMWYgJTguMmZcbiIsCiAgICAgICAgICAgdG90YWxXYWdlIC8gbiwgdG90YWxIb3VycyAvIG4sIHRvdGFsT1QgLyBuLCB0b3RhbEdyb3NzIC8gbik7Cn0=