Основной функционал приложения реализован с помощью sql запросов:
1) selects.s_code, count (a.a_id) totalfromabiturientsa, specialitiesswherea.a_s_id=s.s_idgroupbys.s_id,s_code – считает сколько абитуриентов поступает на каждую специальность.
2) Selecta.a_surname, sum(a_math+a_physic+a_composition) summa,s.s_code,s.s_facultyfromabiturientsa, specialitiesswherea.a_s_id=s.s_idgroupbys_code,s_faculty,a_surnameorderbysummades – этот запрос выполняет сортировку абитуриентов по убыванию суммы баллов с группировкой по факультетам и специальностям.
Рисунок 5. Выбрана специальность code2
4. Структура пользовательского интерфейса
Программа данного курсового проекта состоит из четырех форм, каждая из которых появляется при нажатии на определенную кнопку. Столь малое число форм обусловлено тщательным дизайном программы с целью уменьшения количества файлов связанных с формами.
На главной форме представлены все элементы пользовательского интерфейса, требуемые для удобной работы пользователя.
Две формы выделены на отчеты.
Диаграммы строятся и выводятся в отчетах и располагаются на тех же формах.
Четвертая форма – AboutBox – предоставляет сведения о разработчике программы.
Рисунок 6. Структура пользовательского интерфейса.
Таблица 1. Назначение элементов управления главной формы (a_f)
Элемент управления | Имя (идентификатор) | Надпись | Назначение, имя процедуры |
Метка | Label3 | Выполнить SQL запрос | Считывает текст, введенный в поле редактирования, записывает его как sql выражение и выполняет.Label3Click; |
Метка | Label4 | Фильтровать | Считывает текст, введенный в поле редактирования, записывает его как условие фильтрования. Меняет фильтр у таблицы.Label4Click; |
Сетка | DBGrid2 | (Данные БД) | Обрабатывает щелчок по полю сетки. Вызывает процедуру сортировки данных выбранного поля. Работает с таблицей абитуриентов.DBGrid2TitleClick |
Селектор выбора из базы данных | DBLookupComboBox1 | (Данные БД) | Обрабатывает выбор данных из списка. Подробнее - смотреть раздел 3.DBLookupComboBox1CloseUp;DBLookupComboBox1Enter; |
Группа радиокнопок | RadioGroup1 | Отчет | Определяет, как из кнопок связанных с выбором условия фильтрации выбрана и в зависимости от этого выбирается условие фильтрации. Сама процедура фильтрации выполняется при нажатии метки Label4. |
Поле ввода | Edit2 | (Текст SQL запроса) | В это поле вводится текст sql запроса. После нажатия метки Label3 он выполнится, если не было ошибок. |
Сетка | DBGrid3 | (Данные запросов) | В этой сетке выводятся результаты всех непредопределенных sql запросов. |
Сетка | DBGrid1 | (Данные запросов) | Работает с таблицей специальностей. |
Метка | Label6 | Отчет | Выводит детализированный отчет.Label6Click |
Метка | Label8 | Выход | Завершает работу программы, сохраняя измененные таблицы, если они действительно были изменены.Label8Click |
Метка | Label9 | Отчет2 | Выводит отчет с отсортированными данными.Label9Click |
Метка | Label7 | О программе… | Выводит форму со сведениями разработчика приложения.Label7Click |
Навигатор базы данных | DBNavigator1 | (управление таблицей базы данных) | Управление данными в таблице специальностей. |
Навигатор базы данных | DBNavigator2 | (управление таблицей базы данных) | Управление данными в таблице абитуриентов. |
Кнопка | Button1 | Количество по специальностям | Запускает процедуру вывода количества абитуриентов по каждой специальности. Реализуется с помощью выполнения sql запроса с выводом результата в сетке DBGrid3.Button1Click |
Таблица 2. Назначение элементов управления формы (AboutBox)
Элемент управления | Имя (идентификатор) | Надпись | Назначение, имя процедуры |
Кнопка | OKButton | OK | Закрывает форму «О программе» |
Рисунок 6. Иерархическая модель программы.
Все функции программы реализованы при помощи свойств компонент Delphi и не требуют специального программного кода, описывающего алгоритм. Навигация по базе данных выполняется при помощи навигаторов баз данных.
В случае возникновения исключительных ситуаций выводятся сообщения об ошибках, рекомендуемые действия пользователя и программа отменяет все изменения в таблице, выполненные до сохранения.
В приведенной в приложении А схеме данных показан технологический процесс обработки данных. Данные из двух таблиц используются для выполнения выборок данных при помощи специальных sql запросов.
Разработанная программа предназначена для ведения базы данных типа Paradox для учета движения товаров. Она содержит 2 связанных таблиц, 4 формы и один модуль данных. Все компоненты связанные с базой данных собраны в одном модуле данных DM. Текст модуля находится в файле dm_u.pas. Полный текст программы находится в приложении.
Перечень файлов проекта:
a.dcu
a.dfm
a.pas
a_about.dcu
a_about.dfm
a_about.pas
a_p.cfg
a_p.dof
a_p.dpr
a_p.res
a_r.dcu
a_r.dfm
a_r.pas
a_r2.dcu
a_r2.dfm
a_r2.pas
dm_u.dcu
dm_u.dfm
dm_u.dti
dm_u.pas
Рисунок 8 – схема взаимодействия компонентов с файлами БД
Одна из причин сложности программы заключается в большом количестве способов, с помощью которых могут взаимодействовать ее компоненты, а уж программы полны и компонентами, и взаимосвязями между ними. Многие технологии пытаются сократить связи между компонентами, чтобы уменьшить количество взаимодействий: например, используется сокрытие информации, абстрагирование и интерфейсы, а также все возможности языков, способствующие этим технологиям. Существуют также технологии для проверки целостности архитектуры программы: доказательства корректности программ, моделирование, анализ требований, формальные проверки. Ни одна из перечисленных технологий не изменила радикально способа создания программ: они работают лишь на небольших задачах. В реальности всегда будут ошибки, которые мы находим с помощью тестирования и устраняем с помощью отладки.
Отладка сложна и может занимать непредсказуемо долгое время, поэтому цель в том, чтобы миновать большую ее часть. Технические приемы, которые помогут уменьшить время отладки, включают хороший дизайн, хороший стиль, проверку граничных условий, проверку правильности (исходных) утверждений и разумности кода, защитное программирование, хорошо разработанные интерфейсы, ограниченное использование глобальных данных, средства контроля и проверки.
Основной движущей силой в эволюции языков программирования была попытка предотвратить ошибки с помощью возможностей языка. Некоторые такие возможности уменьшают шанс появления целых классов ошибок: проверка диапазонов индексов, ограничение использование указателей или полный отказ от них, сборка мусора, строковые типы данных, типизированный ввод/вывод, строгая проверка типов. Однако, некоторые возможности языка напрашиваются на ошибку, например оператор goto, глобальные переменные, свободно используемые указатели, автоматические преобразования типов. Программистам следует знать зоны повышенного риска в своих языках и быть особенно осторожными при их использовании. Следует также включить все проверки компилятора и слушаться его предупреждений.
Компиляторы основных языков программирования обычно поставляются со сложными отладчиками, часто входящими в состав среды программирования, которая объединяет в себе создание и редактирование исходного кода, компиляцию, выполнение и отладку. Отладчики включают в себя графический интерфейс для пошагового выполнения программы, оператор за оператором или функция за функцией, с остановками на конкретных строках программы или при достижении какого условия. Они также предоставляют возможность форматирования и отображения значений переменных.
Но у отладчиков есть и минусы. Часть менее распространенных языков программирования не имеет отладчиков или обеспечивает лишь рудиментарные возможности отладки. Отладчики системно-зависимы. Некоторые программы не очень хорошо поддаются отладке: многопроцессные или многонитевые (многопоточные) программы, операционные системы, распределенные системы зачастую должны отлаживаться более низкоуровневыми средствами. В таких ситуациях возможно полагаться только на себя, и немногие вещи могут помочь: операторы выдачи сообщений на экран, личный опыт и способность рассуждать, глядя на код.