- •Министерство образования и науки рф
- •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.5.2Вызов диалога добавления / изменения строк
Для того чтобы производить добавление / изменение строк, для клавиш «Добавить» и «Изменить» диалога TfmStudentTable создайте необходимые обработчики нажатия.
Реализация обработчика нажатия клавиши «Добавить»
// файл fmStudentTableUnit.cpp, класс TfmStudentTable
void __fastcall TfmStudentTable::btAddClick(TObject *Sender)
{
// Создание и выделение памяти для графического окна
TfmStudent *fmStudent = new TfmStudent(this);
// Отображение графического окна
if (fmStudent->ShowModal() == mrOk)
Refresh();
// Удаление окна
delete fmStudent;
}
Реализация обработчика нажатия клавиши «Изменить»
// файл fmStudentTableUnit.cpp, класс TfmStudentTable
void __fastcall TfmStudentTable::btUpdateClick(TObject *Sender)
{
if (lvList->Selected == NULL)
return ;
AnsiString No = lvList->Selected->Caption;
// Создание и выделение памяти для графического окна
TfmStudent *fmStudent = new TfmStudent(this, No);
// Отображение графического окна
if (fmStudent->ShowModal() == mrOk)
Refresh();
// Удаление окна
delete fmStudent;
}
Использованный метод Refresh() позволяет обновлять содержимое окна, после обновления состава строк таблицы.
4.5.3Удаление строк таблицы
Для того чтобы производить удаление строк, для клавиши «Удалить» диалога TfmStudentTable создайте обработчик нажатия.
Реализация обработчика нажатия клавиши «Удалить»
// файл fmStudentTableUnit.cpp, класс TfmStudentTable
void __fastcall TfmStudentTable::btDeleteClick(TObject *Sender)
{
if (Application->MessageBox("Вы действительно хотите удалить выбранную строку?", "Внимание", MB_OKCANCEL) == IDCANCEL)
return ;
if (lvList->Selected == NULL)
return ;
AnsiString No = lvList->Selected->Caption;
TStudent *student;
// Поиск в таблице стулдентов строки с указанным значением ПК = No
for (int i = 0; i<MainForm->Students->Count; i++)
{
student = (TStudent *)MainForm->Students->Items[i];
if (student->No.AnsiCompareIC(No) == 0)
break ;
}
// Исключеие указателя из общего списка строк таблицы
MainForm->Students->Remove(student);
// Освобождение памяти, занимаемой строкой
delete student;
Refresh();
}
4.6Создание фильтра строк по заданным условиям для каждой таблицы
В соответствии с пунктом 8 «Общих требований» для каждой таблицы предусмотреть фильтр строк, обладающий следующими возможностями:
выбор одного из условий сравнения: равно, не равно;
выбор одного или нескольких полей таблицы для сравнения;
применение одного условия или объединения по «И» двух и более условий для осуществления логического поиска;
вывод результата работы фильтра строк на экран в табличном виде.
Для реализации фильтра строк воспользуемся созданным ранее в разделе диалогом. Совмещение в одном окне функций полного просмотра таблицы и просмотра строк удовлетворяющих логическому условию позволит наглядно анализировать правильность работы фильтра строк.
Разместите необходимые графические элементы в окне, при этом не забывая присваивать осмысленные наименования объектам. Для включения / отключения использования столбца таблицы при проверке условия удобно будет воспользоваться объектом TCheckBox. Примерный вид окна представлен на рисунке 4.6.
Рисунок 4.6 – Расширенное окно просмотра строк таблицы с возможностью фильтрации строк
Для реализации функции фильтрации строк необходимо сформировать обработчик нажатия клавиши «Применить». Логику работы фильтра строк можно описать следующим образом:
Организовать цикл по всем строкам таблицы
Получить очередную i-ую строку
Проверить использование первого столбца таблицы при поиске строк. Если столбец используется перейти к Шагу 3.1, иначе к Шагу 4.
Проверить на равенство значение первого столбца таблицы i-ой строки и значение заданное в фильтре. Сохранить результат сравнения.
Если выбранное условие равенства для первого столбца таблицы задано как «равно» и сохранённый результат сравнения на Шаге 3.1 «ложь», пропустить i-ую итерацию цикла и перейти к Шагу 2.
Если выбранное условие равенства для первого столбца таблицы задано как «не равно» и сохранённый результат сравнения на Шаге 3.1 «истина», пропустить i-ую итерацию цикла и перейти к Шагу 2.
Выполнить действия, описанные в Шаге 3, для остальных столбцов таблицы
Выполнение этого шага производится, только если каждое из используемых условий «истинно». Вывести i-ую строку на экран
Перейти к шагу 2
Ниже приведён пример программного кода, который осуществляет поиск строк, удовлетворяющих заданному критерию поиска.
Реализация обработчика нажатия клавиши «Применить»
// файл fmStudentTableUnit.cpp, класс TfmStudentTable
void __fastcall TfmStudentTable::btApplyClick(TObject *Sender)
{
lvListFilter->Clear();
imPhotoFilter->Picture->Bitmap = NULL;
TListItem *item;
TStudent *student;
bool Equal = false;
// Поиск в таблице студентов
for (int i = 0; i<MainForm->Students->Count; i++)
{
// Получение i-ой строки таблицы текущей таблицы
student = (TStudent *)MainForm->Students->Items[i];
// Проверка использования столбца
if (chbNo->Checked == true)
{
Equal = (student->No.AnsiCompareIC(edNoValue->Text) == 0) ? true : false;
// выбрано условие равенства
if (cbNoCondition->Text == "равно" && Equal != true)
continue ;
// выбрано условие не равенства
if (cbNoCondition->Text == "не равно" && Equal == true)
continue ;
}
if (chbFio->Checked == true)
{
Equal = (student->Fio.AnsiCompareIC(edFioValue->Text )== 0) ? true : false;
if (cbFioCondition->Text == "равно" && Equal != true)
continue ;
if (cbFioCondition->Text == "не равно" && Equal == true)
continue ;
}
...
...
// Только если каждое из заданных условий истинно, добавлять и выводить на экран строку
item = lvListFilter->Items->Add();
item->Caption = student->No;
item->SubItems->Add(student->Fio);
...
}
}