//********************************************************
//
// Assignment 6 - Structures
//
// Name: Jacquelin Saint Lucien
//
// Class: C Programming, Fall 2025
//
// Date: 10/14/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
//
//********************************************************
 
// Define and Includes
 
 
#include <stdio.h>
 
// let's calculate the gross salary of a set of employees.
// in relation to their hours worked, their normal salary and their overtime.
 
// Determine the structure used as requested in the problem description.
struct employee {
    int clockNumber;
    float wage;
    float hours;
    float overtimeHours;
    float grossPay;
};
 
// calculate overtime hours.
// It takes a pointer to an employee structure and updates the overtimeHours field.
void calculateOvertime(struct employee *emp) {
    if (emp->hours > 40.0) {
        emp->overtimeHours = emp->hours - 40.0;
    } else {
        emp->overtimeHours = 0.0;
    }
}
 
// calculate gross pay.
// It takes a pointer to an employee structure and updates the grossPay field.
void calculateGrossPay(struct employee *emp) {
    float normalHours = emp->hours > 40.0 ? 40.0 : emp->hours;
    float overtimeHours = emp->overtimeHours;
 
    float normalPay = normalHours * emp->wage;
    float overtimePay = overtimeHours * emp->wage * 1.5;
 
    emp->grossPay = normalPay + overtimePay;
}
 
int main() {
    //Used a local variable to store the employee information.
    struct employee employees[5] = {
        {98401, 10.00, 0.0, 0.0, 0.0},
        {526488, 9.75, 0.0, 0.0, 0.0},
        {763349, 10.50, 0.0, 0.0, 0.0},
        {34045, 12.25, 0.0, 0.0, 0.0},
        {127615, 8.35, 0.0, 0.0, 0.0}
    };
 
    // The problem specifies to use these hours as input.
    float hoursInput[] = {31.0, 42.5, 37.0, 0.0, 0.0};
 
    // Call functions as needed to read and calculate information.
    for (int i = 0; i < 5; i++) {
        // Assign the given hours to the current employee.
        employees[i].hours = hoursInput[i];
 
        // Call the functions to calculate the overtime hours and gross pay.
        calculateOvertime(&employees[i]);
        calculateGrossPay(&employees[i]);
    }
 
    // Print the table header with the specified column titles.
    printf("Clock    Wage    Hours   OT      Gross\n");     printf("-------  ------  ------  ------  ------\n");  
    // Loop through the array again to print the results in a formatted table.
    for (int i = 0; i < 5; i++) {
        printf("%06d   %5.2f  %5.1f  %5.1f  %7.2f\n",                employees[i].clockNumber,
               employees[i].wage,
               employees[i].hours,
               employees[i].overtimeHours,
               employees[i].grossPay);
    }
 
    return 0;
}
 
 
 
				Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovLwovLyBBc3NpZ25tZW50IDYgLSBTdHJ1Y3R1cmVzCi8vCi8vIE5hbWU6IEphY3F1ZWxpbiBTYWludCBMdWNpZW4KLy8KLy8gQ2xhc3M6IEMgUHJvZ3JhbW1pbmcsIEZhbGwgMjAyNQovLwovLyBEYXRlOiAxMC8xNC8yMDI1Ci8vCi8vIERlc2NyaXB0aW9uOiBQcm9ncmFtIHdoaWNoIGRldGVybWluZXMgb3ZlcnRpbWUgYW5kIAovLyBncm9zcyBwYXkgZm9yIGEgc2V0IG9mIGVtcGxveWVlcyB3aXRoIG91dHB1dHMgc2VudCAKLy8gdG8gc3RhbmRhcmQgb3V0cHV0ICh0aGUgc2NyZWVuKS4KLy8KLy8gQ2FsbCBieSBWYWx1ZSBkZXNpZ24KLy8KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKLy8gRGVmaW5lIGFuZCBJbmNsdWRlcwoKCiNpbmNsdWRlIDxzdGRpby5oPgoKLy8gbGV0J3MgY2FsY3VsYXRlIHRoZSBncm9zcyBzYWxhcnkgb2YgYSBzZXQgb2YgZW1wbG95ZWVzLgovLyBpbiByZWxhdGlvbiB0byB0aGVpciBob3VycyB3b3JrZWQsIHRoZWlyIG5vcm1hbCBzYWxhcnkgYW5kIHRoZWlyIG92ZXJ0aW1lLgoKLy8gRGV0ZXJtaW5lIHRoZSBzdHJ1Y3R1cmUgdXNlZCBhcyByZXF1ZXN0ZWQgaW4gdGhlIHByb2JsZW0gZGVzY3JpcHRpb24uCnN0cnVjdCBlbXBsb3llZSB7CiAgICBpbnQgY2xvY2tOdW1iZXI7CiAgICBmbG9hdCB3YWdlOwogICAgZmxvYXQgaG91cnM7CiAgICBmbG9hdCBvdmVydGltZUhvdXJzOwogICAgZmxvYXQgZ3Jvc3NQYXk7Cn07CgovLyBjYWxjdWxhdGUgb3ZlcnRpbWUgaG91cnMuCi8vIEl0IHRha2VzIGEgcG9pbnRlciB0byBhbiBlbXBsb3llZSBzdHJ1Y3R1cmUgYW5kIHVwZGF0ZXMgdGhlIG92ZXJ0aW1lSG91cnMgZmllbGQuCnZvaWQgY2FsY3VsYXRlT3ZlcnRpbWUoc3RydWN0IGVtcGxveWVlICplbXApIHsKICAgIGlmIChlbXAtPmhvdXJzID4gNDAuMCkgewogICAgICAgIGVtcC0+b3ZlcnRpbWVIb3VycyA9IGVtcC0+aG91cnMgLSA0MC4wOwogICAgfSBlbHNlIHsKICAgICAgICBlbXAtPm92ZXJ0aW1lSG91cnMgPSAwLjA7CiAgICB9Cn0KCi8vIGNhbGN1bGF0ZSBncm9zcyBwYXkuCi8vIEl0IHRha2VzIGEgcG9pbnRlciB0byBhbiBlbXBsb3llZSBzdHJ1Y3R1cmUgYW5kIHVwZGF0ZXMgdGhlIGdyb3NzUGF5IGZpZWxkLgp2b2lkIGNhbGN1bGF0ZUdyb3NzUGF5KHN0cnVjdCBlbXBsb3llZSAqZW1wKSB7CiAgICBmbG9hdCBub3JtYWxIb3VycyA9IGVtcC0+aG91cnMgPiA0MC4wID8gNDAuMCA6IGVtcC0+aG91cnM7CiAgICBmbG9hdCBvdmVydGltZUhvdXJzID0gZW1wLT5vdmVydGltZUhvdXJzOwogICAgCiAgICBmbG9hdCBub3JtYWxQYXkgPSBub3JtYWxIb3VycyAqIGVtcC0+d2FnZTsKICAgIGZsb2F0IG92ZXJ0aW1lUGF5ID0gb3ZlcnRpbWVIb3VycyAqIGVtcC0+d2FnZSAqIDEuNTsKICAgIAogICAgZW1wLT5ncm9zc1BheSA9IG5vcm1hbFBheSArIG92ZXJ0aW1lUGF5Owp9CgppbnQgbWFpbigpIHsKICAgIC8vVXNlZCBhIGxvY2FsIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBlbXBsb3llZSBpbmZvcm1hdGlvbi4KICAgIHN0cnVjdCBlbXBsb3llZSBlbXBsb3llZXNbNV0gPSB7CiAgICAgICAgezk4NDAxLCAxMC4wMCwgMC4wLCAwLjAsIDAuMH0sCiAgICAgICAgezUyNjQ4OCwgOS43NSwgMC4wLCAwLjAsIDAuMH0sCiAgICAgICAgezc2MzM0OSwgMTAuNTAsIDAuMCwgMC4wLCAwLjB9LAogICAgICAgIHszNDA0NSwgMTIuMjUsIDAuMCwgMC4wLCAwLjB9LAogICAgICAgIHsxMjc2MTUsIDguMzUsIDAuMCwgMC4wLCAwLjB9CiAgICB9OwogICAgCiAgICAvLyBUaGUgcHJvYmxlbSBzcGVjaWZpZXMgdG8gdXNlIHRoZXNlIGhvdXJzIGFzIGlucHV0LgogICAgZmxvYXQgaG91cnNJbnB1dFtdID0gezMxLjAsIDQyLjUsIDM3LjAsIDAuMCwgMC4wfTsKICAgIAogICAgLy8gQ2FsbCBmdW5jdGlvbnMgYXMgbmVlZGVkIHRvIHJlYWQgYW5kIGNhbGN1bGF0ZSBpbmZvcm1hdGlvbi4KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7CiAgICAgICAgLy8gQXNzaWduIHRoZSBnaXZlbiBob3VycyB0byB0aGUgY3VycmVudCBlbXBsb3llZS4KICAgICAgICBlbXBsb3llZXNbaV0uaG91cnMgPSBob3Vyc0lucHV0W2ldOwogICAgICAgIAogICAgICAgIC8vIENhbGwgdGhlIGZ1bmN0aW9ucyB0byBjYWxjdWxhdGUgdGhlIG92ZXJ0aW1lIGhvdXJzIGFuZCBncm9zcyBwYXkuCiAgICAgICAgY2FsY3VsYXRlT3ZlcnRpbWUoJmVtcGxveWVlc1tpXSk7CiAgICAgICAgY2FsY3VsYXRlR3Jvc3NQYXkoJmVtcGxveWVlc1tpXSk7CiAgICB9CiAgICAKICAgIC8vIFByaW50IHRoZSB0YWJsZSBoZWFkZXIgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbHVtbiB0aXRsZXMuCiAgICBwcmludGYoIkNsb2NrICAgIFdhZ2UgICAgSG91cnMgICBPVCAgICAgIEdyb3NzXG4iKTsKICAgIHByaW50ZigiLS0tLS0tLSAgLS0tLS0tICAtLS0tLS0gIC0tLS0tLSAgLS0tLS0tXG4iKTsKICAgIAogICAgLy8gTG9vcCB0aHJvdWdoIHRoZSBhcnJheSBhZ2FpbiB0byBwcmludCB0aGUgcmVzdWx0cyBpbiBhIGZvcm1hdHRlZCB0YWJsZS4KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7CiAgICAgICAgcHJpbnRmKCIlMDZkICAgJTUuMmYgICU1LjFmICAlNS4xZiAgJTcuMmZcbiIsCiAgICAgICAgICAgICAgIGVtcGxveWVlc1tpXS5jbG9ja051bWJlciwKICAgICAgICAgICAgICAgZW1wbG95ZWVzW2ldLndhZ2UsCiAgICAgICAgICAgICAgIGVtcGxveWVlc1tpXS5ob3VycywKICAgICAgICAgICAgICAgZW1wbG95ZWVzW2ldLm92ZXJ0aW1lSG91cnMsCiAgICAgICAgICAgICAgIGVtcGxveWVlc1tpXS5ncm9zc1BheSk7CiAgICB9CiAgICAKICAgIHJldHVybiAwOwp9CgoK