Code:
#include <fstream>
using namespace std;
class EmployeeData
{
private:
int empID [200];
double empPayRate [200];
int empCt;
int index;
double payRate;
int found;
int mid;
int seqCt;
int binCt;
public:
EmployeeData();
void loadArrays();
void printArray();
int seqSearch(int);
int binSearch(int);
void displaySeqSearchResults();
void displayBinSearchResults();
};
EmployeeData::EmployeeData()
{
empCt = 0;
seqCt = 0;
binCt = 0;
payRate = 0.0;
for(int empCt = 0; empCt < 200; ++empCt)
{
empID [index] = 0;
}
}
void EmployeeData::loadArrays()
{
ifstream employee;
employee.open("employee.dat");
if(employee.is_open())
{
employee >> empID[empCt]
>> empPayRate[empCt];
while(!employee.eof())
{
index = empCt;
empCt = empCt + 1;
employee >> empID[empCt]
>> empPayRate[empCt];
}
employee.close();
}
else
{
empCt = -1;
Console::WriteLine("\nFile Failed To Open");
}
}
int EmployeeData::seqSearch(int reqEmpID)
{
found = -1;
index = 0;
seqCt = 0;
for(index = 0; index < empCt; ++index)
{
++seqCt;
if(reqEmpID == empID[index])
{
found = empID[index];
payRate = empPayRate[index];
return found;
}
}
return found;
}
int EmployeeData::binSearch(int reqEmpID)
{
int first = 0;
int last = empCt - 1;
int found = 0;
while(first <= last && found == 0)
{
mid = (first + last) / 2;
++binCt;
if(empID[mid] == reqEmpID)
{
found = 1;
payRate = empPayRate[mid];
mid = empID[mid];
}
if(empID[mid] < reqEmpID)
{
first = mid + 1;
}
else
{
last = mid - 1;
}
if(found == 0)
{
mid = -1;
}
else
{
return mid;
}
}
}
void EmployeeData::displaySeqSearchResults()
{
if(found == -1)
{
Console::Write("\nSequential could not find employee.");
}
else
{
Console::WriteLine("\nSequential found employee {0} and the pay Rate is {1}",
found.ToString("D0"), payRate.ToString("C2"));
Console::WriteLine("\nSequential took {0} searches to find employee.",
seqCt.ToString("D0"));
}
}
void EmployeeData::displayBinSearchResults()
{
if(mid == -1)
{
Console::Write("\nBinary could not find employee.");
}
else
{
Console::WriteLine("\nBinary found employee {0} and the pay rate is {1}",
mid.ToString("D0"), payRate.ToString("C2"));
Console::WriteLine("\nBinary took {0} searches to find employee.",
binCt.ToString("D0"));
}
}
void EmployeeData::printArray()
{
while(index < empCt)
{
Console::WriteLine("\nEmployee #{0} Pay Rate {1} ",
empID[index].ToString("D0"), empPayRate[index].ToString("C2"));
++index;
}
}
