Write a C++ program that will need to read from a file of employee data for how many hours each employee worked for a week. Then for each of the employees, a total of the hours worked is made and then the employees are sorted into descending order based on their total hours using bubble sort. Cannot use structures or vectors.
There needs be 3 function calls total in main that:
Open and read the file into the array and add the total hours worked for each employee
Sort the array based on the total hours
Write out the output
Input file looks like this:
Output should look something similar to this:
Jones,Frank 2 3 8 3635 Smith, Tiny 883082 Turk, Tom 9104700 e Jackson,Jim 5 6 56 5 6 5 Catan,Doug 7 387257
Expert Answer
#include <iostream>
#include <fstream>
using namespace std;
string* name;
int** hours;
int* totalHours;
int count;
void read(char *fileName) {
ifstream fin;
fin.open(fileName);
if (fin.is_open()) {
fin >> count;
name = new string[7];
hours = new int*[count];
for(int i = 0; i<count; i++)
hours[i] = new int[7];
totalHours = new int[count];
for (int i = 0; i < count; i++) {
fin >> name[i];
for (int j = 0; j < 7; j++)
fin >> hours[i][j];
}
fin.close();
}
else
cout << “Cannot open file” << endl;
}
void calcTotal() {
for (int i = 0; i < count; i++) {
totalHours[i] = 0;
for (int j = 0; j < 7; j++)
totalHours[i] += hours[i][j];
}
}
void sort() {
for(int i = 0; i < count – 1; i++) {
for (int j = 0; j < count – i – 1; j++)
if (totalHours[j] > totalHours[j+1]) {
string tmpName = name[j];
name[j] = name[j+1];
name[j+1] = tmpName;
int* tmpHours = hours[j];
hours[j] = hours[j+1];
hours[j+1] = tmpHours;
int tmpTotal = totalHours[j];
totalHours[j] = totalHours[j+1];
totalHours[j+1] = tmpTotal;
}
}
}
int main() {
char fileName[100];
cout << “Enter File name” ;
cin >> fileName;
read(fileName);
calcTotal();
sort();
cout << “name:tStMtTtWtTtFtSt TTL” << endl;
for (int i = 0; i < count; i++) {
cout << “inside array”;
cout << name[i] << “t”;
for (int j = 0; j < 7; j++)
cout << hours[i][j] << “t”;
cout << totalHours[i] << endl;
}
}