//********************************************************
//
// Assignment 9 - Linked Lists
//
// Name: Jacquelin Saint Lucien
//
// Class: C Programming, Falls 2025
//
// Date: 11/14/2025
//
// Description: Program which determines overtime and
// gross pay for a set of employees with outputs sent
// to standard output (the screen).
//
// This assignment also adds the employee name, their tax state,
// and calculates the state tax, federal tax, and net pay. It
// also calculates totals, averages, minimum, and maximum values.
//
// Array and Structure references have all been replaced with
// pointer references to speed up the processing of this code.
// A linked list has been created and deployed to dynamically
// allocate and process employees as needed.
//
// Call by Reference design (using pointers)
//
//********************************************************
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Employee {
char firstName[20];
char lastName[20];
char state[5];
int clockNumber;
float wage;
float hours;
float gross;
float stateTax;
float federalTax;
float net;
struct Employee *next;
} Employee;
/* ---- Function Prototypes ---- */
Employee* addEmployee(Employee *head, char *fn, char *ln, char *st, int clk, float wage, float hrs);
void calcStateTax(Employee *e);
void calcFedTax(Employee *e);
void calcEmployeeTotals(Employee *head, float *totGross, float *totState, float *totFed, float *totNet);
void calcEmployeeMinMax(Employee *head);
void printEmployees(Employee *head);
int main() {
Employee *head = NULL;
/* Example input (replace with scanf or file input depending on assignment) */
head = addEmployee(head, "Connie", "Bryant", "CA", 98401, 10.60, 38.00);
head = addEmployee(head, "Mary", "Apl", "NY", 526488, 12.58, 40.00);
head = addEmployee(head, "Frank", "Krotman", "VT", 954984, 10.50, 42.00);
head = addEmployee(head, "Aida", "Pett", "CA", 125615, 17.00, 38.00);
head = addEmployee(head, "Jason", "Pascal", "CA", 127615, 12.85, 45.00);
Employee *curr = head;
/* ---- Perform Calculations ---- */
while (curr != NULL) {
curr->gross = curr->wage * curr->hours;
calcStateTax(curr);
calcFedTax(curr);
curr->net = curr->gross - curr->stateTax - curr->federalTax;
curr = curr->next;
}
/* ---- Print Output ---- */
printEmployees(head);
/* ---- Totals ---- */
float tGross=0, tState=0, tFed=0, tNet=0;
calcEmployeeTotals(head, &tGross, &tState, &tFed, &tNet);
printf("Gross: %.2f\nState Tax: %.2f\nFed Tax: %.2f\nNet: %.2f\n", tGross, tState, tFed, tNet);
/* ---- Min/Max Summary ---- */
calcEmployeeMinMax(head);
return 0;
}
// ADD EMPLOYEE (DYNAMIC LINKED LIST)
Employee* addEmployee(Employee *head, char *fn, char *ln, char *st, int clk, float wage, float hrs) {
Employee
*e
= (Employee
*)malloc(sizeof(Employee
));
e->clockNumber = clk;
e->wage = wage;
e->hours = hrs;
e->next = head;
return e;
}
// TAX CALCULATION FUNCTIONS
/* Example: 6% state tax */
void calcStateTax(Employee *e) {
e->stateTax = e->gross * 0.06;
}
/* Example: 12% federal tax */
void calcFedTax(Employee *e) {
e->federalTax = e->gross * 0.12;
}
//TOTALS (SUM OF ALL EMPLOYEES)
void calcEmployeeTotals(Employee *head, float *tGross, float *tState, float *tFed, float *tNet) {
Employee *c = head;
while (c != NULL) {
*tGross += c->gross;
*tState += c->stateTax;
*tFed += c->federalTax;
*tNet += c->net;
c = c->next;
}
}
// MIN / MAX
void calcEmployeeMinMax(Employee *head) {
if (head == NULL) return;
float minGross = head->gross, maxGross = head->gross;
Employee *c = head;
while (c != NULL) {
if (c->gross < minGross) minGross = c->gross;
if (c->gross > maxGross) maxGross = c->gross;
c = c->next;
}
printf("\nMinimum Gross Pay: %.2f\n", minGross
); printf("Maximum Gross Pay: %.2f\n", maxGross
); }
//RINT EMPLOYEES
void printEmployees(Employee *head) {
printf("\n*** Pay Calculator ***\n"); printf("%-10s %-10s %-8s %-8s %-10s %-10s %-10s %-10s\n", "First", "Last", "State", "Clock#",
"Gross", "StateTax", "FedTax", "Net");
Employee *c = head;
while (c != NULL) {
printf("%-10s %-10s %-8s %-8d $%-10.2f $%-10.2f $%-10.2f $%-10.2f\n", c->firstName, c->lastName, c->state, c->clockNumber,
c->gross, c->stateTax, c->federalTax, c->net);
c = c->next;
}
}
Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovLwovLyBBc3NpZ25tZW50IDkgLSBMaW5rZWQgTGlzdHMKLy8KLy8gTmFtZTogSmFjcXVlbGluIFNhaW50IEx1Y2llbgovLwovLyBDbGFzczogQyBQcm9ncmFtbWluZywgRmFsbHMgMjAyNQovLwovLyBEYXRlOiAxMS8xNC8yMDI1Ci8vCi8vIERlc2NyaXB0aW9uOiBQcm9ncmFtIHdoaWNoIGRldGVybWluZXMgb3ZlcnRpbWUgYW5kIAovLyBncm9zcyBwYXkgZm9yIGEgc2V0IG9mIGVtcGxveWVlcyB3aXRoIG91dHB1dHMgc2VudCAKLy8gdG8gc3RhbmRhcmQgb3V0cHV0ICh0aGUgc2NyZWVuKS4KLy8KLy8gVGhpcyBhc3NpZ25tZW50IGFsc28gYWRkcyB0aGUgZW1wbG95ZWUgbmFtZSwgdGhlaXIgdGF4IHN0YXRlLAovLyBhbmQgY2FsY3VsYXRlcyB0aGUgc3RhdGUgdGF4LCBmZWRlcmFsIHRheCwgYW5kIG5ldCBwYXkuICAgSXQKLy8gYWxzbyBjYWxjdWxhdGVzIHRvdGFscywgYXZlcmFnZXMsIG1pbmltdW0sIGFuZCBtYXhpbXVtIHZhbHVlcy4KLy8KLy8gQXJyYXkgYW5kIFN0cnVjdHVyZSByZWZlcmVuY2VzIGhhdmUgYWxsIGJlZW4gcmVwbGFjZWQgd2l0aAovLyBwb2ludGVyIHJlZmVyZW5jZXMgdG8gc3BlZWQgdXAgdGhlIHByb2Nlc3Npbmcgb2YgdGhpcyBjb2RlLgovLyBBIGxpbmtlZCBsaXN0IGhhcyBiZWVuIGNyZWF0ZWQgYW5kIGRlcGxveWVkIHRvIGR5bmFtaWNhbGx5Ci8vIGFsbG9jYXRlIGFuZCBwcm9jZXNzIGVtcGxveWVlcyBhcyBuZWVkZWQuCi8vCi8vIENhbGwgYnkgUmVmZXJlbmNlIGRlc2lnbiAodXNpbmcgcG9pbnRlcnMpCi8vCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+Cgp0eXBlZGVmIHN0cnVjdCBFbXBsb3llZSB7CiAgICBjaGFyIGZpcnN0TmFtZVsyMF07CiAgICBjaGFyIGxhc3ROYW1lWzIwXTsKICAgIGNoYXIgc3RhdGVbNV07CiAgICBpbnQgY2xvY2tOdW1iZXI7CiAgICBmbG9hdCB3YWdlOwogICAgZmxvYXQgaG91cnM7CgogICAgZmxvYXQgZ3Jvc3M7CiAgICBmbG9hdCBzdGF0ZVRheDsKICAgIGZsb2F0IGZlZGVyYWxUYXg7CiAgICBmbG9hdCBuZXQ7CgogICAgc3RydWN0IEVtcGxveWVlICpuZXh0Owp9IEVtcGxveWVlOwoKLyogLS0tLSBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0gKi8KRW1wbG95ZWUqIGFkZEVtcGxveWVlKEVtcGxveWVlICpoZWFkLCBjaGFyICpmbiwgY2hhciAqbG4sIGNoYXIgKnN0LCBpbnQgY2xrLCBmbG9hdCB3YWdlLCBmbG9hdCBocnMpOwp2b2lkIGNhbGNTdGF0ZVRheChFbXBsb3llZSAqZSk7CnZvaWQgY2FsY0ZlZFRheChFbXBsb3llZSAqZSk7CnZvaWQgY2FsY0VtcGxveWVlVG90YWxzKEVtcGxveWVlICpoZWFkLCBmbG9hdCAqdG90R3Jvc3MsIGZsb2F0ICp0b3RTdGF0ZSwgZmxvYXQgKnRvdEZlZCwgZmxvYXQgKnRvdE5ldCk7CnZvaWQgY2FsY0VtcGxveWVlTWluTWF4KEVtcGxveWVlICpoZWFkKTsKdm9pZCBwcmludEVtcGxveWVlcyhFbXBsb3llZSAqaGVhZCk7CgppbnQgbWFpbigpIHsKICAgIEVtcGxveWVlICpoZWFkID0gTlVMTDsKCiAgICAvKiBFeGFtcGxlIGlucHV0IChyZXBsYWNlIHdpdGggc2NhbmYgb3IgZmlsZSBpbnB1dCBkZXBlbmRpbmcgb24gYXNzaWdubWVudCkgKi8KICAgIGhlYWQgPSBhZGRFbXBsb3llZShoZWFkLCAiQ29ubmllIiwgIkJyeWFudCIsICJDQSIsIDk4NDAxLCAxMC42MCwgMzguMDApOwogICAgaGVhZCA9IGFkZEVtcGxveWVlKGhlYWQsICJNYXJ5IiwgIkFwbCIsICJOWSIsIDUyNjQ4OCwgMTIuNTgsIDQwLjAwKTsKICAgIGhlYWQgPSBhZGRFbXBsb3llZShoZWFkLCAiRnJhbmsiLCAiS3JvdG1hbiIsICJWVCIsIDk1NDk4NCwgMTAuNTAsIDQyLjAwKTsKICAgIGhlYWQgPSBhZGRFbXBsb3llZShoZWFkLCAiQWlkYSIsICJQZXR0IiwgIkNBIiwgMTI1NjE1LCAxNy4wMCwgMzguMDApOwogICAgaGVhZCA9IGFkZEVtcGxveWVlKGhlYWQsICJKYXNvbiIsICJQYXNjYWwiLCAiQ0EiLCAxMjc2MTUsIDEyLjg1LCA0NS4wMCk7CgogICAgRW1wbG95ZWUgKmN1cnIgPSBoZWFkOwoKICAgIC8qIC0tLS0gUGVyZm9ybSBDYWxjdWxhdGlvbnMgLS0tLSAqLwogICAgd2hpbGUgKGN1cnIgIT0gTlVMTCkgewogICAgICAgIGN1cnItPmdyb3NzID0gY3Vyci0+d2FnZSAqIGN1cnItPmhvdXJzOwoKICAgICAgICBjYWxjU3RhdGVUYXgoY3Vycik7CiAgICAgICAgY2FsY0ZlZFRheChjdXJyKTsKCiAgICAgICAgY3Vyci0+bmV0ID0gY3Vyci0+Z3Jvc3MgLSBjdXJyLT5zdGF0ZVRheCAtIGN1cnItPmZlZGVyYWxUYXg7CgogICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0OwogICAgfQoKICAgIC8qIC0tLS0gUHJpbnQgT3V0cHV0IC0tLS0gKi8KICAgIHByaW50RW1wbG95ZWVzKGhlYWQpOwoKICAgIC8qIC0tLS0gVG90YWxzIC0tLS0gKi8KICAgIGZsb2F0IHRHcm9zcz0wLCB0U3RhdGU9MCwgdEZlZD0wLCB0TmV0PTA7CiAgICBjYWxjRW1wbG95ZWVUb3RhbHMoaGVhZCwgJnRHcm9zcywgJnRTdGF0ZSwgJnRGZWQsICZ0TmV0KTsKCiAgICBwcmludGYoIlxuVG90YWxzOlxuIik7CiAgICBwcmludGYoIkdyb3NzOiAlLjJmXG5TdGF0ZSBUYXg6ICUuMmZcbkZlZCBUYXg6ICUuMmZcbk5ldDogJS4yZlxuIiwKICAgICAgICAgICB0R3Jvc3MsIHRTdGF0ZSwgdEZlZCwgdE5ldCk7CgogICAgLyogLS0tLSBNaW4vTWF4IFN1bW1hcnkgLS0tLSAqLwogICAgY2FsY0VtcGxveWVlTWluTWF4KGhlYWQpOwoKICAgIHJldHVybiAwOwp9CgoKICAgICAgICAgICAvLyBBREQgRU1QTE9ZRUUgKERZTkFNSUMgTElOS0VEIExJU1QpCiAgIApFbXBsb3llZSogYWRkRW1wbG95ZWUoRW1wbG95ZWUgKmhlYWQsIGNoYXIgKmZuLCBjaGFyICpsbiwgY2hhciAqc3QsIGludCBjbGssIGZsb2F0IHdhZ2UsIGZsb2F0IGhycykgewogICAgRW1wbG95ZWUgKmUgPSAoRW1wbG95ZWUqKW1hbGxvYyhzaXplb2YoRW1wbG95ZWUpKTsKCiAgICBzdHJjcHkoZS0+Zmlyc3ROYW1lLCBmbik7CiAgICBzdHJjcHkoZS0+bGFzdE5hbWUsIGxuKTsKICAgIHN0cmNweShlLT5zdGF0ZSwgc3QpOwogICAgZS0+Y2xvY2tOdW1iZXIgPSBjbGs7CiAgICBlLT53YWdlID0gd2FnZTsKICAgIGUtPmhvdXJzID0gaHJzOwoKICAgIGUtPm5leHQgPSBoZWFkOwogICAgcmV0dXJuIGU7Cn0KCgogICAgICAgICAgICAgICAgLy8gICBUQVggQ0FMQ1VMQVRJT04gRlVOQ1RJT05TCiAgIAoKLyogRXhhbXBsZTogNiUgc3RhdGUgdGF4ICovCnZvaWQgY2FsY1N0YXRlVGF4KEVtcGxveWVlICplKSB7CiAgICBlLT5zdGF0ZVRheCA9IGUtPmdyb3NzICogMC4wNjsKfQoKLyogRXhhbXBsZTogMTIlIGZlZGVyYWwgdGF4ICovCnZvaWQgY2FsY0ZlZFRheChFbXBsb3llZSAqZSkgewogICAgZS0+ZmVkZXJhbFRheCA9IGUtPmdyb3NzICogMC4xMjsKfQoKCiAgICAgICAgICAgICAgICAvL1RPVEFMUyAoU1VNIE9GIEFMTCBFTVBMT1lFRVMpCiAgIAp2b2lkIGNhbGNFbXBsb3llZVRvdGFscyhFbXBsb3llZSAqaGVhZCwgZmxvYXQgKnRHcm9zcywgZmxvYXQgKnRTdGF0ZSwgZmxvYXQgKnRGZWQsIGZsb2F0ICp0TmV0KSB7CiAgICBFbXBsb3llZSAqYyA9IGhlYWQ7CgogICAgd2hpbGUgKGMgIT0gTlVMTCkgewogICAgICAgICp0R3Jvc3MgKz0gYy0+Z3Jvc3M7CiAgICAgICAgKnRTdGF0ZSArPSBjLT5zdGF0ZVRheDsKICAgICAgICAqdEZlZCArPSBjLT5mZWRlcmFsVGF4OwogICAgICAgICp0TmV0ICs9IGMtPm5ldDsKICAgICAgICBjID0gYy0+bmV4dDsKICAgIH0KfQoKCiAgICAgICAgICAgICAgICAgICAgLy8gICAgIE1JTiAvIE1BWAogICAKdm9pZCBjYWxjRW1wbG95ZWVNaW5NYXgoRW1wbG95ZWUgKmhlYWQpIHsKICAgIGlmIChoZWFkID09IE5VTEwpIHJldHVybjsKCiAgICBmbG9hdCBtaW5Hcm9zcyA9IGhlYWQtPmdyb3NzLCBtYXhHcm9zcyA9IGhlYWQtPmdyb3NzOwogICAgRW1wbG95ZWUgKmMgPSBoZWFkOwoKICAgIHdoaWxlIChjICE9IE5VTEwpIHsKICAgICAgICBpZiAoYy0+Z3Jvc3MgPCBtaW5Hcm9zcykgbWluR3Jvc3MgPSBjLT5ncm9zczsKICAgICAgICBpZiAoYy0+Z3Jvc3MgPiBtYXhHcm9zcykgbWF4R3Jvc3MgPSBjLT5ncm9zczsKICAgICAgICBjID0gYy0+bmV4dDsKICAgIH0KCiAgICBwcmludGYoIlxuTWluaW11bSBHcm9zcyBQYXk6ICUuMmZcbiIsIG1pbkdyb3NzKTsKICAgIHByaW50ZigiTWF4aW11bSBHcm9zcyBQYXk6ICUuMmZcbiIsIG1heEdyb3NzKTsKfQoKCiAgICAgICAgICAgICAgICAgICAgICAgLy9SSU5UIEVNUExPWUVFUwogICAKdm9pZCBwcmludEVtcGxveWVlcyhFbXBsb3llZSAqaGVhZCkgewogICAgcHJpbnRmKCJcbioqKiBQYXkgQ2FsY3VsYXRvciAqKipcbiIpOwogICAgcHJpbnRmKCIlLTEwcyAlLTEwcyAlLThzICUtOHMgJS0xMHMgJS0xMHMgJS0xMHMgJS0xMHNcbiIsCiAgICAgICAgICAgIkZpcnN0IiwgIkxhc3QiLCAiU3RhdGUiLCAiQ2xvY2sjIiwKICAgICAgICAgICAiR3Jvc3MiLCAiU3RhdGVUYXgiLCAiRmVkVGF4IiwgIk5ldCIpOwoKICAgIEVtcGxveWVlICpjID0gaGVhZDsKICAgIHdoaWxlIChjICE9IE5VTEwpIHsKICAgICAgICBwcmludGYoIiUtMTBzICUtMTBzICUtOHMgJS04ZCAkJS0xMC4yZiAkJS0xMC4yZiAkJS0xMC4yZiAkJS0xMC4yZlxuIiwKICAgICAgICAgICAgICAgYy0+Zmlyc3ROYW1lLCBjLT5sYXN0TmFtZSwgYy0+c3RhdGUsIGMtPmNsb2NrTnVtYmVyLAogICAgICAgICAgICAgICBjLT5ncm9zcywgYy0+c3RhdGVUYXgsIGMtPmZlZGVyYWxUYXgsIGMtPm5ldCk7CiAgICAgICAgYyA9IGMtPm5leHQ7CiAgICB9Cn0K