- •Пояснительная записка
- •1. Проектирование бд методом “Сущность-Связь”
- •Постановка задачи
- •Анализ предметной области
- •Для выполнения к/р нам понадобится как минимум 4 основных сущности:
- •Разработка окончательной структуры базы данных
- •Следовательно нам понадобятся следующие сущности:
- •1)Клиент(фио , № паспорта , город прибытия , дата поселения , номер где клиент остановился)
- •2)Номер(идентификатор[номер] номера , количество жилых мест номера , № этажа , количество проживающих в номере, цена номера)
- •1)Клиент(фио , № паспорта , город прибытия , дата поселения , номер где клиент остановился)
- •2)Номер(идентификатор[номер] номера , количество жилых мест номера , № этажа , количество проживающих в номере)
- •2. Структура базы данных
- •2)Таблица “Номер” определяет id_номера , его тип , телефон , этаж и количество проживающих в нем на данный момент человек
- •3. Система иерархии интерфейса
- •3.1.База данных содержит следующие формы:
- •3.2. Описание экранных форм:
- •4. Описание запросов
- •4. Описание отчетов
4. Описание запросов
Запрос на дежурство
Формулировка запроса: выбрать все записи из таблицы “Служащий” и соответствующие им из таблицы “Когда и где дежурить” группируя их по заданному в форме “Служащий” полю “WORK_ID”
SQL-код запроса:SELECT [Когда и где дежурить].WEEKDAY, [Когда и где дежурить].FLOUR, Служащий.WORK_ID
FROM Служащий INNER JOIN [Когда и где дежурить] ON Служащий.WORK_ID = [Когда и где дежурить].WORK_ID
WHERE (((Служащий.WORK_ID)=[Forms]![Служащий]![WORK_ID]));
Результат запроса: дни недели и соответствующие им этажи на которых дежурит работник с заданным “WORK_ID”
Запрос квартальный
Формулировка запроса: объединить все записи из выборок по таблицам “Клиент” и “В” в которых выбираются дата поселения и дата выселения(Date() для таблицы “Клиент” и WHEN_OUT для таблицы “В”) в соответствующие номера. Выборка производится по признаку пересечения временных интервалов “даты поселения-выселения” и интервала определяемого пользователем в форме “Форма отчетов”. Так же рассчитывается интервал(если он существует) пересечения.
SQL-код запроса:SELECT [Цена номера].COST, ROOM, B1, E1, B2, E2, P1, P2, P3, P4, IIf(P1<=P2 And P1<=P3 And P1<=P4,P1,
(
IIf(P2<=P1 And P2<=P3 And P2<=P4,P2,
(
IIf(P3<=P2 And P3<=P1 And P3<=P4,P3,
(
IIf(P4<=P2 And P4<=P3 And P4<=P1,P4)
)
)
)
)
)
) AS PP
FROM [SELECT Клиент.ROOM, Клиент.WHEN AS B1, Date() AS E1, Forms!Форма_отчетов!NACH_DATA AS B2, Forms!Форма_отчетов!KONECH_DATA AS E2, [Цена номера].COST , Date() - Forms!Форма_отчетов!NACH_DATA AS P1 , Forms!Форма_отчетов!KONECH_DATA - Клиент.WHEN AS P2 , Date() - Клиент.WHEN AS P3 , Forms!Форма_отчетов!KONECH_DATA - Forms!Форма_отчетов!NACH_DATA AS P4
FROM [Цена номера] INNER JOIN (НОМЕР INNER JOIN Клиент ON НОМЕР.ROOM = Клиент.ROOM) ON [Цена номера].KOL_MEST = НОМЕР.KOL_MEST
WHERE ((((Date()<[Forms]![Форма_отчетов]![NACH_DATA]) Or ([Forms]![Форма_отчетов]![KONECH_DATA]<[Клиент].[WHEN]))=False))
UNION SELECT B.ROOM, B.WHEN_IN AS B1, B.WHEN_OUT AS E1, Forms!Форма_отчетов!NACH_DATA AS B2, Forms!Форма_отчетов!KONECH_DATA AS E2, [Цена номера].COST ,
B.WHEN_OUT - Forms!Форма_отчетов!NACH_DATA AS P1 , Forms!Форма_отчетов!KONECH_DATA - B.WHEN_IN AS P2 , B.WHEN_OUT - B.WHEN_IN AS P3 , Forms!Форма_отчетов!KONECH_DATA - Forms!Форма_отчетов!NACH_DATA AS P4
FROM [Цена номера] INNER JOIN (НОМЕР INNER JOIN B ON НОМЕР.ROOM = B.ROOM) ON [Цена номера].KOL_MEST = НОМЕР.KOL_MEST
WHERE (((([B].[WHEN_OUT]<[Forms]![Форма_отчетов]![NACH_DATA]) Or ([Forms]![Форма_отчетов]![KONECH_DATA]<[B].[WHEN_IN]))=False))
]. AS [%$##@_Alias];
Результат запроса: номера интервалы проживания клиентов которых пересекались с временным интервалом заданным пользователем.
Запрос_по_всем_номерам
Формулировка запроса: Выборка всех номеров в которых разница между количеством жилых мест и занятых мест равна 0.
SQL-код запроса: SELECT НОМЕР.ROOM, НОМЕР.KOL_MEST, НОМЕР.LIVE, [KOL_MEST]-[LIVE] AS [AS]
FROM НОМЕР
WHERE ((([KOL_MEST]-[LIVE])>0));
Результат запроса: все номера в которых есть хоть одно свободное место
Поиск_город
Формулировка запроса: выборка по всем клиентам сгруппированным по равенству города прибытия с городом определенным в форме
SQL-код запроса:SELECT Клиент.GUEST_FIO, Клиент.FROM, Клиент.ROOM
FROM Клиент
WHERE (((Клиент.FROM)=[Forms]![Поиск]![Поле9]));
Результат запроса: все клиенты из заданного города
Поиск_номер
Формулировка запроса: выборка по всем клиентам сгруппированным по равенству номера проживания с номером определенным в форме
SQL-код запроса: SELECT Клиент.GUEST_FIO, Клиент.ROOM
FROM Клиент
WHERE (((Клиент.ROOM)=[Forms]![Поиск]![Поле7]));
Результат запроса: все клиенты из заданного номера
Поиск_служащего
Формулировка запроса: выборка полей “GUEST_FIO” , “WEEKDAY” , “WORK_FIO” , “FLOUR” , “ROOM” из таблиц “Клиент” , “Когда и где дежурить” , “Служащий” , “Этаж” , “НОМЕР” сгруппированных по признаку равенства полей “WEEKDAY” и “GUEST_FIO” соответствующим полям заданным в форме.
SQL-код запроса: SELECT [Когда и где дежурить].WEEKDAY, Клиент.GUEST_FIO, Служащий.WORK_FIO, НОМЕР.FLOUR, Клиент.ROOM
FROM (Этаж INNER JOIN (Служащий INNER JOIN [Когда и где дежурить] ON Служащий.WORK_ID = [Когда и где дежурить].WORK_ID) ON Этаж.FLOUR = [Когда и где дежурить].FLOUR) INNER JOIN (НОМЕР INNER JOIN Клиент ON НОМЕР.ROOM = Клиент.ROOM) ON Этаж.FLOUR = НОМЕР.FLOUR
WHERE ((([Когда и где дежурить].WEEKDAY)=[Forms]![Поиск]![ПолеСоСписком33]) AND ((Клиент.GUEST_FIO)=[Forms]![Поиск]![ПолеСоСписком20]));
Результат запроса: служащий дежуривший в определенный день недели в номере у определенного клиента.
Счет за проживание
Формулировка запроса: выборка полей “GUEST_FIO” , “PASSPORT” , “ROOM” , “KOL_MEST” , “COST” из таблиц “Клиент”, “НОМЕР” и “Цена номера” сгруппированных по признаку равенства поля “GUEST_FIO” соответствующему полю заданному в соответствующей форме. Расчет при этом значений: разница между датой поселения клиента и текущей датой и произведение цены номера на предыдущее значение.
SQL-код запроса:SELECT Клиент.GUEST_FIO, Клиент.PASSPORT, Клиент.ROOM, НОМЕР.KOL_MEST, [Цена номера].COST, Date()-[WHEN] AS [Прожил в номере], [COST]*[Прожил в номере] AS [К оплате]
FROM [Цена номера] INNER JOIN (НОМЕР INNER JOIN Клиент ON НОМЕР.ROOM = Клиент.ROOM) ON [Цена номера].KOL_MEST = НОМЕР.KOL_MEST
WHERE (((Клиент.GUEST_FIO)=[Forms]![Клиент]![GUEST_FIO]));
Результат запроса: все данные о заданном клиенте и номере в котором он проживает , а так же количество дней которые он прожил в номере и сумма которую он должен заплатить за весь срок проживания в этом номере.