#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#define MAXEMPLOYEES 130
using namespace std;
struct employee
{
string Name;
int ID;
char Salary;
float PayRate;
string Department;
string Title;
};
int main(void);
void menuStart(void);
int menuChoice(void);
int readEmployeeFile(employee personnel[]);
void displayEmployeeByElement(employee personnel[], int element);
void searchEmployeeByID(employee personnel[], int numEmployees);
void searchEmployeeBySalary(employee personnel[], int numEmployees);
void groupEmployeesByDepartment(employee personnel[], int numEmployees);
void sortEmployeesByIDandDisplay(employee personnel[], int numEmployees);
void sortEmployeesByIDandDisplayByGroup(employee personnel[], int numEmployees);
void groupEmployeesByTitle(employee personnel[], int numEmployees);
void printOut(employee personnel[]);
/*
* Main function
*/
int main()
{
menuStart();
}
/*
* Function to start the menu
*/
void menuStart(void)
{
int choice, numEmployees;
struct employee personnel[MAXEMPLOYEES];
numEmployees = readEmployeeFile(personnel);
while(choice != 8)
{
choice = menuChoice();
// switch statement for menu items
switch(choice)
{
case 1:
searchEmployeeByID(personnel, numEmployees);
break;
case 2:
searchEmployeeBySalary(personnel, numEmployees);
break;
case 3:
groupEmployeesByDepartment(personnel, numEmployees);
break;
case 4:
sortEmployeesByIDandDisplay(personnel, numEmployees);
break;
case 5:
sortEmployeesByIDandDisplayByGroup(personnel, numEmployees);
break;
case 6:
groupEmployeesByTitle(personnel, numEmployees);
break;
case 7:
break;
case 8:
break;
default:
cout << "PLEASE CHOOSE FROM OPTIONS 1-8." << endl << endl;
break;
}
}
system("pause");
exit(0);
}
/*
* Reads data from "empdata.txt" into an array
*/
int readEmployeeFile(employee personnel[])
{
ifstream inFile;
inFile.open("empdata.txt");
if (!inFile)
{
cout << "Error: Cannot open \"empdata.txt\" for input." << endl;
return -1;
}
int i = 0;
while(inFile.good())
{
getline(inFile, personnel[i].Name);
inFile >> personnel[i].ID;
inFile >> personnel[i].Salary;
inFile >> personnel[i].PayRate;
inFile.ignore();
getline(inFile, personnel[i].Department);
getline(inFile, personnel[i].Title);
i++;
}
return i;
}
/*
* Menu
*/
int menuChoice(void)
{
int choice;
cout << setw(80) << setfill('*') << "" << endl;
cout << "1. Search for an employee by their ID number." << endl;
cout << "2. Display employees' names according to salary." << endl;
cout << "3. Group employees by department." << endl;
cout << "4. Sort data by ascending employee ID numbers, display names and IDs." << endl;
cout << "5. List of employees sorted by ID # and department." << endl;
cout << "6. Display employees, by name, of a particular title." << endl;
cout << "7. Add a new employee." << endl;
cout << "8. Quit and Print." << endl << endl;
cout << setw(80) << setfill('*') << "" << endl;
cout << "Choose 1-8: ";
cin >> choice;
cout << endl;
return choice;
}
/*
* Displays a particular employee by using their position in the array.
*/
void displayEmployeeByElement(employee personnel[], int element)
{
cout << personnel[element].Name << endl;
cout << personnel[element].ID << endl;
cout << personnel[element].Salary << endl;
cout << personnel[element].PayRate << endl;
cout << personnel[element].Department << endl;
cout << personnel[element].Title << endl;
}
/*
* Loops through the struct to find an employee matching a certain ID number
*/
void searchEmployeeByID(employee personnel[], int numEmployees)
{
cout << "Enter the ID of the employee you wish to view: ";
int requestedID;
cin >> requestedID;
cout << endl;
for (int i = 0; i < numEmployees; i++)
{
if (personnel[i].ID == requestedID)
{
cout << "Name: " << personnel[i].Name << ", " << "Department: " << personnel[i].Department << ", " << "Title: " << personnel[i].Title << "\n\n";
return;
}
if (personnel[i].ID != requestedID)
{
cout << "Matching ID number was not found." << endl << endl;
return;
}
}
return;
}
// Loops through the struct to find employees matching certain salary levels.
void searchEmployeeBySalary(employee personnel[], int numEmployees)
{
// ******* NEED TO SORT THE ARRAY HERE ******
// If pers[x].PayRate > pers[x + 1].PayRate
// - swap the two elements
cout << "Enter the lowest salary you wish to view: ";
int lowestSalary;
cin >> lowestSalary;
cout << endl;
for (int i = 0; i < numEmployees; i++)
{
if (personnel[i].PayRate >= lowestSalary)
{
displayEmployeeByElement(personnel, i);
cout << endl;
}
}
return;
}
//Displays all employees who work in a certain department.
void groupEmployeesByDepartment(employee personnel[], int numEmployees)
{
cout << "Enter the Department you wish to view: ";
string requestedDepartment;
cin >> requestedDepartment;
cout << endl;
for(int i = 0; i < numEmployees; i++)
{
if (personnel[i].Department == requestedDepartment)
{
cout << personnel[i].Name << endl;
}
}
cout << endl;
return;
}
/*
* Sorts employees in Ascending order and displays each employee's name and ID number
*/
void sortEmployeesByIDandDisplay(employee personnel[], int numEmployees)
{
;
}
/*Sorts employees in ascending order by ID number and displays names,
ID numbers, and bi-weekly pay... all grouped by department*/
void sortEmployeesByIDandDisplayByGroup(employee personnel[], int numEmployees)
{
;
}
//Displays all employees of a certain Title.
void groupEmployeesByTitle(employee personnel[], int numEmployees)
{
cout << "Enter the Title you wish to view: ";
string requestedTitle;
cin >> requestedTitle;
//getline(cin, requestedTitle);
cout << endl;
for (int i = 0; i < numEmployees; i++)
{
if (personnel[i].Title == requestedTitle)
{
cout << personnel[i].Name << endl;
}
}
cout << endl;
return;
}
//Prints to output file "empoutput.txt"
void printOut(employee personnel[])
{
;
}