- •1 Теория и практическая реализация систем управления базами данных
- •2 Разработка базы данных
- •2.2 Процедура нормализации
- •2.3 Разработка логической модели данных
- •2.4 Разработка физической модели данных
- •2.5 Разработка программы автогенерации
- •3 Разработка программного приложения
- •3.2 Разработка форм
- •3.4 Разработка меню
- •3.5 Обеспечение многопользовательской работы
- •3.3 Разработка отчетов
- •3.6 Результаты тестирования приложения
3.3 Разработка отчетов
Решение задачи построения отчетных форм состоит из двух этапов:
выбор данных из базы данных;
формирование на основании выбранных данных отчетов.
Для решения первой подзадачи оптимальным является использование представлений (Local View). При разработке представлений может быть использован язык SQL. Для построения отчетных форм на основании разработанных представлений, использован стандартный визуальный инструментарий Visual FoxPro по созданию отчетов.
Для формирования отчета «Среднее число баллов абитуриентов 10 наиболее встречающихся школ» разработан запрос RepoA1 (рисунок 3.17).
SELECT TOP 10 E.school, AVG(E.result) AS avgresult, COUNT(1) AS _cnt;
FROM ;
Enrollee E;
WHERE ( result ) IS NOT NULL;
AND ( result ) > ( 0 );
GROUP BY E.school;
ORDER BY 3 DESC
Рисунок 3.17 – Запрос RepoA1
Для формирования отчета «Наиболее успешные школы» разработан запрос RepoA2 (рисунок 3.18). Среднее число баллов наиболее успешных школ по городу в целом. Находим студентов с наиболее высокими баллами и ищем их школу. Выбираются все студенты, баллы, школы, выполняется группировка по школе, определяется максимальный балл среди студентов школы. Результат сортируется по баллам.
SELECT E.school, MAX(E.result) AS avgresult;
FROM ;
Enrollee E;
WHERE ( result ) IS NOT NULL;
AND ( result ) > ( 0 );
GROUP BY E.school;
ORDER BY 2 DESC
Рисунок 3.18 – Запрос RepoA2
Для формирования отчета «Средний балл поступивших абитуриентов, поступивших по каждой специальности каждого факультета» разработан запрос RepoB (рисунок 3.19).
SELECT f.Id AS FacultyId , f.Name AS FacultyName , s.Id AS SpecialityId , s.Name AS SpecialityName , x.Middle FROM ( SELECT e.SpecialityId , SUM(e.Middle)/COUNT(1) AS Middle FROM Enrollee AS e JOIN Student AS s ON s.EnrolleeId = e.Id GROUP BY e.SpecialityId WHERE s.TypeId IS NOT NULL AND s.TypeId > 0 ) AS x JOIN Speciality AS s ON s.Id = x.SpecialityId JOIN Faculty AS f ON f.Id = s.FacultyId
Рисунок 3.19 – Запрос RepoB
3.4 Разработка меню
Для разработки меню использован мастер среды Visual FoxPro (рисунок 3.20).
Рисунок 3.20 – Разработка меню с использованием мастер среды Visual FoxPro
При выборе команд меню выполняется вызов соответствующих методов из модуля Guide. Подключение меню выполняется в модуле _Curs.
3.5 Обеспечение многопользовательской работы
При решении задачи обеспечения многопользовательской работы приложения необходимо реализовать выполнение следующих требований:
обеспечение целостности данных;
масштабируемость;
высокая скорость работы.
Для решения задачи с учетом вышеперечисленных требований, в разрабатываемом программном обеспечении используются следующие функциональные возможности VFP:
транзакции;
модификация данных с использованием команд с применением синтаксиса SQL;
обработка исключений.
Транзакции обеспечивают наибольшую защиту существующим данным. Visual FoxPro предоставляет три команды, которые обеспечивают контроль за транзакциями:
BEGIN TRANSACTION – команда предназначена для инициализации транзакции;
ROLLBACK – выполняет откат всех изменений, сделанных после последней команды BEGIN TRANSACTION;
END TRANSACTION – блокирует записи, записывает на диск все изменения, сделанные после ближайшей команды BEGIN TRANSACTION, затем снимает блокировку с записей.
Если другие пользователи в сети пытаются получить доступ к записям, которые модифицируются в транзакции, им придется ждать завершения транзакции. Поэтому транзакции в разработанной программе минимальны по длине и включают запросы SQL на модификацию данных.
Для модификации данных в программе используются команды SQL (таблица 3.3).
Таблица 3.3 – Команды модификации данных
Команда |
Описание |
Что блокируется |
Блокировка |
UPDATE FROM |
Изменение записей |
Вся таблица |
Автоматическая |
INSERT INTO |
Добавление записей |
Заголовок таблицы |
Автоматическая |
DELETE FROM |
Удаление записей |
Текущая запись |
Автоматическая |
Возможны два подхода к обработке возможных ошибок при совместном доступе к данным:
программная блокировка/разблокировка записей или таблицы перед началом выполнения модификации данных с обработкой результата операции блокировки (команды FLOCK, RLOCK);
безусловное выполнение модификации данных с обработкой ошибки операции.
В реализуемом программном продукте выбран второй способ работы при модификации данных. Для обработки ошибки выполнения используется механизм структурированного управления ошибок исполнения с помощью команды TRY ... CATCH ... FINALLY. Используя эту команду, можно анализировать выполнение отдельных команд (TRY-блок) программы как на этапе отладки, так и во время коммерческой эксплуатации программы. Причем FINALLY-блок позволяет восстанавливать состояние системы после обработки (средствами САТСН-блока) возникшей в TRY-блоке ошибки.
