פתרון משימה 8 - התבנית Array
והפונקציה Open במחלקה Employee
 
כעת, לאחר שסיימנו עם השלב בתוכנית ה-main שקורא את רשומות העדכון, נעבור לקריאת העובד המתאים מהקובץ.
החלק העיקרי בקריאת רשומת עובד, אינו קריאת הרשומה עצמה אלא מציאת רשומת העובד הרצויה. לשם כך נבנה אינדקס שיאתר עבורנו רשומות בקובץ העובדים. את בניית האינדקס נעשה בפונקציה Open שפותחת את קובץ העובדים.

void Employee::Open()
{
 Employee employee;
 in = new ifstream("employee.dat",
                    ios::in|ios::binary);
 if (in->bad())
 {
  delete in;
  throw CantOpenFile();
 }
 in->seekg(0);

 for (locationCount=0; ; locationCount++)
 {
  locationList[locationCount].location =
                              in->tellg();
  try
   {employee.Read();}
  catch (EndOfFile)
   {break;}
  if (employee.number > highestNumber)
   highestNumber = employee.number;
  locationList[locationCount].number =
                          employee.number;
 }

 highestLocation = in->tellg();
 in->close();
 delete in;
}
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

לאחר פתיחת הקובץ, הפונקציה בונה את האינדקס.
האינדקס הוא מערך של איברים מהמבנה הבא:

struct Location {
 int number;
 long location;
};
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

כל אלמנט במערך הוא בעל מספר עובד ומיקום רשומת העובד בקובץ.