Страницы

среда, 2 октября 2013 г.

Простая бд Access - Гостиница

Задание База данных «Гостиница» MS Access (12 вариант).
База данных должна содержать следующие элементы:
  • Таблица «Номерной фонд»: категория номера (люкс, одноместный первой категории, двухместный первой категории и др.); номер помещения; место (А, Б, … – в зависимости от количества мест в номере); стоимость проживания за сутки.
  • Таблица «Проживание»: дата заезда; дата выезда; номер помещения; место; Ф.И.О.; паспортные данные.
  • Таблица «Бронирование»: дата заявки; код брони; категория номера; количество человек; дата заезда; срок пребывания
Поле со списком – таблица «Номерной фонд», поле «Категория номера».
Поле подстановки – «Номер помещения» в таблице «Проживание», источник таблица «Номерной фонд».

Запросы на выборку:
  1. Постояльцы, проживающие в гостиничных номерах 5 и 40.
  2. Постояльцы, которые забронировали гостиничный номер категории «люкс» и проживали в нем в июле 2008 г.
  3. Постояльцы, проживающие в номерах со стоимостью места менее 1500 р.
Запрос с вычисляемым полем
Сумма оплаты за проживание постояльца гостиницы (таблица «Проживание»).

Групповой запрос:
Количество проживающих в гостиничных номерах каждой категории (таблица «Номерной фонд»).

Запрос с параметром:
Постояльцы, проживающие в гостиничном номере категории N

Отчет по проживанию, сгруппированный по категории номера, сортировка по месту (убывание).

Подробное описание, как можно выполнить такое задание, приведено в нулевом и первом вариантах.

Составляем таблицы и логическую схему, описываем типы данных и другие параметры полей данных (все, как сказано в методичке).
Запускаем СУБД MS Access, создаем таблицы, устанавливаем связи.
Схема базы данных в MS Access.

Справочниками являются таблицы «Места» и «Номерной фонд». Другие две таблицы служат для хранения информации по бронированию и проживанию. Связи и подчиненность таблиц друг другу видно на схеме. Решил я немного нормализовать базу, разделил "Номерной фонд" на таблицу "Места" и таблицу "Номерной фонд". А то каждый раз при заполнении места приходится набирать номер помещения, категорию, стоимость проживания. Если не лень, то можно оставить по заданию.
Переходим к запросам.
Первый запрос на выборку:

Нужно выбрать постояльцев, проживающих в номерах 5 и 40. Поскольку время проживания – текущее, то придется выбирать тех, у кого дата заезда меньше или равна текущей (функция Date() – текущая системная дата), а дата выезда – больше или равна текущей.

Второй запрос на выборку


Третий запрос на выборку


С текущей датой та же история, что и в первом запросе.

Запрос с вычисляемым полем


Используем функцию DateDiff для вычисления разницы между датами выезда и заезда. Потом полученное значение умножаем на стоимость проживания в сутки.

Групповой запрос


Нужно сгруппировать по категориям проживающих. Выбираем поля «Категория номера», «ФИО», «Дата заезда» и «Дата выезда». Нажимаем кнопку «Итоги», после этого в строке «Групповая операция» у поля «ФИО» меняем на Count (число), а в полях, относящихся к датам заезда и выезда, ставим «Условие» и прописываем его в условии отбора (<=Date(), например). И убираем у этих полей отметки вывода на экран. В результате будет подсчитано количество проживающих в данный момент.

Запрос с параметром


Делаем отчет. Многотабличный запрос


Отчет в режиме конструктора:


Итоги в отчете не рассчитываются.