#include <stdio.h>
#include <string.h>
#define SIZE 5
#define STD_HOURS 40.0
#define OT_RATE 1.5
#define FED_TAX_RATE 0.25
struct name {
char firstName[10];
char lastName[10];
};
struct employee {
struct name empName;
char taxState[3];
long int clockNumber;
float wageRate, hours, overtimeHrs;
float grossPay, stateTax, fedTax, netPay;
};
struct totals {
float wage, hours, overtime, gross, stateTax, fedTax, net;
};
struct min_max {
float min[7], max[7];
};
void getHours(struct employee data[], int size);
void calculatePay(struct employee data[], int size);
void printEmp(struct employee data[], int size);
void printStatistics(struct employee data[], int size);
int main(void)
{
struct employee data[SIZE] = {
{{"Connie", "Cobol"}, "MA", 98401, 10.60},
{{"Mary", "Apl"}, "NH", 526488, 9.75},
{{"Frank", "Fortran"}, "VT", 765349, 10.50},
{{"Jeff", "Ada"}, "NY", 34645, 12.25},
{{"Anton", "Pascal"}, "CA", 127615, 8.35}
};
getHours(data, SIZE);
calculatePay(data, SIZE);
printEmp(data, SIZE);
printStatistics(data, SIZE);
return 0;
}
void getHours(struct employee data[], int size)
{
for (int i = 0; i < size; i++) {
printf("Enter hours for employee %06li: ", data[i].clockNumber);
scanf("%f", &data
[i
].
hours); }
}
void calculatePay(struct employee data[], int size)
{
for (int i = 0; i < size; i++) {
float rate = 0.08;
data[i].overtimeHrs =
data[i].hours > STD_HOURS
? data[i].hours - STD_HOURS : 0;
data[i].grossPay =
(data[i].hours - data[i].overtimeHrs) *
data[i].wageRate +
data[i].overtimeHrs * data[i].wageRate * OT_RATE;
if (strcmp(data
[i
].
taxState, "MA") == 0) rate = 0.05;
else if (strcmp(data
[i
].
taxState, "NH") == 0) rate = 0.00;
else if (strcmp(data
[i
].
taxState, "VT") == 0) rate = 0.06;
else if (strcmp(data
[i
].
taxState, "CA") == 0) rate = 0.07;
data[i].stateTax = data[i].grossPay * rate;
data[i].fedTax = data[i].grossPay * FED_TAX_RATE;
data[i].netPay = data[i].grossPay -
data[i].stateTax - data[i].fedTax;
}
}
void printEmp(struct employee data[], int size)
{
printf("\n%-20s %-5s %8s %7s %6s %6s %8s %8s %8s %8s\n", "Name", "State", "Clock#", "Wage",
"Hours", "OT", "Gross", "StateTax",
"FedTax", "NetPay");
for (int i = 0; i < size; i++) {
char name[21];
data[i].empName.firstName,
data[i].empName.lastName);
printf("%-20s %-5s %08li %7.2f %6.1f %6.1f " "%8.2f %8.2f %8.2f %8.2f\n",
name, data[i].taxState, data[i].clockNumber,
data[i].wageRate, data[i].hours,
data[i].overtimeHrs, data[i].grossPay,
data[i].stateTax, data[i].fedTax,
data[i].netPay);
}
}
void printStatistics(struct employee data[], int size)
{
float total[7] = {0};
float min[7], max[7];
for (int i = 0; i < size; i++) {
float values[7] = {
data[i].wageRate, data[i].hours,
data[i].overtimeHrs, data[i].grossPay,
data[i].stateTax, data[i].fedTax,
data[i].netPay
};
for (int j = 0; j < 7; j++) {
total[j] += values[j];
if (i == 0 || values[j] < min[j])
min[j] = values[j];
if (i == 0 || values[j] > max[j])
max[j] = values[j];
}
}
printf("\n\nStatistics (Wage Hours OT Gross StateTax FedTax NetPay)\n");
for (int j = 0; j < 7; j++)
for (int j = 0; j < 7; j++)
printf("%8.2f ", total
[j
] / size
);
for (int j = 0; j < 7; j++)
for (int j = 0; j < 7; j++)
}
CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CgojZGVmaW5lIFNJWkUgNQojZGVmaW5lIFNURF9IT1VSUyA0MC4wCiNkZWZpbmUgT1RfUkFURSAxLjUKI2RlZmluZSBGRURfVEFYX1JBVEUgMC4yNQoKc3RydWN0IG5hbWUgewogICAgY2hhciBmaXJzdE5hbWVbMTBdOwogICAgY2hhciBsYXN0TmFtZVsxMF07Cn07CgpzdHJ1Y3QgZW1wbG95ZWUgewogICAgc3RydWN0IG5hbWUgZW1wTmFtZTsKICAgIGNoYXIgdGF4U3RhdGVbM107CiAgICBsb25nIGludCBjbG9ja051bWJlcjsKICAgIGZsb2F0IHdhZ2VSYXRlLCBob3Vycywgb3ZlcnRpbWVIcnM7CiAgICBmbG9hdCBncm9zc1BheSwgc3RhdGVUYXgsIGZlZFRheCwgbmV0UGF5Owp9OwoKc3RydWN0IHRvdGFscyB7CiAgICBmbG9hdCB3YWdlLCBob3Vycywgb3ZlcnRpbWUsIGdyb3NzLCBzdGF0ZVRheCwgZmVkVGF4LCBuZXQ7Cn07CgpzdHJ1Y3QgbWluX21heCB7CiAgICBmbG9hdCBtaW5bN10sIG1heFs3XTsKfTsKCnZvaWQgZ2V0SG91cnMoc3RydWN0IGVtcGxveWVlIGRhdGFbXSwgaW50IHNpemUpOwp2b2lkIGNhbGN1bGF0ZVBheShzdHJ1Y3QgZW1wbG95ZWUgZGF0YVtdLCBpbnQgc2l6ZSk7CnZvaWQgcHJpbnRFbXAoc3RydWN0IGVtcGxveWVlIGRhdGFbXSwgaW50IHNpemUpOwp2b2lkIHByaW50U3RhdGlzdGljcyhzdHJ1Y3QgZW1wbG95ZWUgZGF0YVtdLCBpbnQgc2l6ZSk7CgppbnQgbWFpbih2b2lkKQp7CiAgICBzdHJ1Y3QgZW1wbG95ZWUgZGF0YVtTSVpFXSA9IHsKICAgICAgICB7eyJDb25uaWUiLCAiQ29ib2wifSwgIk1BIiwgOTg0MDEsIDEwLjYwfSwKICAgICAgICB7eyJNYXJ5IiwgIkFwbCJ9LCAiTkgiLCA1MjY0ODgsIDkuNzV9LAogICAgICAgIHt7IkZyYW5rIiwgIkZvcnRyYW4ifSwgIlZUIiwgNzY1MzQ5LCAxMC41MH0sCiAgICAgICAge3siSmVmZiIsICJBZGEifSwgIk5ZIiwgMzQ2NDUsIDEyLjI1fSwKICAgICAgICB7eyJBbnRvbiIsICJQYXNjYWwifSwgIkNBIiwgMTI3NjE1LCA4LjM1fQogICAgfTsKCiAgICBnZXRIb3VycyhkYXRhLCBTSVpFKTsKICAgIGNhbGN1bGF0ZVBheShkYXRhLCBTSVpFKTsKICAgIHByaW50RW1wKGRhdGEsIFNJWkUpOwogICAgcHJpbnRTdGF0aXN0aWNzKGRhdGEsIFNJWkUpOwoKICAgIHJldHVybiAwOwp9Cgp2b2lkIGdldEhvdXJzKHN0cnVjdCBlbXBsb3llZSBkYXRhW10sIGludCBzaXplKQp7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewogICAgICAgIHByaW50ZigiRW50ZXIgaG91cnMgZm9yIGVtcGxveWVlICUwNmxpOiAiLAogICAgICAgICAgICAgICBkYXRhW2ldLmNsb2NrTnVtYmVyKTsKICAgICAgICBzY2FuZigiJWYiLCAmZGF0YVtpXS5ob3Vycyk7CiAgICB9Cn0KCnZvaWQgY2FsY3VsYXRlUGF5KHN0cnVjdCBlbXBsb3llZSBkYXRhW10sIGludCBzaXplKQp7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewogICAgICAgIGZsb2F0IHJhdGUgPSAwLjA4OwoKICAgICAgICBkYXRhW2ldLm92ZXJ0aW1lSHJzID0KICAgICAgICAgICAgZGF0YVtpXS5ob3VycyA+IFNURF9IT1VSUwogICAgICAgICAgICA/IGRhdGFbaV0uaG91cnMgLSBTVERfSE9VUlMgOiAwOwoKICAgICAgICBkYXRhW2ldLmdyb3NzUGF5ID0KICAgICAgICAgICAgKGRhdGFbaV0uaG91cnMgLSBkYXRhW2ldLm92ZXJ0aW1lSHJzKSAqCiAgICAgICAgICAgIGRhdGFbaV0ud2FnZVJhdGUgKwogICAgICAgICAgICBkYXRhW2ldLm92ZXJ0aW1lSHJzICogZGF0YVtpXS53YWdlUmF0ZSAqIE9UX1JBVEU7CgogICAgICAgIGlmIChzdHJjbXAoZGF0YVtpXS50YXhTdGF0ZSwgIk1BIikgPT0gMCkKICAgICAgICAgICAgcmF0ZSA9IDAuMDU7CiAgICAgICAgZWxzZSBpZiAoc3RyY21wKGRhdGFbaV0udGF4U3RhdGUsICJOSCIpID09IDApCiAgICAgICAgICAgIHJhdGUgPSAwLjAwOwogICAgICAgIGVsc2UgaWYgKHN0cmNtcChkYXRhW2ldLnRheFN0YXRlLCAiVlQiKSA9PSAwKQogICAgICAgICAgICByYXRlID0gMC4wNjsKICAgICAgICBlbHNlIGlmIChzdHJjbXAoZGF0YVtpXS50YXhTdGF0ZSwgIkNBIikgPT0gMCkKICAgICAgICAgICAgcmF0ZSA9IDAuMDc7CgogICAgICAgIGRhdGFbaV0uc3RhdGVUYXggPSBkYXRhW2ldLmdyb3NzUGF5ICogcmF0ZTsKICAgICAgICBkYXRhW2ldLmZlZFRheCA9IGRhdGFbaV0uZ3Jvc3NQYXkgKiBGRURfVEFYX1JBVEU7CiAgICAgICAgZGF0YVtpXS5uZXRQYXkgPSBkYXRhW2ldLmdyb3NzUGF5IC0KICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0uc3RhdGVUYXggLSBkYXRhW2ldLmZlZFRheDsKICAgIH0KfQoKdm9pZCBwcmludEVtcChzdHJ1Y3QgZW1wbG95ZWUgZGF0YVtdLCBpbnQgc2l6ZSkKewogICAgcHJpbnRmKCJcbiUtMjBzICUtNXMgJThzICU3cyAlNnMgJTZzICU4cyAlOHMgJThzICU4c1xuIiwKICAgICAgICAgICAiTmFtZSIsICJTdGF0ZSIsICJDbG9jayMiLCAiV2FnZSIsCiAgICAgICAgICAgIkhvdXJzIiwgIk9UIiwgIkdyb3NzIiwgIlN0YXRlVGF4IiwKICAgICAgICAgICAiRmVkVGF4IiwgIk5ldFBheSIpOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgY2hhciBuYW1lWzIxXTsKCiAgICAgICAgc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMgJXMiLAogICAgICAgICAgICAgICAgIGRhdGFbaV0uZW1wTmFtZS5maXJzdE5hbWUsCiAgICAgICAgICAgICAgICAgZGF0YVtpXS5lbXBOYW1lLmxhc3ROYW1lKTsKCiAgICAgICAgcHJpbnRmKCIlLTIwcyAlLTVzICUwOGxpICU3LjJmICU2LjFmICU2LjFmICIKICAgICAgICAgICAgICAgIiU4LjJmICU4LjJmICU4LjJmICU4LjJmXG4iLAogICAgICAgICAgICAgICBuYW1lLCBkYXRhW2ldLnRheFN0YXRlLCBkYXRhW2ldLmNsb2NrTnVtYmVyLAogICAgICAgICAgICAgICBkYXRhW2ldLndhZ2VSYXRlLCBkYXRhW2ldLmhvdXJzLAogICAgICAgICAgICAgICBkYXRhW2ldLm92ZXJ0aW1lSHJzLCBkYXRhW2ldLmdyb3NzUGF5LAogICAgICAgICAgICAgICBkYXRhW2ldLnN0YXRlVGF4LCBkYXRhW2ldLmZlZFRheCwKICAgICAgICAgICAgICAgZGF0YVtpXS5uZXRQYXkpOwogICAgfQp9Cgp2b2lkIHByaW50U3RhdGlzdGljcyhzdHJ1Y3QgZW1wbG95ZWUgZGF0YVtdLCBpbnQgc2l6ZSkKewogICAgZmxvYXQgdG90YWxbN10gPSB7MH07CiAgICBmbG9hdCBtaW5bN10sIG1heFs3XTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewogICAgICAgIGZsb2F0IHZhbHVlc1s3XSA9IHsKICAgICAgICAgICAgZGF0YVtpXS53YWdlUmF0ZSwgZGF0YVtpXS5ob3VycywKICAgICAgICAgICAgZGF0YVtpXS5vdmVydGltZUhycywgZGF0YVtpXS5ncm9zc1BheSwKICAgICAgICAgICAgZGF0YVtpXS5zdGF0ZVRheCwgZGF0YVtpXS5mZWRUYXgsCiAgICAgICAgICAgIGRhdGFbaV0ubmV0UGF5CiAgICAgICAgfTsKCiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA3OyBqKyspIHsKICAgICAgICAgICAgdG90YWxbal0gKz0gdmFsdWVzW2pdOwoKICAgICAgICAgICAgaWYgKGkgPT0gMCB8fCB2YWx1ZXNbal0gPCBtaW5bal0pCiAgICAgICAgICAgICAgICBtaW5bal0gPSB2YWx1ZXNbal07CgogICAgICAgICAgICBpZiAoaSA9PSAwIHx8IHZhbHVlc1tqXSA+IG1heFtqXSkKICAgICAgICAgICAgICAgIG1heFtqXSA9IHZhbHVlc1tqXTsKICAgICAgICB9CiAgICB9CgogICAgcHJpbnRmKCJcblxuU3RhdGlzdGljcyAoV2FnZSBIb3VycyBPVCBHcm9zcyBTdGF0ZVRheCBGZWRUYXggTmV0UGF5KVxuIik7CgogICAgcHJpbnRmKCJUb3RhbHM6ICAgIik7CiAgICBmb3IgKGludCBqID0gMDsgaiA8IDc7IGorKykKICAgICAgICBwcmludGYoIiU4LjJmICIsIHRvdGFsW2pdKTsKCiAgICBwcmludGYoIlxuQXZlcmFnZXM6ICIpOwogICAgZm9yIChpbnQgaiA9IDA7IGogPCA3OyBqKyspCiAgICAgICAgcHJpbnRmKCIlOC4yZiAiLCB0b3RhbFtqXSAvIHNpemUpOwoKICAgIHByaW50ZigiXG5NaW5pbXVtOiAgIik7CiAgICBmb3IgKGludCBqID0gMDsgaiA8IDc7IGorKykKICAgICAgICBwcmludGYoIiU4LjJmICIsIG1pbltqXSk7CgogICAgcHJpbnRmKCJcbk1heGltdW06ICAiKTsKICAgIGZvciAoaW50IGogPSAwOyBqIDwgNzsgaisrKQogICAgICAgIHByaW50ZigiJTguMmYgIiwgbWF4W2pdKTsKCiAgICBwcmludGYoIlxuIik7Cn0=