Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ЛР по ОС.doc
Скачиваний:
3
Добавлен:
04.05.2019
Размер:
735.23 Кб
Скачать

4.4Чтение данных таблиц из файлов и заполнение соответствующих структур в памяти

В соответствии с пунктом 2 «Общих требований» при старте приложения необходимо производить считывание данных таблиц из файлов и заполнять соответствующие структуры в памяти. Операцию чтения структур оформим в виде отдельной функции с именем, например, LoadDatabase. Вызов этой функции будет осуществляться из главного модуля.

    1. Объявление функции LoadDatabase

// файл main.h, класс TMainForm

private:

...

// Читает содержимое базы данных из файлов на жёстком диске

void LoadDatabase();

    1. Реализация функции LoadDatabase

// файл main.cpp, класс TMainForm

void TMainForm::LoadDatabase()

{

// Объявление указателя на поток для работы с файлом

TFileStream *fs;

// Чтение таблицы Студентов

try

{

// Открытие файла для чтения таблицы "Студентов"

fs = new TFileStream(ExeDirectory + "\\Students.tbl", fmOpenRead);

// Объявление указателя на строку в соответствие с типом текущей таблицы

TStudent *student;

// Чтение из файла, пока текущая позиция курсора в файле не станет равна общей длине файла

while (fs->Position != fs->Size)

{

// Объявление структуры для записи в файл

stStudent student2;

// Чтение из файла строки таблицы

fs->Read(&student2, sizeof(stStudent));

// Выделение памяти для одной строки таблицы

student = new TStudent();

// Заполнение значений полей объекта TStudent значениями из считанной строки

student->No = student2.No;

student->Fio = student2.Fio;

student->GroupNo = student2.GroupNo;

student->Birthday = TDateTime(student2.Birthday);

student->Address = student2.Address;

if (student2.PhotoLen > 0)

{

// Объявление указателя на поток байт в памяти для чтения с диска массива байт фотоизображения

TMemoryStream *ms = new TMemoryStream();

ms->CopyFrom(fs, student2.PhotoLen);

ms->Seek(0, soFromBeginning);

// Запись фотоизображения в объект TStudent

student->Photo->LoadFromStream(ms);

// Освобождение памяти, занимаемой указателем на поток байт

delete ms;

}

// Добавление строки в общий список строк таблицы

Students->Add(student);

}

// Освобождение памяти, занимаемой указателем на поток для работы с файлом

delete fs;

}

catch (EFOpenError &e)

{

}

...

}

Блок try – catch позволяет перехватывать исключение, генерируемое приложением в случае ошибки открытия файла (например, при отсутствии файла).

4.5Реализация операций манипулирования над данными для каждой таблицы: изменение, удаление и сохранение значений в таблицах

Операции манипулирования над данными в таблицах удобнее реализовать в виде вызова отдельных функций из окна отображения строк таблицы, рассмотренного в разделе .

Действия, описанные в шагах 4.5.1 – 4.5.3, необходимо повторить для каждой отдельно создаваемой таблицы.