summaryrefslogtreecommitdiffstats
path: root/C++/Structs/Structs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'C++/Structs/Structs.cpp')
-rw-r--r--C++/Structs/Structs.cpp112
1 files changed, 112 insertions, 0 deletions
diff --git a/C++/Structs/Structs.cpp b/C++/Structs/Structs.cpp
new file mode 100644
index 0000000..e556264
--- /dev/null
+++ b/C++/Structs/Structs.cpp
@@ -0,0 +1,112 @@
+// Name: msglm
+// Date: Sep 29th, 2022
+// Program Name: Structs
+// Description: Given an input file, output gross pay, taxes, net pay, and other financial information.
+
+#include <iostream>
+#include <fstream>
+#include <string>
+using namespace std;
+
+
+//Structures
+struct Employee {
+ string fname;
+ string lname;
+ string job;
+ int employeeNum;
+ float hrsWorked;
+ float wage;
+ int deductions;
+};
+
+//Takes in the initalized file and turns it into a vector of arrays of strings
+Employee serializeIntoStruct(ifstream & fileVar) {
+ Employee temp;
+ getline(fileVar, temp.fname);
+ getline(fileVar, temp.lname);
+ getline(fileVar, temp.job);
+ fileVar >> temp.employeeNum;
+ fileVar >> temp.hrsWorked;
+ fileVar >> temp.wage;
+ fileVar >> temp.deductions;
+ return temp;
+}
+
+//given hours work, return the amount of overtime.
+float overtime(Employee employee) {
+ if (employee.hrsWorked > 40) {
+ float oTHours = employee.hrsWorked - 40;
+ if (oTHours > 0) {
+ return oTHours;
+ }
+ }
+ return 0;
+}
+
+//Given the deductions, return the taxrate
+float taxRate(Employee employee) {
+ if (employee.deductions <= 0) {
+ return 0.30;
+ } else if (0.30-(employee.deductions*0.05) <= 0.10) {
+ return 0.10;
+ } else {
+ return 0.30-(employee.deductions*0.05);
+ }
+}
+
+//Intake the employee in question, his overtime, and then the tax rate he's subject to
+//
+void outputGrossTaxPay(Employee employee, float overtime, float taxRate) {
+
+ float overtimePay = overtime*(employee.wage*1.5);
+ float normalPay;
+ if (overtime > 0) {
+ normalPay = employee.wage*40;
+ } else {
+ normalPay = employee.wage*employee.hrsWorked;
+ }
+ float grossPay = overtimePay + normalPay;
+ float withheld = taxRate*grossPay;
+ cout << "Employee Name: " << employee.fname << " " << employee.lname << endl;
+ cout << "Job Title: " << employee.job << endl;
+ cout << "Employee Number: " << employee.employeeNum << endl;
+ cout << "Hours Worked: " << employee.hrsWorked << endl;
+ cout << "Hourly Wage: $" << employee.wage << endl;
+ cout << "Deductions Claimed: " << employee.deductions << endl;
+ if (overtime > 0) {
+ cout << "Overtime Hours: " << overtime << endl;
+ cout << "Overtime Pay: $" << overtimePay << endl;
+ }
+ cout << "Gross Pay: $" << grossPay << endl;
+ cout << "Tax Withheld: $" << withheld << endl;
+ cout << "Net Pay: $" << grossPay-withheld << endl;
+
+
+
+}
+
+int main() {
+ //Variable declaration
+ ifstream fileVar;
+ fileVar.open("input.txt");
+
+ if (!fileVar) {
+ cout << "ERROR! input.txt failed to open!";
+ exit(1);
+ }
+
+ Employee readValues = serializeIntoStruct(fileVar);
+ outputGrossTaxPay(readValues, overtime(readValues), taxRate(readValues));
+
+
+
+}
+
+/*
+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License Version 3 ONLY as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */