
- •Курсовой проект
- •«Разработка и построение базы данных аэропорта»
- •Оглавление
- •1. Предпроектное исследование задачи 3
- •2. Постановка задачи 5
- •3. Разработка информационного обеспечения задачи 6
- •4. Разработка алгоритмов и технологии решения задачи 16
- •5. Построение приложения пользователя 26
- •6. Список использованной литературы 33
- •1. Предпроектное исследование задачи
- •1.1 Условие задачи
- •1.2 Определение предметной области
- •1.3 Ограничения предметной области
- •2. Постановка задачи
- •2.1 Описание выходных документов
- •2.2 Описание входных документов
- •3. Разработка информационного обеспечения задачи
- •3.1 Информационный анализ предметной области и выделение ио задачи
- •3.2 Выделение информационных сущностей и определение ключей в группах
- •1.Самолеты 2. Направление
- •5. Цена классов 6. Проданные билеты
- •3.3 Установление связей между сущностями
- •3.4 Построение информационно – логической модели
- •3.5 Логическое моделирование базы данных
- •3.6 Физическое моделирование базы данных
- •3.7 Исходные данные контрольного примера
- •4. Разработка алгоритмов и технологии решения задачи
- •4.1 Моделирование данных
- •4.2 Заполнение базы данных средствами sql
- •4.3 Создание запросов select
- •4.4 Использование подчинённых запросов в языке sql
- •5. Построение приложения пользователя
- •Способы создания форм
- •Панель элементов и Список полей
- •Разработка сложных форм
- •Кнопочные формы
- •Главная кнопочная форма
- •Справочная форма
- •Форма, выдающая отчеты
- •6. Список использованной литературы
4.1 Моделирование данных
Цель моделирования данных состоит в обеспечении разработчика ИС концептуальной схемой базы данных в форме одной или нескольких локальных моделей, которые относительно легко могут быть отображены в любую схему баз данных.
Таблица «Самолет»
CREATE TABLE SAMOLET
(ID_SAMOLET COUNTER NOT NULL PRIMARY KEY,
VID CHAR(40) NOT NULL,
KOLICHESTVO_MEST INTEGER NOT NULL,
KOLICHESTVO_SAMOLETOV INTEGER NOT NULL)
Таблица «Направление»
CREATE TABLE NAPRAVLENIE
(ID_NAPRAVLENIE COUNTER NOT NULL PRIMARY KEY,
NAPRAVLENIE CHAR(40) NOT NULL,
PROTYAGENNOST INTEGER NOT NULL)
Таблица «Рейсы»
CREATE TABLE REYS
(ID_REYS INTEGER NOT NULL PRIMARY KEY,
VREMYA_OTPR DATETIME NOT NULL,
ID_NAPRAVLENIE INTEGER NOT NULL,
FOREIGN KEY(ID_NAPRAVLENIE)
REFERENCES NAPRAVLENIE,
ID_SAMOLET INTEGER NOT NULL,
FOREIGN KEY(ID_SAMOLET)
REFERENCES SAMOLET)
Таблица «Проданные билеты»
CREATE TABLE PRODANNYE_BILETY
(1KLASS INTEGER,
2KLASS INTEGER,
3KLASS INTEGER,
ID_REYS INTEGER NOT NULL,
FOREIGN KEY(ID_REYS)
REFERENCES REYS)
Таблица «Цена»
CREATE TABLE CENA
(ID_CENA COUNTER NOT NULL PRIMARY KEY,
CENA MONEY NOT NULL,
ID_REYS INTEGER NOT NULL,
FOREIGN KEY(ID_REYS)
REFERENCES REYS)
Таблица «Цена класса»
CREATE TABLE CENA_CLASSA
(1K REAL,
2K REAL,
3K REAL,
ID_CENA COUNTER,
FOREIGN KEY(ID_CENA )
REFERENCES CENA)
4.2 Заполнение базы данных средствами sql
Инструкция INSERT INTO добавляет запись или записи в таблицу. Эта инструкция образует запрос на добавление записей.
Таблица «Самолет»
INSERT INTO SAMOLET
VALUES (1, "ТУ-134", 150, 3, "Россия");
Таблица «Направление»
INSERT INTO NAPRAVLENIE
VALUES (2, "Санкт-Петербург", 3530);
Таблица «Рейсы»
INSERT INTO REYS
VALUES (3, #12/30/1899 3:0:0#, 3, 1);
Таблица «Проданные билеты»
INSERT INTO PRODANNYE_BILETY
VALUES (60, 40, 30, 4);
Таблица «Цена»
INSERT INTO CENA ( CENA, ID_REYS )
VALUES (100, 5);
Таблица «Цена класса»
INSERT INTO CENA_CLASSA ( 1K, 2K, 3K )
VALUES (3, 2, 2);
Инструкция UPDATE создает запрос на обновление, который изменяет значения полей указанной таблицы на основе заданного условия отбора.
UPDATE NAPRAVLENIE SET PROTYAGENNOST = 410
WHERE PROTYAGENNOST BETWEEN 400 AND 450;
UPDATE NAPRAVLENIE SET protyagennost = 600, NAPRAVLENIE = "Москва"
WHERE (NAPRAVLENIE Like '*иг*') And (PROTYAGENNOST=1200);
Инструкция DELETE создает запрос на удаление записей, предназначенный для удаления записей из одной или нескольких таблиц, перечисленных в предложении FROM, которые удовлетворяют предложению WHERE.
DELETE *
FROM NAPRAVLENIE
WHERE PROTYAGENNOST=1000;
4.3 Создание запросов select
Все запросы на получение практически любого количества данных из одной или нескольких таблиц выполняются с помощью единственного предложения SELECT. В общем случае результатом реализации предложения SELECT является другая таблица. К этой новой (рабочей) таблице может быть снова применена операция SELECT и т.д., т.е. такие операции могут быть вложены друг в друга.
Предложение Select имеет формат:
SELECT [[ALL] | DISTINCT]{ * | элемент_SELECT
[,элемент_SELECT] ...}
FROM {базовая_таблица | представление} [псевдоним]
[,{базовая_таблица | представление} [псевдоним]] ...
[WHERE фраза]
[GROUP BY фраза [HAVING фраза]];
SELECT - (выбрать) данные из указанных столбцов и (если необходимо) выполнить перед выводом их преобразование в соответствии с указанными выражениями и (или) функциями
FROM - (из) перечисленных таблиц, в которых расположены эти столбцы
WHERE - (где) строки из указанных таблиц должны удовлетворять указанному перечню условий отбора строк
GROUP BY - (группируя по) указанному перечню столбцов с тем, чтобы получить для каждой группы единственное агрегированное значение, используя во фразе SELECT SQL-функции SUM (сумма), COUNT (количество), MIN (минимальное значение), MAX (максимальное значение) или AVG (среднее значение)
HAVING - (имея) в результате лишь те группы, которые удовлетворяют указанному перечню условий отбора групп
Кроме традиционных операторов сравнения (= | <> | < | <= | > | >=) в WHERE фразе используются условия BETWEEN (между), LIKE (похоже на), IN (принадлежит), IS NULL (не определено) и EXISTS (существует), которые могут предваряться оператором NOT (не). Критерий отбора строк формируется из одного или нескольких условий, соединенных логическими операторами: AND, OR, OR NOT, AND NOT.
1. Определить номера рейсов и время отправления самолетов на заданное направление.
SELECT DISTINCT ID_REYS, NAPRAVLENIE, VREMYA_OTPR
FROM NAPRAVLENIE INNER JOIN REYS ON NAPRAVLENIE.ID_NAPRAVLENIE=REYS.ID_NAPRAVLENIE
WHERE NAPRAVLENIE='Мурманск'
ORDER BY NAPRAVLENIE, VREMYA_OTPR;
2.Определить сумму всех проданных билетов и по каждому классу на заданное время.
SELECT VREMYA_OTPR, [1KLASS], [2KLASS], [3KLASS], ([1KLASS])+( [2KLASS])+( [3KLASS]) AS SUMMA_PAS
FROM REYS INNER JOIN PRODANNYE_BILETY ON REYS.ID_REYS=PRODANNYE_BILETY.ID_REYS
WHERE VREMYA_OTPR=#5.00.00#;
Определить прибыль по рейсам на заданное время.
SELECT REYS.ID_REYS, VREMYA_OTPR, NAPRAVLENIE, ([1KLASS]*[CENA]*[1K])+[2KLASS]*CENA*[2K]+[3KLASS]*CENA*[3K] AS PRIBYL
FROM (((NAPRAVLENIE INNER JOIN REYS ON NAPRAVLENIE.ID_NAPRAVLENIE=REYS.ID_NAPRAVLENIE) INNER JOIN PRODANNYE_BILETY ON REYS.ID_REYS=PRODANNYE_BILETY.ID_REYS) INNER JOIN CENA ON REYS.ID_REYS=CENA.ID_REYS) INNER JOIN CENA_CLASSA ON CENA.ID_CENA=CENA_CLASSA.ID_CENA
WHERE REYS.VREMYA_OTPR>#12/30/1899 4:0:0# And REYS.VREMYA_OTPR<#12/30/1899 18:0:0#
ORDER BY NAPRAVLENIE, ([1KLASS]*[CENA]*[1K])+[2KLASS]*CENA*[2K]+[3KLASS]*CENA*[3K];
5. Определить количество проданных билетов всего и по классам на 1, 9, 11 рейсы.
SELECT REYS.ID_REYS, VREMYA_OTPR, [1KLASS], [2KLASS], [3KLASS], ([1KLASS])+([2KLASS])+([3KLASS]) AS SUMMA_PAS
FROM REYS INNER JOIN PRODANNYE_BILETY ON REYS.ID_REYS=PRODANNYE_BILETY.ID_REYS
WHERE REYS.ID_REYS IN (1, 9, 11);
6.Найти процент заполнения самолетов, летящих на заданном направлении.
SELECT REYS.ID_REYS, napravlenie.napravlenie, [2 Пассажиры каждого рейса].SUMMA_PAS, KOLICHESTVO_MEST, [2 Пассажиры каждого рейса].SUMMA_PAS*100/KOLICHESTVO_MEST AS PROCENT_ZAPOLNENIYA
FROM ((napravlenie INNER JOIN reys ON napravlenie.id_napRAVLENIE=REYS.ID_NAPRAVLENIE) INNER JOIN [2 Пассажиры каждого рейса] ON REYS.ID_REYS=[2 Пассажиры каждого рейса].ID_REYS) INNER JOIN SAMOLET ON REYS.ID_SAMOLET=SAMOLET.ID_SAMOLET
WHERE NAPRAVLENIE='Санкт_Петербург'
GROUP BY VID, SAMOLET.KOLICHESTVO_SAMOLETOV, REYS.ID_REYS, [2 Пассажиры каждого рейса].SUMMA_PAS, KOLICHESTVO_MEST, napravlenie
ORDER BY REYS.ID_REYS;
Определить количество пассажиров, купивших билеты на 1 и 2 классы самолетов, произведенных в России или Белоруссии и летящих в Мурманск или Москву.
SELECT REYS.ID_REYS, PROIZVODSTVO, [1KLASS], [2KLASS], [1KLASS]+[2KLASS] AS [1+2], NAPRAVLENIE
FROM ((SAMOLET INNER JOIN REYS ON SAMOLET.ID_SAMOLET=REYS.ID_SAMOLET) INNER JOIN NAPRAVLENIE ON NAPRAVLENIE.ID_NAPRAVLENIE=REYS.ID_NAPRAVLENIE) INNER JOIN PRODANNYE_BILETY ON REYS.ID_REYS=PRODANNYE_BILETY.ID_REYS
WHERE ((PROIZVODSTVO Like '*РУС*') Or (PROIZVODSTVO Like '*ОС*')) And NAPRAVLENIE In ('МОСКВА','МУРМАНСК')
ORDER BY PROIZVODSTVO, [2KLASS], [1KLASS]+[2KLASS], NAPRAVLENIE;
Найти средний процент заполнения всех самолетов.
SELECT SUM([4 ПроцентЗАПОЛНЕНИЯ].PROCENT_ZAPOLNENIYA) AS SUMM_PR, COUNT(*) AS SUMM_REYS, SUM([4 ПроцентЗАПОЛНЕНИЯ].PROCENT_ZAPOLNENIYA)/COUNT(*) AS SREDNIY, AVG([4 ПроцентЗАПОЛНЕНИЯ].PROCENT_ZAPOLNENIYA) AS SREDNIY1
FROM [4 ПроцентЗАПОЛНЕНИЯ];
Найти количество пассажиров, купивших в течение дня билеты на заданное направление.
SELECT NAPRAVLENIE.NAPRAVLENIE, SUM([2 Пассажиры каждого рейса].SUMMA_PAS) AS SUM_PAS
FROM (REYS INNER JOIN NAPRAVLENIE ON NAPRAVLENIE.ID_NAPRAVLENIE=REYS.ID_NAPRAVLENIE) INNER JOIN [2 Пассажиры каждого рейса] ON REYS.ID_REYS=[2 Пассажиры каждого рейса].ID_REYS
WHERE NAPRAVLENIE.NAPRAVLENIE='Москва'
GROUP BY NAPRAVLENIE.NAPRAVLENIE;