- •Министерство образования и науки рф
- •1Общие требования
- •2Последовательность выполнения работы
- •3Порядок контроля и приёмки
- •4Пример выполнения работы
- •Создание mdi оболочки приложения. Определение структур данных в соответствии с заданием
- •4.1.1Создание mdi оболочки приложения
- •4.1.2Определение структур данных
- •4.2Добавление строк в таблицы, а также добавление фотографий
- •4.2.1Создание диалога для добавления строк в таблицы
- •4.2.2Объявление переменных, для хранения таблиц. Их инициализация и удаление
- •4.2.3Добавление строки в таблицу
- •4.2.4Загрузка изображения
- •4.2.5Отображение графического окна
- •Отображение строк таблиц
- •4.2.6Создание графического окна для отображения строк таблиц
- •4.2.7Вывод строк таблицы на экран
- •4.2.8Отображение графического окна
- •4.3Сохранение структур данных таблиц в файлы
- •4.4Чтение данных таблиц из файлов и заполнение соответствующих структур в памяти
- •4.5Реализация операций манипулирования над данными для каждой таблицы: изменение, удаление и сохранение значений в таблицах
- •4.5.1Реализация функции изменения строк таблицы на базе имеющегося диалога для добавления строк
- •4.5.2Вызов диалога добавления / изменения строк
- •4.5.3Удаление строк таблицы
- •4.6Создание фильтра строк по заданным условиям для каждой таблицы
- •4.7Реализация запросов на выбор данных из одной или нескольких таблиц
- •5Практические задания для самостоятельной работы
- •5.1Вариант 1
- •5.2Вариант 2
- •5.3Вариант 3
- •5.4Вариант 4
- •5.5Вариант 5
- •5.6Вариант 6
- •5.7Вариант 7
- •5.8Вариант 8
- •5.9Вариант 9
- •5.10Вариант 10
- •5.11Вариант 11
- •5.12Вариант 12
- •5.13Вариант 13
- •5.14Вариант 14
- •5.15Вариант 15
- •5.16Вариант 16
- •5.17Вариант 17
- •5.18Вариант 18
- •5.19Вариант 19
- •Список рекомендуемой литературы
4.2.8Отображение графического окна
В главном модуле создайте дополнительный элемент меню, который будет отображать только что созданное графическое окно.
Обработчик отображения дочернего окна
// файл main.cpp, класс TMainForm
void __fastcall TMainForm::N4Click(TObject *Sender)
{
// Создание и выделение памяти для графического окна
TfmStudentTable *fmStudentTable = new TfmStudentTable(Application);
}
Обратите внимание, что принципы отображения дочерних окон и простых диалоговых окон (см. пример 4.8) – различаются.
На рисунке 4.5 представлен примерный вид построенного окна.
Рисунок 4.5 – Рабочий вид окна отображения содержимого таблицы
4.3Сохранение структур данных таблиц в файлы
В соответствии с пунктом 6 «Общих требований» при завершении приложения все структуры данных таблиц должны выгружаться из памяти и сохраняться в файлы формата .tbl на жёстком диске. Операцию сохранения структур оформим в виде отдельной функции с именем, например, SaveDatabase. Вызов этой функции будет осуществляться из главного модуля.
Объявление функции SaveDatabase
// файл main.h, класс TMainForm
private:
...
// Сохраняет содержимое базы данных в файлы на жёстком диске
void SaveDatabase();
Реализация функции SaveDatabase
// файл main.cpp, класс TMainForm
void TMainForm::SaveDatabase()
{
int i;
// Объявление указателя на поток для работы с файлом
TFileStream *fs;
// Открытие файла для записи таблицы "Студентов"
fs = new TFileStream(ExeDirectory + "\\Students.tbl", fmCreate | fmOpenWrite);
// Объявление указателя на строку в соответствии с типом текущей таблицы
TStudent *student;
// Сканирование полного списка текущей таблицы
for (i = 0; i<Students->Count; i++)
{
// Объявление структуры для записи в файл
stStudent student2;
// Получение i-ой строки таблицы текущей таблицы
student = (TStudent *)Students->Items[i];
// Заполнение значений полей структуры значениями из i-ой строки текущей таблицы
strcpy(student2.No, student->No.c_str());
strcpy(student2.Fio, student->Fio.c_str());
strcpy(student2.GroupNo, student->GroupNo.c_str());
student2.Birthday = (double)student->Birthday;
strcpy(student2.Address, student->Address.c_str());
// Объявление указателя на поток байт в памяти для записи на диск массива байт фотоизображения
TMemoryStream *ms = new TMemoryStream();
student->Photo->SaveToStream(ms);
// Получение размера фотоизображения в байтах
student2.PhotoLen = ms->Size;
// Запись в файл строки таблицы
fs->Write(&student2, sizeof(stStudent));
// Запись в файл потока байт, содержащего фотоизображение
fs->Write(ms->Memory, ms->Size);
// Освобождение памяти, занимаемой указателем на поток байт
delete ms;
}
// Освобождение памяти, занимаемой указателем на поток для работы с файлом
delete fs;
...
}
В рассмотренном примере, сохранение файлов базы данных производится в каталог исполняемого файла приложения. Переменная ExeDirectory содержит путь к каталогу, из которого было запущено приложение. Для определения пути к текущему каталогу приложения используйте одну из следующих функцй:
int getcurdir(int drive, char *directory) – функция из состава С
AnsiString __fastcall GetCurrentDir() – функция из состава VCL
DWORD GetCurrentDirectory(DWORD nBufferLength, LPTSTR lpBuffer) – функция из состава WinAPI