- •Министерство образования и науки рф
- •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.7Реализация запросов на выбор данных из одной или нескольких таблиц
Для представления результатов исполнения каждого отдельного запроса на выбор данных создайте отдельные графические окна, вызов которых необходимо реализовать через главное меню приложения.
В качестве примера будет рассмотрена реализация запроса следующего вида: вывести сведения обо всех студентах, изучающих дисциплину «Х».
Разместите необходимые графические элементы в окне, при этом не забывая присваивать осмысленные наименования объектам. Примерный вид окна представлен на рисунке 4.7.
Рисунок 4.7 – Окно вывода результатов запроса
Для реализации данного запроса необходимо сформировать обработчик нажатия клавиши «Выполнить». Логику работы выполнения запроса по поиску строк можно описать следующим образом:
Найти дисциплину в таблице «Дисциплин», соответствующую заданному названию. Если дисциплина не найдена, прервать работу алгоритма.
Найти все номера студентов в таблице «Д_С», для которых значение номера дисциплины совпадает с номером дисциплины, полученным на Шаге 1.
Для каждого найденного номера студента получить необходимые сведения из таблицы «Студент».
Сформировать строку с обобщёнными сведениями и вывести полученный результат на экран.
Ниже приведён пример программного кода, который осуществляет поиск строк, удовлетворяющих заданному критерию поиска.
Реализация обработчика нажатия клавиши «Выполнить»
// файл fmQuery1Unit.cpp, класс TfmQuery1
void __fastcall TfmQuery1::btExecuteClick(TObject *Sender)
{
lvList->Clear();
AnsiString Name = edName->Text;
bool Exists = false;
int i;
TDiscipline *discipline;
// Поиск в таблице дисциплин дисциплины с заданным названием
for (i = 0; i<MainForm->Disciplines->Count; i++)
{
discipline = (TDiscipline *)MainForm->Disciplines->Items[i];
if (discipline->Name.AnsiCompareIC(Name) == 0)
{
Exists = true;
break ;
}
}
// Если дисциплина не найдена, выйти из функции
if (Exists == false)
return ;
TD_S *disc_stud;
// Поиск в таблице Дисциплина_Студент всех номеров студентов, изучающих заданную дисциплину
for (i = 0; i<MainForm->DiscStud->Count; i++)
{
disc_stud = (TD_S *)MainForm->DiscStud->Items[i];
// Сравнение номера найденой дисциплины с номером из общего списка
if (disc_stud->DisciplineNo == discipline->No)
{
TStudent *student;
// Поиск для каждого найденного номера дисциплины сведений о студенте, изучающем дисциплину
for (int j = 0; j<MainForm->Students->Count; j++)
{
student = (TStudent *)MainForm->Students->Items[j];
// Если номера студентов совпали, выводить общую строку результата на экран
if (student->No == disc_stud->StudentNo)
{
TListItem *item;
// Добавление строки в таблицу на экране
item = lvList->Items->Add();
item->Caption = discipline->Name;
item->SubItems->Add(discipline->Teacher);
item->SubItems->Add(student->No);
item->SubItems->Add(student->Fio);
item->SubItems->Add(student->GroupNo);
item->SubItems->Add(student->Birthday.FormatString("dd.mm.yyyy"));
}
}
}
}
}
Реализация остальных запросов на выбор данных производится аналогичным образом.