Система бронирования мест в отелях города

Разработка системы управления гостиничного портала компании "Петербургские Отели" с интеграцией комплекса модулей для управления его содержимым. Основные цели создания и требования, выдвигаемые при разработке системы бронирования мест в отелях города.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 15.06.2012
Размер файла 2,9 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Полезным элементом при описании гостиниц и не только является фотогалерея - отсортированный определенным образом набор фотографий. Если говорить непосредственно о сфере бронирования, то отдельно можно выделить фотогалерею номеров гостиниц и фотогалерею самих гостиниц. Структуру представления фотогалерей можно увидеть на рисунке 3.6.

Рисунок 3.6 - ER-диаграмма фотогалерей номеров и гостиниц

Любая фотогалерея прежде всего состоит непосредственно из самих фотографий (далее для общности изображений), для описания которых служит таблица image (таблица 3.30).

Таблица 3.30 - Описание таблицы image базы данных

Название

тип данных

Описание

id_image

int

Идентификатор изображения. Первичный ключ.

id_folder

int

Идентификатор папки. Указывает на папку, в которой лежит данная фотография.

id_created

int

Идентификатор создания. По нему находится информация о первом внесении информации об изображении в базу данных.

id_modify

int

Идентификатор создания. По нему находится информация о последних изменениях данных об изображении.

name

varchar (150)

Название фотографии.

alt

varchar (150)

Альтернативный текст для изображения. Выводится, если броузер по каким-либо причинам не может показать изображение, или при наведении на него.

width

int

Ширина изображения в пикселях.

height

int

Высота изображения в пикселях.

size

int

Размер изображения в байтах.

Следует отметить, что в базе хранится на первый взгляд избыточная информация о размерах изображения, которая может быть вычислена программными средствами. Дело в том, что иногда необходимо сформировать список изображений, отвечающих определенным параметрам. Это может быть, например, группа маленьких фотографий, которые не потребуют длительной загрузки или обработки.

Таблица folder (таблица 3.31) содержит информацию о папке, в которую записан соответствующий файл. В данном случае это фотография.

Таблица 3.31 - Описание таблицы folder базы данных

Название

тип данных

Описание

id_folder

int

Идентификатор папки. Первичный ключ.

fol_id_folder

int

Идентификатор папки. Указывает на папку, в которой лежит данная папка.

id_created

int

Идентификатор создания. По нему находится информация о первом внесении информации об изображении в базу данных.

id_meta

int

Идентификатор мета данных. По нему находится информация о мета-данных по умолчанию для страниц, лежащих в данной папке.

name

varchar (150)

Логической название папки.

folder_adress

varchar (150)

Физическое название папки.

За формирований фотогалерей отвечают отдельные таблицы number_galery (таблица 3.32) и hotel_galery (таблица 3.33). По идентификатору номера или гостинцы можно найти те фотографии, которые к ним относятся, а значит и сформировать фотогалерею.

Таблица 3.32 - Описание таблицы number_galery базы данных

Название

тип данных

Описание

id_number

int

Идентификатор номера. Первичный ключ.

id_image

int

Идентификатор изображения. Первичный ключ.

list_num

int

Сортировочный номер. Позволяет сортировать изображения в фотогалерее.

Таблица 3.33 - Описание таблицы hotel_galery базы данных

Название

тип данных

Описание

id_hotel

int

Идентификатор гостиницы. Первичный ключ.

id_image

int

Идентификатор изображения. Первичный ключ.

list_num

int

Сортировочный номер. Позволяет сортировать изображения в фотогалерее.

Следует отметить, что данная структура позволяет формировать любые фотогалереи простым добавлением таблицы наподобие number_galery или hotel_galery.

3.2.2 Разработка структуры шаблонов страниц сайта

На большинстве порталов существуют типовые шаблоны, которым соответствует группа страниц сайта. Для того чтобы хранить информацию о таких шаблонах, в базе данных разработана структура, ER-диаграмма, которой представлена на рисунке 3.7.

Рисунок 3.7 - ER-диаграмма шаблонов страниц сайта

Центральным элементом в структуре шаблонов является таблица template (таблица 3.34). Он отвечает за сбор частей шаблона воедино.

Таблица 3.34 - Описание таблицы template базы данных

Название

тип данных

Описание

id_template

int

Идентификатор шаблона. Первичный ключ.

id_head

int

Идентификатор заголовка. Указывает на информацию о заголовочных данных страниц, относящихся к шаблону.

id_block

int

Идентификатор блока кода. Указывает на основной блок, отвечающий за формирование html-документа.

name

varchar (70)

Название шаблона.

Дополнительно для описания шаблона служат таблицы head (таблица 3.35) и block (таблица 3.36). Таблица head описывает ту часть шаблона, которая находится до тега <body /> в html-документах. Это мета-данные (помимо уже описанных в таблице 3.10); дополнительно подключаемые файлы, к которым относятся Java-скрипты и css-файлы. Таблица block содержит код, который лежит в теге <body />. Причем такой код может включать подблоки. Для вставки подблоков идентификатор подблока записывается в фигурные скобки через символ # (например: {#21}).

Таблица 3.35 - Описание таблицы head базы данных

Название

тип данных

Описание

id_head

int

Идентификатор заголовка. Первичный ключ.

name

varchar (70)

Название заголовка.

head_text

text

Текст заголовка.

Таблица 3.36 - Описание таблицы block базы данных

Название

тип данных

Описание

id_block

int

Идентификатор блока кода. Первичный ключ.

Name

varchar (70)

Название блока кода.

Block_text

text

Текст блока кода.

Шаблоны страниц сайта, позволяют использовать одну и ту же информацию в различном графическом представлении, что очень важно для фирм, занимающихся бронированием номеров в отелях, т.к. им зачастую требуется большой количество сайтов, содержащих сведения о гостиницах города.

3.2.3 Разработка структуры отдельных страниц сайта

На большинстве сайтов изменения требуется вносить не только в справочную информацию, но и в статьи и обзоры. Для этого была разработана структура страниц сайта, ER-диаграмма которой представлена на рисунке 3.8.

Рисунок 3.7 - ER-диаграмма отдельных страниц сайта

Основой в структуре отдельных страниц сайта выступает таблица page (таблица 3.37). Непосредственно же сама информация о страницах представлена в таблицах, на которые она ссылается.

Таблица 3.37 - Описание таблицы page базы данных

Название

тип данных

Описание

id_page

int

Идентификатор страницы. Первичный ключ.

id_template

int

Идентификатор шаблоны. Указывает на шаблон, согласно которому должна отображаться данная страница.

id_meta

int

Идентификатор мета-данных. По нему находится информация о мета-тегах страницы.

id_folder

int

Идентификатор папки. Указывает на папку, в которой расположена данная страница.

id

int

Идентификатор автора. Указывает на информацию о стороннем источники, если такой имеется.

id_publish

int

Идентификатор публикования. По нему находится информация о необходимости размещения данной страницы в общий доступ.

id_created

int

Идентификатор создания. По нему находится информация о первом внесении информации о странице в базу данных.

id_modify

int

Идентификатор изменений. По нему находится информация о последних изменениях страницы.

name

varchar (150)

Название (заголовок) страницы.

file_name

varchar (255)

Название файла, которому соответствует данная страница.

Практически все таблицы, на которые ссылается таблица page, уже рассматривались ранее: publish (таблица 3.7), modify (таблица 3.8), created (таблица 3.9), metas (таблица 3.10), folder (таблица 3.31). Исключение составляет лишь таблица authorship (таблица 3.38). Она предназначена для описания данных, берущихся со сторонних источников с целью сохранения авторских прав их владельцами.

Таблица 3.38 - Описание таблицы authorship базы данных

Название

тип данных

Описание

id

int

Идентификатор автора. Первичный ключ.

authorname

varchar (70)

Имя автора.

source

varchar (255)

Ссылка на источник информации.

Кроме типичного для отдельных страниц функционала система предусматривает и дополнительный. Во-первых, система предусматривает возможность сбора статистики о посещаемости. Для этого предназначены таблица visits (таблица 3.39), которая хранит информацию о посетителях сайта и таблица page_views (таблица 3.40), которая содержит сведения о том кто из посетителей, какие страницы просматривал и когда.

Таблица 3.39 - Описание таблицы visits базы данных

Название

тип данных

Описание

id_visits

int

Идентификатор посетителя. Первичный ключ

id_session

int

Идентификатор сессии. Указывает на сессию, соответствовавшую данному посетителю.

hits

int

Количество хитов посетителя.

first_enter

datetime

Время и дата первого посещения.

last_enter

datetime

Время и дата последнего посещения.

ip

varchar (16)

IP-адрес посетителя.

location_history

varchar (255)

Информация о странице, с которой посетитель пришел на сайт.

Таблица 3.40 - Описание таблицы page_views базы данных

Название

тип данных

Описание

id_page

int

Идентификатор страницы. Первичный ключ.

id_visits

int

Идентификатор посетителя. Первичный ключ.

view_date

datetime

Время и дата последнего просмотра страницы посетителем.

Во-вторых, система предусматривает формирование из группы отдельных страниц новостных разделов, статей по определенной теме и просто меню. Реализация этой задачи основана на таблице special_pages (таблица 3.41), которая отвечает за формирование групп страниц, и таблице page_type (таблица 3.42), которая определяет тип страниц в таких группах (новость, статья и т.д.).

Таблица 3.41 - Описание таблицы special_pages базы данных

Название

тип данных

Описание

id_spec_page

int

Идентификатор специальной страницы. Первичный ключ.

id_page

int

Идентификатор страницы. Указывает на страницу, которая входит в соответствующий блок

id_page_type

int

Идентификатор типа страницы. Указывает к какой группе относится страница (новость, статья и т.д.)

announcement

text

Анонс. Краткое изложение содержания страницы.

date

date

Дата.

Таблица 3.42 - Описание таблицы page_type базы данных

Название

тип данных

Описание

id_page_type

int

Идентификатор типа страницы. Первичный ключ.

name

varchar (20)

Фиксированный набор значений: “Новость”, “Статья”, “Пункт Меню”.

3.2.3 Разработка структуры голосований и опросов

Очередным дополнительным модулем, предусматриваемым системой является модуль голосований и опросов. Его ER-диаграмма представлена на рисунке 3.8.

Рисунок 3.8 - ER-диаграмма голосований и опросов

Для описания тем голосований или вопросов служит таблица voiting (таблица 3.43), а за голоса отвечает таблица answers (таблица 3.44). Также в структуре присутствуют таблицы metas, modify и created, назначение которых очевидно.

Таблица 3.43 - Описание таблицы voiting базы данных

Название

тип данных

Описание

id_voiting

int

Идентификатор голосования (опроса). Первичный ключ.

name

varchar (70)

Название голосования (опроса).

question

varchar (255)

Вопрос.

start_date

datetime

Начало действия голосования.

finish_date

datetime

Конец действия голосования.

Таблица 3.44 - Описание таблицы special_pages базы данных

Название

тип данных

Описание

id_answer

int

Идентификатор ответа. Первичный ключ.

id_voiting

int

Идентификатор голосования (опроса)

id_created

int

Идентификатор создания. По нему находится информация о первом внесении информации об ответе в базу данных.

id_modify

int

Идентификатор изменений. По нему находится информация о последних изменениях об ответе.

id_meta

int

Идентификатор мета-данных. По нему находится информация о мета-тегах ответов.

answer

varchar (150)

Ответ.

num

int

Количество ответов.

4. Разработка Пользовательского интерфейса системы управления сайтом и заявками на бронирование номеров

Основное требование, которому должен удовлетворять пользовательский интерфейс - простота и удобство использования. Именно поэтому количество элементов на каждой из страниц сведено к минимуму. Кроме этого следует учесть, что приложение должно минимально загружать каналы передачи данных, поэтому обновляемая при перезагрузке информация должна быть по возможности уменьшена.

4.1 Система управления сайтом

Как уже упоминалось, в базовой версии управление сайтом сводится к редактированию информации о гостиницах. Это основное назначение всей системы, поэтому после авторизации в системе загружается страница со списком имеющихся гостиниц (рисунок 4.1).

Рисунок 4.1 - список гостиниц. Сортировка по названию по возрастанию.

4.1.1 Работа со списками элементов в системе управления сайтом

Выводимый список является отсортированным, причем тип сортировки можно менять. При смене типа сортировке перезагружается только содержимое таблицы. А остальные данные остаются нетронутыми. Сортировкой по умолчанию являются сортировка по названию, а наиболее распространенной после нее - по дате изменения (рисунок 4.2), позволяющая находить гостиницы со свежими изменениями. Смена сортировки осуществляется простым нажатием на значок рядом с соответствующим заголовком столбца.

Рисунок 4.2 - список гостиниц. Сортировка по дате изменения по возрастанию.

Следует отметить, что сортировка допускается как по возрастанию, так и по убыванию. На рисунках 4.3 и 4.4 представлены соответствующие варианты для сортировки по идентификатору.

Рисунок 4.3 - список гостиниц. Сортировка по идентификатору по возрастанию.

Рисунок 4.4 - список гостиниц. Сортировка по идентификатору по убыванию.

Кроме стандартных полей для сортировки есть еще одно - поле “сорт.”. Если список необходимо отсортировать в строго заданном порядке можно просто внести соответствующую информацию о гостинице (сортировочный номер). Отсортированный по данному полю список можно увидеть на рисунке 4.5.

Рисунок 4.5 - список гостиниц. Сортировка по сортировочному номеру по возрастанию.

Система предусматривает очень удобную навигацию. В левой части постоянно находится основное меню, позволяющее переходить между основными разделами. В верхней части содержится информацию о текущем пользователе системы управления, а чуть ниже находится навигационный путь, с помощью которого всегда можно вернуться на верхние уровни.

Над и под таблицей содержится удобный блок, позволяющий перемещаться по списку, если он не помещается на одной странице.

Кроме того, предусмотрены кнопки “Добавить элемент" и “Удалить отмеченный”. Кнопка добавления перенаправляет пользователя на соответствующую страницу, а кнопка удаления стирает всю информацию об элементах в списке, слева от которых проставлена галочка.

Для перехода к редактированию элемента необходимо нажать либо на значок редактирование, либо на название необходимого элемента. Очень важно, что при этом перезагрузится исключительно поле с таблицей, вместо которого загрузится форма для редактирования элемента (рисунок 4.6). Кстати обработка кнопки добавления осуществляется по тому же принципу.

Рисунок 4.6 - редактирование гостиницы. Общая информация.

4.1.2 Работа с отдельными элементами системы управления сайтом

При переходе к редактированию гостиниц открывается форма с набором вкладок:

· “Общая информация”;

· “Контакты и адреса”;

· “Периоды”;

· “Номера”;

· “Мета-данные”.

Вкладкой по умолчанию является вкладка “Общая информация” (рисунок 4.6). Их смена осуществляется простым кликом по ним, причем перегружается только непосредственно информация самих вкладок.

Во вкладке “Общая информация” вносятся изменения о необходимости размещения гостиницы в общий доступ и базовая информация о гостинице, такая как название.

Вкладка “Контакты и адреса” (рисунок 4.7) отвечает соответственно за редактирование контактной информации. Для добавления дополнительных телефонов необходимо нажать на кнопку “+”.

Рисунок 4.7 - редактирование гостиницы. Контакты и адреса.

За информацию о номерах гостиницы отвечает сразу две вкладки “Периоды” (рисунок 4.8), в которой формируются интервалы действия стоимостей номеров и непосредственно номера (рисунок 4.9).

Рисунок 4.8 - редактирование гостиницы. Периоды.

Рисунок 4.9 - редактирование гостиницы. Номера.

Весь процесс редактирования предельно прост и интуитивно понятен. Добавление элементов осуществляется тем же способом, единственное исключение - изначально большинство полей являются пустыми.

По желанию заказчика была также добавлена вкладка “Мета-данные” (рисунок 4.10).

Рисунок 4.10 - редактирование гостиницы. Мета-данные.

Следует отметить, что мы легко можем получить расширение возможностей работы с данными гостиницы путем добавления новых вкладок.

4.2 Система управления заявками на бронирование номеров в отелях

Работа с заявками очень похожа на работу с информацией о гостиницах. Тот же интерфейс как при работе со списками (рисунок 4.11), так и при обработке конкретных элементов (рисунок 4.12). Поэтому он не требует дополнительных комментариев.

Рисунок 4.10 - список заявок. Сортировка по фамилии клиента по возрастанию.

Рисунок 4.10 - редактирование заявки. Общая информация.

Вывод: разработанный интерфейс чрезвычайно прост в использовании, интуитивно понятен и не требует особых знаний и навыков.

Заключение

В работе изложена информация о лучших на сегодняшний день системах управления сайтами. Проведен анализ их достоинств и недостатков.

Разработана система управления сайтом и заявками на бронирование номеров в отелях города.

Представлены возможные варианты дальнейшего расширения системы.

Внедрение разработанной системы управления сайтом позволит облегчить и упростить работу работу менеджеров по бронированию, а также снизит стоимости обслуживания сайта.

В дальнейшем возможно написание дополнительного функционала к системе, позволяющего решать более серьезные задачи. Среди них система web-аналитики и обеспечение системы возможностью обмена информацией с программой "1С".

Список литературы

1. Эд Леки-Томпсон и др. PHP5 для профессионалов. - М.: Вильямс, 2006. - 608 с.

2. Сравнительные особенности современных CMS. - “Internet.ru”, 22 декабря 2005 г.

3. А. Моисеев. На том стоим. - Журнал "Компьютерра", №32, 08 сентября 2005 г.

4. “CMSlist.ru”, 2005 г.

5. А. Терехов. Сравниваем контент-менеджеры. - “Cmslist.ru”, 2005 г.

6. Закас Н., Мак-Пик Д., Фосетт Д. Ajax для профессионалов. - СПб: Символ-Плюс, 2006. - 488 с.

7. http://www.xaker.ru - журнал "Хакер".

8. http://www.lightnet. obninsk.ru - еженедельник "Свет в internet".

Приложение А - Листинг программы

В целях сокращения объема в приложении приведена лишь наиболее важная часть кода программы.

class. Database. php

<?

require_once ($cfg ['path'] ['base']. "classes/class. Database. php"); // Подключаем класс по работе с БД

require_once ($cfg ['path'] ['base']. "classes/class. GenericObject. php"); // Подключаем класс по работе с объектами

require_once ($cfg ['path'] ['base']. "classes/class. GenericObjectCollection. php"); // Подключаем класс по работе с коллекциями объектов

require_once ($cfg ['path'] ['base']. "classes/class. Hotel. php"); // Подключаем класс гостиниц

class HotelCollection {

var $order;

var $where;

var $select;

var $items_per_page = 20;

var $item_count;

var $page_count;

var $objDB; // Класс БД

// конструктор

public function __construct ($objDBlink) {

global $cfg;

$this->select = "SELECT id_hotel FROM". $cfg ['table'] ['hotel'];

$this->order = "";

$this->where = "";

$this->objDB = $objDBlink; // Запоминаем объект БД

return (true); //

}

// Функция устанавливает количество элементов на странице

public function SetItemsPerPage ($items_per_page) {

$this->items_per_page = $items_per_page;

}

// Функция возвращает количество элементов на странице

public function GetItemsPerPage () {

return ($this->items_per_page);

}

// Функция возвращает количество элементов в коллекции

public function GetItemCount () {

return ($this->item_count);

}

// Функция возвращает количество страниц

public function GetPageCount () {

return ($this->page_count);

}

// Функция устанавливает значение переменной select

public function SetSelect ($select) {

$this->select = $select;

}

// Функция устанавливает значение переменной where

public function SetWhere ($where) {

$this->where = $where;

}

// Функция устанавливает значение переменной order

public function SetOrder ($order) {

$this->order = $order;

}

public function GetAllHotels ($page_num=1) {

global $cfg;

$dbc = new GenericObjectCollection ($cfg ['table'] ['hotel'], "id_hotel", "Hotel", $this->objDB);

$stmt = "SELECT id_hotel FROM". $cfg ['table'] ['hotel']; // формируем запрос

$arResult = $this->objDB->select ($stmt); // Выполняем запрос

for ($i=0; $i<=sizeof ($arResult) - 1; $i++) {

$dbc->AddTuple ($arResult [$i] ["id_hotel"]);

};

$dbc->SetPageSize ($this->items_per_page);

$dbc->PopulateObjectArray ($page_num);

$objArray = $dbc->RetrievePopulatedObjects ($page_num);

$this->item_count = $dbc->GetItemCount ();

$this->page_count = $dbc->GetNumPages ();

return ($objArray);

}

public function GetFromClass ($page_num=1) {

global $cfg;

$dbc = new GenericObjectCollection ($cfg ['table'] ['hotel'], "id_hotel", "Hotel", $this->objDB);

// формируем запрос

$stmt = "";

$stmt. = $this->select;

$stmt. = $this->where;

$stmt. = $this->order;

$arResult = $this->objDB->select ($stmt); // Выполняем запрос

for ($i=0; $i<=sizeof ($arResult) - 1; $i++) { // проходим все элементы

$dbc->AddTuple ($arResult [$i] ["id_hotel"]); // Записываем соответствующие id

};

$dbc->SetPageSize ($this->items_per_page); // Переписали данные о количестве элементов на страницу

$dbc->PopulateObjectArray ($page_num); // Составили список требуемых id

$objArray = $dbc->RetrievePopulatedObjects ($page_num); // получили массив требуемых элементов

$this->item_count = $dbc->GetItemCount (); // запомнили количество элементов

$this->page_count = $dbc->GetNumPages (); // запомнили количество страниц

return ($objArray); // Возвращаем массив значений

}

}

? >

class. UserSession. php

<?

require_once ($cfg ['path'] ['base']. "classes/class. Database. php"); // Подключаем класс по работе с БД

require_once ($cfg ['path'] ['base']. "classes/class. GenericObject. php"); // Подключаем класс по работе с объектами

require_once ($cfg ['path'] ['base']. "classes/class. GenericObjectCollection. php"); // Подключаем класс по работе с коллекциями объектов

require_once ($cfg ['path'] ['base']. "classes/class. Hotel. php"); // Подключаем класс гостиниц

class HotelCollection {

var $order;

var $where;

var $select;

var $items_per_page = 20;

var $item_count;

var $page_count;

var $objDB; // Класс БД

// конструктор

public function __construct ($objDBlink) {

global $cfg;

$this->select = "SELECT id_hotel FROM". $cfg ['table'] ['hotel'];

$this->order = "";

$this->where = "";

$this->objDB = $objDBlink; // Запоминаем объект БД

return (true); //

}

// Функция устанавливает количество элементов на странице

public function SetItemsPerPage ($items_per_page) {

$this->items_per_page = $items_per_page;

}

// Функция возвращает количество элементов на странице

public function GetItemsPerPage () {

return ($this->items_per_page);

}

// Функция возвращает количество элементов в коллекции

public function GetItemCount () {

return ($this->item_count);

}

// Функция возвращает количество страниц

public function GetPageCount () {

return ($this->page_count);

}

// Функция устанавливает значение переменной select

public function SetSelect ($select) {

$this->select = $select;

}

// Функция устанавливает значение переменной where

public function SetWhere ($where) {

$this->where = $where;

}

// Функция устанавливает значение переменной order

public function SetOrder ($order) {

$this->order = $order;

}

public function GetAllHotels ($page_num=1) {

global $cfg;

$dbc = new GenericObjectCollection ($cfg ['table'] ['hotel'], "id_hotel", "Hotel", $this->objDB);

$stmt = "SELECT id_hotel FROM". $cfg ['table'] ['hotel']; // формируем запрос

$arResult = $this->objDB->select ($stmt); // Выполняем запрос

for ($i=0; $i<=sizeof ($arResult) - 1; $i++) {

$dbc->AddTuple ($arResult [$i] ["id_hotel"]);

};

$dbc->SetPageSize ($this->items_per_page);

$dbc->PopulateObjectArray ($page_num);

$objArray = $dbc->RetrievePopulatedObjects ($page_num);

$this->item_count = $dbc->GetItemCount ();

$this->page_count = $dbc->GetNumPages ();

return ($objArray);

}

public function GetFromClass ($page_num=1) {

global $cfg;

$dbc = new GenericObjectCollection ($cfg ['table'] ['hotel'], "id_hotel", "Hotel", $this->objDB);

// формируем запрос

$stmt = "";

$stmt. = $this->select;

$stmt. = $this->where;

$stmt. = $this->order;

$arResult = $this->objDB->select ($stmt); // Выполняем запрос

for ($i=0; $i<=sizeof ($arResult) - 1; $i++) { // проходим все элементы

$dbc->AddTuple ($arResult [$i] ["id_hotel"]); // Записываем соответствующие id

};

$dbc->SetPageSize ($this->items_per_page); // Переписали данные о количестве элементов на страницу

$dbc->PopulateObjectArray ($page_num); // Составили список требуемых id

$objArray = $dbc->RetrievePopulatedObjects ($page_num); // получили массив требуемых элементов

$this->item_count = $dbc->GetItemCount (); // запомнили количество элементов

$this->page_count = $dbc->GetNumPages (); // запомнили количество страниц

return ($objArray); // Возвращаем массив значений

}

}

? >

class. GenericObject. php

<?

// Класс "Объект" - предназначен для сокращения кода его наследников

class GenericObject {

// Члены класса

protected $objDB; // Класс БД

private $id; // id элемента

private $id_name; // Обозначение id элемента

private $table_name; // Имя таблицы

private $database_fields; // Ассоциативный массив с ключами, которые являются именами столбцов таблицы и их значениями для данной строки

private $loaded; // Ноль, если данные не были загружены из таблицы - один, если данные были загружены

private $modified; // флаг того, что изменения вносились

private $modified_fields; // Аналогичен database_fields, но содержит 0 или 1 в зависимости от того были ли произведены изменения

// методы

// Функция перезагрузки

// Загружает всю информацию об элементе

public function Reload () {

// $sql = new sql (0);

$id = $this->id; // Запоминаем id

$table_name = $this->table_name; // запоминаем имя таблицы

// $sql->query ("SELECT * FROM \"$table_name\" WHERE id='$id'"); // формируем запрос

$stmt = "SELECT * FROM $table_name WHERE". $this->id_name. "='$id'"; // формируем запрос

$arResult = $this->objDB->select ($stmt); // Выполняем запрос

if (isset ($arResult [0])) {

$result_fields = $arResult [0]; // Копируем первую строку

$this->database_fields = $result_fields; // Переписываем полученный результат в нащ объект

$this->loaded = 1; // Устанавливаем статус загрузки

if (sizeof ($this->modified_fields) > 0) { // Если есть массив с изменениями

foreach ($this->modified_fields as $key => $value) { // То обнуляем все его элементы

$this->modified_fields [$key] = false;

};

};

}

}

// Функция зарузки

// Загружает всю информацию об элементе

private function Load () {

$this->Reload ();

// $this->loaded = 1;

}

// Функция принудительной загрузки

public function ForceLoaded () {

$this->loaded = 1;

}

// Функция возвращает значение поля

// Ей передается имя поля

public function GetField ($field) {

if ($this->loaded == 0) { // Если данные еще не были загружены,

$this->Load (); // то мы их загружаем

};

if (isset ($this->database_fields [$field]))

return $this->database_fields [$field];

else return false;

}

// Функция возвращает весь массив значений элемента

public function GetAllFields () {

if ($this->loaded == 0) { // Если данные еще не были загружены,

$this->Load (); // то мы их загружаем

};

return ($this->database_fields);

}

// Функция возвращает ассоциативный массив полей, которые были изменены

public function GetModifiedFields () {

if ($this->loaded == 0) { // Если данные еще не были загружены,

$this->Load (); // то мы их загружаем

};

$escVals = array (); // Выходной массив значений

foreach ($this->database_fields as $key => $value) {

if (! is_numeric ($key)) {

if (isset ($this->modified_fields [$key]))

if ($this->modified_fields [$key] == true) { // Если поле было изменено

$escVals [$key] = $value;

};

};

};

return ($escVals);

}

// Функция возвращает id текущего элемента

public function GetID () {

return $this->id;

}

// Функция инициализации

// задает имя таблицы,

// id

// и id (но не обязательно)

public function Initialize ($table_name, $tuple_id_name, $tuple_id = "") {

$this->table_name = $table_name;

$this->id_name = $tuple_id_name;

$this->id = $tuple_id;

}

// функция Задает значение $value в поле $field

public function SetField ($field, $value) {

if ($this->loaded == 0) { // Если данные еще не были загружены,

if ($this->id) { // и у нас есть конкретный id

$this->Load (); // то мы их загружаем

};

};

$this->database_fields [$field] = $value; // Записываем значение

$this->modified = 1; // Устанавливаем флаг того, что мы вносили изменения

$this->modified_fields [$field] = true; // Устанавливаем флаг того, что поле было изменено

}

// Функция удаления объекта

public function Destroy () {

$id = $this->id; // Запоминаем id

$id_name = $this->id_name; // Запоминаем id_name

$table_name = $this->table_name; // Запоминаем имя таблицы

if ($id) { // Если id задан

$this->objDB->delete ($table_name, array ($id_name => $id)); // Удаляем элемент из таблицы

// $sql = new sql (0);

// $stmt = "DELETE FROM \"". $table_name. "\" WHERE id='". $id. "'";

// $sql->query ($stmt);

};

}

// Функция сохранения в БД

public function Save () {

$id = $this->id; // Запоминаем id

$id_name = $this->id_name; // Запоминаем id_name

$table_name = $this->table_name; // Запоминаем имя таблицы

// $sql = new sql (0);

if (! $id) { // Если id не задан

$this->loaded = 0; // То устанавливаем, что элемент не был загружен

};

if ($this->loaded == 0) { // Если элемент новый (не был загружен)

// Добавляем новую запись в таблицу БД

$this->objDB->insert ($table_name, $this->database_fields);

} else { // Если это не новый элемен

$return_code = $this->objDB->update ($table_name, $this->GetModifiedFields (), array ($id_name => $id));

};

// $return_code = $sql->query ($stmt, 1);

if ($this->loaded == 0) { // Если мы вставляли новый элемент

// Получаем последний вставленный id

$stmt = "SELECT MAX (". $this->id_name. ") AS id FROM $table_name WHERE ";

foreach ($this->database_fields as $key => $value) {

if (! is_numeric ($key)) {

if ($value) {

if ($this->modified_fields [$key] == true) {

$value = str_replace ("'", "\'", $value);

$stmt. = "$key = '$value' AND ";

};

};

};

};

$stmt = substr ($stmt,0,strlen ($stmt) - 5); // Убираем лишние символы

$arResult = $this->objDB->select ($stmt); // Выполняем запрос

$proposed_id = $arResult [0] ["id"]; // Переписываем полученный id

if ($proposed_id > 0) { // Если получили нормальный id

$this->loaded = 1; // значит все загружено

$this->id = $proposed_id; // Запоминаем id в объект

return true;

} else {

return false;

};

};

return ($return_code);

}

};

class. GenericObjectCollection. php

<?

// Класс "Объект" - предназначен для сокращения кода его наследников

class GenericObject {

// Члены класса

protected $objDB; // Класс БД

private $id; // id элемента

private $id_name; // Обозначение id элемента

private $table_name; // Имя таблицы

private $database_fields; // Ассоциативный массив с ключами, которые являются именами столбцов таблицы и их значениями для данной строки

private $loaded; // Ноль, если данные не были загружены из таблицы - один, если данные были загружены

private $modified; // флаг того, что изменения вносились

private $modified_fields; // Аналогичен database_fields, но содержит 0 или 1 в зависимости от того были ли произведены изменения

// методы

// Функция перезагрузки

// Загружает всю информацию об элементе

public function Reload () {

// $sql = new sql (0);

$id = $this->id; // Запоминаем id

$table_name = $this->table_name; // запоминаем имя таблицы

// $sql->query ("SELECT * FROM \"$table_name\" WHERE id='$id'"); // формируем запрос

$stmt = "SELECT * FROM $table_name WHERE". $this->id_name. "='$id'"; // формируем запрос

$arResult = $this->objDB->select ($stmt); // Выполняем запрос

if (isset ($arResult [0])) {

$result_fields = $arResult [0]; // Копируем первую строку

$this->database_fields = $result_fields; // Переписываем полученный результат в нащ объект

$this->loaded = 1; // Устанавливаем статус загрузки

if (sizeof ($this->modified_fields) > 0) { // Если есть массив с изменениями

foreach ($this->modified_fields as $key => $value) { // То обнуляем все его элементы

$this->modified_fields [$key] = false;

};

};

}

}

// Функция зарузки

// Загружает всю информацию об элементе

private function Load () {

$this->Reload ();

// $this->loaded = 1;

}

// Функция принудительной загрузки

public function ForceLoaded () {

$this->loaded = 1;

}

// Функция возвращает значение поля

// Ей передается имя поля

public function GetField ($field) {

if ($this->loaded == 0) { // Если данные еще не были загружены,

$this->Load (); // то мы их загружаем

};

if (isset ($this->database_fields [$field]))

return $this->database_fields [$field];

else return false;

}

// Функция возвращает весь массив значений элемента

public function GetAllFields () {

if ($this->loaded == 0) { // Если данные еще не были загружены,

$this->Load (); // то мы их загружаем

};

return ($this->database_fields);

}

// Функция возвращает ассоциативный массив полей, которые были изменены

public function GetModifiedFields () {

if ($this->loaded == 0) { // Если данные еще не были загружены,

$this->Load (); // то мы их загружаем

};

$escVals = array (); // Выходной массив значений

foreach ($this->database_fields as $key => $value) {

if (! is_numeric ($key)) {

if (isset ($this->modified_fields [$key]))

if ($this->modified_fields [$key] == true) { // Если поле было изменено

$escVals [$key] = $value;

};

};

};

return ($escVals);

}

// Функция возвращает id текущего элемента

public function GetID () {

return $this->id;

}

// Функция инициализации

// задает имя таблицы,

// id

// и id (но не обязательно)

public function Initialize ($table_name, $tuple_id_name, $tuple_id = "") {

$this->table_name = $table_name;

$this->id_name = $tuple_id_name;

$this->id = $tuple_id;

}

// функция Задает значение $value в поле $field

public function SetField ($field, $value) {

if ($this->loaded == 0) { // Если данные еще не были загружены,

if ($this->id) { // и у нас есть конкретный id

$this->Load (); // то мы их загружаем

};

};

$this->database_fields [$field] = $value; // Записываем значение

$this->modified = 1; // Устанавливаем флаг того, что мы вносили изменения

$this->modified_fields [$field] = true; // Устанавливаем флаг того, что поле было изменено

}

// Функция удаления объекта

public function Destroy () {

$id = $this->id; // Запоминаем id

$id_name = $this->id_name; // Запоминаем id_name

$table_name = $this->table_name; // Запоминаем имя таблицы

if ($id) { // Если id задан

$this->objDB->delete ($table_name, array ($id_name => $id)); // Удаляем элемент из таблицы

// $sql = new sql (0);

// $stmt = "DELETE FROM \"". $table_name. "\" WHERE id='". $id. "'";

// $sql->query ($stmt);

};

}

// Функция сохранения в БД

public function Save () {

$id = $this->id; // Запоминаем id

$id_name = $this->id_name; // Запоминаем id_name

$table_name = $this->table_name; // Запоминаем имя таблицы

// $sql = new sql (0);

if (! $id) { // Если id не задан

$this->loaded = 0; // То устанавливаем, что элемент не был загружен

};

if ($this->loaded == 0) { // Если элемент новый (не был загружен)

// Добавляем новую запись в таблицу БД

$this->objDB->insert ($table_name, $this->database_fields);

} else { // Если это не новый элемен

$return_code = $this->objDB->update ($table_name, $this->GetModifiedFields (), array ($id_name => $id));

};

// $return_code = $sql->query ($stmt, 1);

if ($this->loaded == 0) { // Если мы вставляли новый элемент

// Получаем последний вставленный id

$stmt = "SELECT MAX (". $this->id_name. ") AS id FROM $table_name WHERE ";

foreach ($this->database_fields as $key => $value) {

if (! is_numeric ($key)) {

if ($value) {

if ($this->modified_fields [$key] == true) {

$value = str_replace ("'", "\'", $value);

$stmt. = "$key = '$value' AND ";

};

};

};

};

$stmt = substr ($stmt,0,strlen ($stmt) - 5); // Убираем лишние символы

$arResult = $this->objDB->select ($stmt); // Выполняем запрос

$proposed_id = $arResult [0] ["id"]; // Переписываем полученный id

if ($proposed_id > 0) { // Если получили нормальный id

$this->loaded = 1; // значит все загружено

$this->id = $proposed_id; // Запоминаем id в объект

return true;

} else {

return false;

};

};

return ($return_code);

}

};

class. Hotel. php

<?

// Класс "Объект" - предназначен для сокращения кода его наследников

class GenericObject {

// Члены класса

protected $objDB; // Класс БД

private $id; // id элемента

private $id_name; // Обозначение id элемента

private $table_name; // Имя таблицы

private $database_fields; // Ассоциативный массив с ключами, которые являются именами столбцов таблицы и их значениями для данной строки

private $loaded; // Ноль, если данные не были загружены из таблицы - один, если данные были загружены

private $modified; // флаг того, что изменения вносились

private $modified_fields; // Аналогичен database_fields, но содержит 0 или 1 в зависимости от того были ли произведены изменения

// методы

// Функция перезагрузки

// Загружает всю информацию об элементе

public function Reload () {

// $sql = new sql (0);

$id = $this->id; // Запоминаем id

$table_name = $this->table_name; // запоминаем имя таблицы

// $sql->query ("SELECT * FROM \"$table_name\" WHERE id='$id'"); // формируем запрос

$stmt = "SELECT * FROM $table_name WHERE". $this->id_name. "='$id'"; // формируем запрос

$arResult = $this->objDB->select ($stmt); // Выполняем запрос

if (isset ($arResult [0])) {

$result_fields = $arResult [0]; // Копируем первую строку

$this->database_fields = $result_fields; // Переписываем полученный результат в нащ объект

$this->loaded = 1; // Устанавливаем статус загрузки

if (sizeof ($this->modified_fields) > 0) { // Если есть массив с изменениями

foreach ($this->modified_fields as $key => $value) { // То обнуляем все его элементы

$this->modified_fields [$key] = false;

};

};

}

}

// Функция зарузки

// Загружает всю информацию об элементе

private function Load () {

$this->Reload ();

// $this->loaded = 1;

}

// Функция принудительной загрузки

public function ForceLoaded () {

$this->loaded = 1;

}

// Функция возвращает значение поля

// Ей передается имя поля

public function GetField ($field) {

if ($this->loaded == 0) { // Если данные еще не были загружены,

$this->Load (); // то мы их загружаем

};

if (isset ($this->database_fields [$field]))

return $this->database_fields [$field];

else return false;

}

// Функция возвращает весь массив значений элемента

public function GetAllFields () {

if ($this->loaded == 0) { // Если данные еще не были загружены,

$this->Load (); // то мы их загружаем

};

return ($this->database_fields);

}

// Функция возвращает ассоциативный массив полей, которые были изменены

public function GetModifiedFields () {

if ($this->loaded == 0) { // Если данные еще не были загружены,

$this->Load (); // то мы их загружаем

};

$escVals = array (); // Выходной массив значений

foreach ($this->database_fields as $key => $value) {

if (! is_numeric ($key)) {

if (isset ($this->modified_fields [$key]))

if ($this->modified_fields [$key] == true) { // Если поле было изменено

$escVals [$key] = $value;

};

};

};

return ($escVals);

}

// Функция возвращает id текущего элемента

public function GetID () {

return $this->id;

}

// Функция инициализации

// задает имя таблицы,

// id

// и id (но не обязательно)

public function Initialize ($table_name, $tuple_id_name, $tuple_id = "") {

$this->table_name = $table_name;

$this->id_name = $tuple_id_name;

$this->id = $tuple_id;

}

// функция Задает значение $value в поле $field

public function SetField ($field, $value) {

if ($this->loaded == 0) { // Если данные еще не были загружены,

if ($this->id) { // и у нас есть конкретный id

$this->Load (); // то мы их загружаем

};

};

$this->database_fields [$field] = $value; // Записываем значение

$this->modified = 1; // Устанавливаем флаг того, что мы вносили изменения

$this->modified_fields [$field] = true; // Устанавливаем флаг того, что поле было изменено

}

// Функция удаления объекта

public function Destroy () {

$id = $this->id; // Запоминаем id

$id_name = $this->id_name; // Запоминаем id_name

$table_name = $this->table_name; // Запоминаем имя таблицы

if ($id) { // Если id задан

$this->objDB->delete ($table_name, array ($id_name => $id)); // Удаляем элемент из таблицы

// $sql = new sql (0);

// $stmt = "DELETE FROM \"". $table_name. "\" WHERE id='". $id. "'";

// $sql->query ($stmt);

};

}

// Функция сохранения в БД

public function Save () {

$id = $this->id; // Запоминаем id

$id_name = $this->id_name; // Запоминаем id_name

$table_name = $this->table_name; // Запоминаем имя таблицы

// $sql = new sql (0);

if (! $id) { // Если id не задан

$this->loaded = 0; // То устанавливаем, что элемент не был загружен

};

if ($this->loaded == 0) { // Если элемент новый (не был загружен)

// Добавляем новую запись в таблицу БД

$this->objDB->insert ($table_name, $this->database_fields);

} else { // Если это не новый элемен

$return_code = $this->objDB->update ($table_name, $this->GetModifiedFields (), array ($id_name => $id));

};

// $return_code = $sql->query ($stmt, 1);

if ($this->loaded == 0) { // Если мы вставляли новый элемент

// Получаем последний вставленный id

$stmt = "SELECT MAX (". $this->id_name. ") AS id FROM $table_name WHERE ";

foreach ($this->database_fields as $key => $value) {

if (! is_numeric ($key)) {

if ($value) {

if ($this->modified_fields [$key] == true) {

$value = str_replace ("'", "\'", $value);

$stmt. = "$key = '$value' AND ";

};

};

};

};

$stmt = substr ($stmt,0,strlen ($stmt) - 5); // Убираем лишние символы

$arResult = $this->objDB->select ($stmt); // Выполняем запрос

$proposed_id = $arResult [0] ["id"]; // Переписываем полученный id

if ($proposed_id > 0) { // Если получили нормальный id

$this->loaded = 1; // значит все загружено

$this->id = $proposed_id; // Запоминаем id в объект

return true;

} else {

return false;

};

};

return ($return_code);

}

};

class. HotelCollection. php

<?

// Класс "Объект" - предназначен для сокращения кода его наследников

class GenericObject {

// Члены класса

protected $objDB; // Класс БД

private $id; // id элемента

private $id_name; // Обозначение id элемента

private $table_name; // Имя таблицы

private $database_fields; // Ассоциативный массив с ключами, которые являются именами столбцов таблицы и их значениями для данной строки

private $loaded; // Ноль, если данные не были загружены из таблицы - один, если данные были загружены

private $modified; // флаг того, что изменения вносились

private $modified_fields; // Аналогичен database_fields, но содержит 0 или 1 в зависимости от того были ли произведены изменения

// методы

// Функция перезагрузки

// Загружает всю информацию об элементе

public function Reload () {

// $sql = new sql (0);

$id = $this->id; // Запоминаем id

$table_name = $this->table_name; // запоминаем имя таблицы

// $sql->query ("SELECT * FROM \"$table_name\" WHERE id='$id'"); // формируем запрос

$stmt = "SELECT * FROM $table_name WHERE". $this->id_name. "='$id'"; // формируем запрос

$arResult = $this->objDB->select ($stmt); // Выполняем запрос

if (isset ($arResult [0])) {

$result_fields = $arResult [0]; // Копируем первую строку

$this->database_fields = $result_fields; // Переписываем полученный результат в нащ объект

$this->loaded = 1; // Устанавливаем статус загрузки

if (sizeof ($this->modified_fields) > 0) { // Если есть массив с изменениями

foreach ($this->modified_fields as $key => $value) { // То обнуляем все его элементы

$this->modified_fields [$key] = false;

};

};

}

}

// Функция зарузки

// Загружает всю информацию об элементе

private function Load () {

$this->Reload ();

// $this->loaded = 1;

}

// Функция принудительной загрузки

public function ForceLoaded () {

$this->loaded = 1;

}

// Функция возвращает значение поля

// Ей передается имя поля

public function GetField ($field) {

if ($this->loaded == 0) { // Если данные еще не были загружены,

$this->Load (); // то мы их загружаем

};

if (isset ($this->database_fields [$field]))

return $this->database_fields [$field];

else return false;

}

// Функция возвращает весь массив значений элемента

public function GetAllFields () {

if ($this->loaded == 0) { // Если данные еще не были загружены,

$this->Load (); // то мы их загружаем

};

return ($this->database_fields);

}

// Функция возвращает ассоциативный массив полей, которые были изменены

public function GetModifiedFields () {

if ($this->loaded == 0) { // Если данные еще не были загружены,

$this->Load (); // то мы их загружаем

};

$escVals = array (); // Выходной массив значений

foreach ($this->database_fields as $key => $value) {

if (! is_numeric ($key)) {

if (isset ($this->modified_fields [$key]))

if ($this->modified_fields [$key] == true) { // Если поле было изменено

$escVals [$key] = $value;

};

};

};

return ($escVals);

}

// Функция возвращает id текущего элемента

public function GetID () {

return $this->id;

}

// Функция инициализации

// задает имя таблицы,

// id

// и id (но не обязательно)

public function Initialize ($table_name, $tuple_id_name, $tuple_id = "") {

$this->table_name = $table_name;

$this->id_name = $tuple_id_name;

$this->id = $tuple_id;

}

// функция Задает значение $value в поле $field

public function SetField ($field, $value) {

if ($this->loaded == 0) { // Если данные еще не были загружены,

if ($this->id) { // и у нас есть конкретный id

$this->Load (); // то мы их загружаем

};

};

$this->database_fields [$field] = $value; // Записываем значение

$this->modified = 1; // Устанавливаем флаг того, что мы вносили изменения

$this->modified_fields [$field] = true; // Устанавливаем флаг того, что поле было изменено

}

// Функция удаления объекта

public function Destroy () {

$id = $this->id; // Запоминаем id

$id_name = $this->id_name; // Запоминаем id_name

$table_name = $this->table_name; // Запоминаем имя таблицы

if ($id) { // Если id задан

$this->objDB->delete ($table_name, array ($id_name => $id)); // Удаляем элемент из таблицы

// $sql = new sql (0);

// $stmt = "DELETE FROM \"". $table_name. "\" WHERE id='". $id. "'";

// $sql->query ($stmt);

};

}

// Функция сохранения в БД

public function Save () {

$id = $this->id; // Запоминаем id

$id_name = $this->id_name; // Запоминаем id_name

$table_name = $this->table_name; // Запоминаем имя таблицы

// $sql = new sql (0);

if (! $id) { // Если id не задан

$this->loaded = 0; // То устанавливаем, что элемент не был загружен

};

if ($this->loaded == 0) { // Если элемент новый (не был загружен)

// Добавляем новую запись в таблицу БД

$this->objDB->insert ($table_name, $this->database_fields);

} else { // Если это не новый элемен

$return_code = $this->objDB->update ($table_name, $this->GetModifiedFields (), array ($id_name => $id));

};

// $return_code = $sql->query ($stmt, 1);

if ($this->loaded == 0) { // Если мы вставляли новый элемент

// Получаем последний вставленный id

$stmt = "SELECT MAX (". $this->id_name. ") AS id FROM $table_name WHERE ";

foreach ($this->database_fields as $key => $value) {

if (! is_numeric ($key)) {

if ($value) {

if ($this->modified_fields [$key] == true) {

$value = str_replace ("'", "\'", $value);

$stmt. = "$key = '$value' AND ";

};

};

};

};

$stmt = substr ($stmt,0,strlen ($stmt) - 5); // Убираем лишние символы

$arResult = $this->objDB->select ($stmt); // Выполняем запрос

$proposed_id = $arResult [0] ["id"]; // Переписываем полученный id

if ($proposed_id > 0) { // Если получили нормальный id

$this->loaded = 1; // значит все загружено

$this->id = $proposed_id; // Запоминаем id в объект

return true;

} else {

return false;

};

};

return ($return_code);

}

};

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.