Please use this identifier to cite or link to this item:
https://er.chdtu.edu.ua/handle/ChSTU/6393| Title: | Дослідження автоматизованих систем керування готелем |
| Authors: | Чичужко, Марина Володимирівна Ломаний, Роман Анатолійович |
| Issue Date: | Jan-2024 |
| Abstract: | В кваліфікаційній роботі освітнього ступеня «магістр» було проведено аналіз стану предмету дослідження та визначено технологію керування готельним господарством. Розглянуті питання обґрунтування необхідності побудови автоматизованої системи з метою передачі його в робочу експлуатацію для адміністраторів готелю; проведено аналіз існуючих аналогів програмного забезпечення та обґрунтовано вибір програмних і технічних засобів розробки проекту. Також була реалізована CRM-система - сучасна автоматизована інформаційно-аналітична система готелю: модулі керування та аналізу розміщення клієнтів на основі досліджених методів та прийнятих рішень. |
| URI: | https://er.chdtu.edu.ua/handle/ChSTU/6393 |
| Appears in Collections: | 174 Автоматизація, комп'ютерно-інтегровані технології та робототехніка (Автоматизація та комп'ютерно-інтегровані системи та компоненти) |
Files in This Item:
| File | Description | Size | Format | |
|---|---|---|---|---|
| М_151_2023_Ломаний.pdf Restricted Access | 889.75 kB | Adobe PDF | View/Open Request a copy |
Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.
Extracted text
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОІЧНИЙ УНІВЕРСИТЕТ
ФАКУЛЬТЕТ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ І СИСТЕМ
КАФЕДРА РОБОТОТЕХНІКИ ТА СПЕЦІАЛІЗОВАНИХ
КОМП’ЮТЕРНИХ СИСТЕМ
Пояснювальна записка
до кваліфікаційної роботи
освітнього ступеня «магістр»
на тему:
ДОСЛІДЖЕННЯ АВТОМАТИЗОВАНИХ СИСТЕМ КЕРУВАННЯ
ГОТЕЛЕМ
Виконав: студент 2 курсу, групи МАКІТ-2209
спеціальності 151 Автоматизація та
комп’ютерно-інтегровані технології,
освітня програма «Автоматизація та
комп’ютерно-інтегровані системи та
компоненти»
Роман ЛОМАНИЙ
(ім’я, ПРІЗВИЩЕ)
Керівник Марина ЧТИЧУЖКО
( ім’я, ПРІЗВИЩЕ)
Рецензент Людмила ПОНОМАР
( ім’я, ПРІЗВИЩЕ)
Черкаси 2023 року
ЗМІСТ
СПИСОК СКОРОЧЕНЬ ТА УМОВНИХ ПОЗНАЧЕНЬ ........................... 2
ВСТУП ............................................................................................................ 3
РОЗДІЛ 1 ОГЛЯД ІСНУЮЧИХ АВТОМАТИЗОВАНИХ СИСТЕМ
КЕРУВАННЯ ГОТЕЛЬНИМИ ГОСПОДАРСТВАМИ ....................... 8
1.1 Основні поняття автоматизованих систем керування готелем ................................. 8
1.2 Опис концепції ............................................................................................................... 9
1.3 Переваги та недоліки ................................................................................................... 10
1.4 Огляд існуючих аналогів ............................................................................................. 12
РОЗДІЛ 2 АНАЛІЗ АВТОМАТИЗОВАНИХ СИСТЕМ
КЕРУВАННЯ ГОТЕЛЕМ ........................................................................ 19
2.1 Вимоги до інтерфейсу програми ...................................................................................... 19
2.2 Опис програмних засобів розробки ................................................................................. 20
2.3 Вимоги до обчислювального середовища ....................................................................... 24
РОЗДІЛ 3 ПРОЕКТНІ І СТРУКТУРНІ РІШЕННЯ
АВТОМАТИЗОВАНОЇ СИСТЕМ КЕРУВАННЯ ГОТЕЛЕМ ......... 26
3.1 Етапи проектування автоматизованої системи готелю: підсистема керування та
розміщення клієнтів ................................................................................................................ 26
3.2 Розробка системи ............................................................................................................... 27
3.3 Стуктурний Java-додаток .................................................................................................. 30
ВИСНОВКИ ................................................................................................ 36
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ ............................................... 38
ДОДАТОК А ............................................................................................... 41
ДОДАТОК Б ................................................................................................ 42
ДОДАТОК В ................................................................................................ 43
2
СПИСОК СКОРОЧЕНЬ ТА УМОВНИХ ПОЗНАЧЕНЬ
PMS – Property Management System
Java – об'єктно-орієнтована мова програмування, випущена
компанією SunMicrosystems у 1995 році
СУБД – Система управління базами даних
SQL – Structured query language – мова структурованих запитів
БД – база даних
Гб – гігабайт, кратна одиниця виміру кількості інформації,
що дорівнює 1024 мегабайтам
JSP – технологія, що дозволяє веб-розробникам динамічно
генерувати HTML, XML та інші веб-сторінки
ПЗ – програмне забезпечення
ПП – програмний продукт
ТЗ – технічне завдання
3
ВСТУП
Актуальність теми. На даний момент все більше галузей діяльності
людини використовують персональні комп’ютери і прикладне спеціалізоване
програмне забезпечення для вирішення різного виду задач. Така потреба в
автоматизації роботи виникає і в готельному господарстві, де щодня
працюють з різними типами задач, для задоволення клієнтів [5].
Автоматизована система – це поєднання керованого об’єкта й
автоматичних керуючих пристроїв, у якій частку функцій управління бере на
себе людина. Насамперед це організаційно-технічна комплексна система, що
складається із засобів автоматизації визначеного виду чи декількох видів
діяльності персоналу готелю, що здійснює цю діяльність.
Автоматизовані системи керування готелем залишаються вельми
актуальними у готельній індустрії через кілька ключових факторів:
ефективність операцій: завдяки автоматизації, готелі можуть оптимізувати
свої процеси та ресурси, зменшуючи час, який необхідний для виконання
рутинних завдань та управління готельними операціями. Покращене
керування даними: системи керування готелем забезпечують зручний та
ефективний доступ до великого обсягу даних про клієнтів, операції та
внутрішні процеси, допомагаючи у вивченні попиту та формуванні стратегій.
Збільшення задоволеності клієнтів: сучасні гості чекають зручності та
швидкості обслуговування. Автоматизація дозволяє швидше та зручніше
надавати послуги, що підвищує задоволеність клієнтів. Мобільність та
доступність: розвиток мобільних технологій дозволяє використовувати
мобільні додатки для бронювання, замовлення послуг та спілкування з
готелем, що робить процес більш доступним та зручним. Контроль і безпека:
автоматизовані системи дозволяють готелям краще контролювати доступ до
приміщень, фінансові операції та забезпечувати безпеку як для персоналу, так
і для гостей. Аналітика та стратегічне планування: збір та аналіз великого
обсягу даних допомагає готелям розробляти більш ефективні стратегії,
4
адаптуватися до змін у попиті та вдосконалювати свої послуги. Екологічна
стійкість: електронна документація та оптимізація ресурсів дозволяють
готелям зменшувати витрати енергії та паперовість, що відповідає
екологічним стандартам. Актуальною стала також потреба в створенні
web - орієнтованої інформаційної системи за допомогою сучасних технологій
для полегшення поточної роботи з працівниками та клієнтами а також із
застосуванням архітектури клієнт-сервер та використання додатку, який
допомагає як клієнтам так і співробітникам у повсякденній рутинній роботі
[3]. Такий програмний продукт можливо використовувати в любому типу
готелів.
Програмний продукт розроблений з пов'язаних між собою
jsp - сторінок. JSP–сторінка являє собою текстовий файл з розширенням
*.HTML, який вміщає текстову інформацію та спеціальні команди – HTML-
коди, що визначають в якому виді ця інформація буде відтворюватися у вікні
браузера [7].
Ці фактори підтримують актуальність автоматизованих систем
керування готелем, оскільки вони сприяють покращенню якості
обслуговування та оптимізації управління готелем в цілому.
Існують JSP - сторінки різних видів. Тип сторінки майже завжди
визначається його цілями і завданнями. В третьому розділі запропоновано
сучасну автоматизовану систему, яка буде направлена на професійну
практику окремого спеціаліста готелю та адміністратора.
Даний програмний продукт буде надавати можливість адміністратору
отримати поточну інформацію у зручний для нього час, а також надає
можливість зареєструватися та забронювати номер або декілька номерів в
готелі. Користувач має можливість замовити додаткові послуги, задати
питання або подати пропозицію або скаргу адміністратору з приводу готелю
та номерів[18] .
Багато вітчизняних і зарубіжних вчених присвятили свої роботи
проблемам процесного підходу до систем взаємодії з клієнтами
5
автоматизованих систем керування готелем. Серед них праці К.І. Вігерса,
М.Р. Когаловского, Ю.А. Маглінец, А.А. Богданова, М.А. Спиридонова, М.
Хаммера і багатьох інших.
В даних роботах представлено декілька варіантів вирішення цих задач,
але краще всього застосовувати комплексні рішення. Проблему розподілу
навантаження на обчислювальну систему можна вирішити за допомогою
апаратних вирішень, хоча правильна архітектура системи відіграє не меншу
роль у цьому питанні [17].
Тому, враховуючи описані особливості, дослідження автоматизованих
систем керування готелем є доцільно. У даному контексті актуальною є задача
вдосконалення існуючих автоматизованих систем керування готельним
господарством.
Мета і задачі дослідження. Мета роботи – підвищення ефективності
системи керування готелем за рахунок розробки CRM-системи для
оптимізації роботи.
Для досягнення поставленої мети необхідно вирішити наступні
завдання:
− Провести аналіз стану предмету дослідження.
− Визначити технологію керування готельним господарством.
− Реалізація CRM-системи на основі досліджених методів та
прийнятих рішень.
Об’єкт дослідження – інформаційна система управління взаємодією з
клієнтами інтернет-магазину.
Предмет дослідження – CRM-системи для автоматизації бізнес-
процесів інтернет-магазину.
Методи дослідження – основані на теорії аналізу, синтезу та
оптимізації; теорії надійності, теорії інформації, теорії проектування,
схемотехніки.
6
Наукова новизна одержаних результатів. У процесі вирішення
поставлених задач отримані наступні результати:
− отримано подальший розвиток системи управління взаємозв’язку з
клієнтом, який відрізняються від існуючих використанням нових
алгоритмів ведення інформації, що забезпечує підвищення
швидкодії та ефективності у процесі роботи з системою;
− удосконалено шаблони проектування, які дозволяють пришвидшити
розробку і покращити якість CRM системи;
− розроблено архітектуру CRM-системи з використанням технологій,
які дозволять збільшити продуктивність і масштабованість на усіх
рівнях.
Практичне значення одержаних результатів. Практичне значення
результатів полягає у розробці рішення для побудови архітектури CRM-
системи, яке доповнює вже існуючі методики та сприяє покращенню
продуктивності та масштабованості. Крім цього, в роботі надані практичні
рекомендації по впровадженню CRM-систем, розглянуті проблеми і помилки,
які можуть виникнути в процесі впровадження, а також вивчено питання того,
як CRM-системи можуть допомогти в автоматизації бізнес-процесів і
проведенні аналітичної діяльності в будь-якій компанії.
Апробація результатів роботи. Результати кваліфікаційної роботи
магістра доповідалися й обговорювалися на студентських і наукових
конференціях:
− дні студентської науки ЧДТУ, м. Черкаси, 2022;
− Комп’ютерне моделювання та оптимізація складних систем
(КМОСС-2021): матеріали VІIІ Міжнародної науково-технічної
конференції (м. Дніпро, 1-3 листопада 2023 року).
7
Публікації. Результати досліджень опубліковані:
1. Research of crm systems for managing business processes of an online
store / Chychuzhko M. V., Lusta V. V., Chychuzhko O. S., Lomanyi
R. A. // Комп’ютерне моделювання та оптимізація складних
систем (КМОСС-2021): матеріали VІIІ Міжнародної науково-
технічної конференції (м. Дніпро, 1-3 листопада 2023 року) /
Міністерство освіти і науки України, Державний вищий
навчальний заклад «Український державний хіміко-
технологічний університет». – Дніпро: ДВНЗ УДХТУ, 2023. – С.
146-147.
Структура та обсяг кваліфікаційної роботи. Кваліфікаційна робота
магістра складається з вступу, трьох розділів, висновку та списку
використаних джерел. Загальний обсяг роботи складає 80 сторінок,
33 рисунків, 1 таблиця. Список використаних джерел містить 32
найменування.
8
РОЗДІЛ 1
ОГЛЯД ІСНУЮЧИХ АВТОМАТИЗОВАНИХ СИСТЕМ КЕРУВАННЯ
ГОТЕЛЬНИМИ ГОСПОДАРСТВАМИ
Основні поняття автоматизованих систем керування готелем
Автоматизовані системи керування готелем (PMS - Property Management
System) включають різні функції, які спрямовані на ефективне управління
готелем та його ресурсами. Основні поняття в цьому контексті включають:
- Бронювання та резервація: Це ключова функція системи, яка
дозволяє клієнтам бронювати номери та послуги готелю. Онлайн-бронювання
та управління резерваціями - основні компоненти цієї функції.
- Управління номерами: Система дозволяє готелю ефективно
управляти розподілом та обліком номерів, управляти доступністю та
категоризацією номерів.
- Фронт-офіс: Ця функція дозволяє персоналу готелю взаємодіяти з
клієнтами. Вона включає обробку реєстрації гостей, видачу ключів, обробку
платежів та надання інформації про готель.
- Фінансове управління: Системи керування готелем допомагають
вести фінансовий облік, включаючи облік доходів, витрат, розрахунків та
фінансову звітність.
- Управління рестораном і послугами: Деякі PMS системи можуть
включати управління ресторанами, спа-центрами, конференц-залами,
наданням додаткових послуг готелю.
- Звітність і аналітика: Ця функція дозволяє створювати звіти та
аналізувати дані про використання ресурсів готелю, фінансові показники та
попит.
9
- Інтеграція з іншими системами: Деякі системи можуть
інтегруватися з іншими програмними продуктами, такими як системи
управління резерваціями, аналітичні системи тощо.
- Контроль доступу і безпека: Аспекти безпеки, такі як контроль
доступу до приміщень та обмеження прав доступу до системи, є також
важливими у системах керування готелем [15].
Ці поняття є основними компонентами систем керування готелем та
допомагають забезпечити ефективну роботу готелю, оптимізацію
обслуговування клієнтів та управління ресурсами.
Опис концепції
Бронювання та системи управління резерваціями: Автоматизовані
системи дозволяють клієнтам здійснювати бронювання онлайн, а також
управляти резерваціями та змінами у готелях. Це полегшує процес для
клієнтів та співробітників готелю [5]. Управління номерами і гостьовими
послугами: Автоматизація дозволяє ефективно управляти станом номерів,
обслуговуванням номерів, замовленням послуг (наприклад, ресторани,
екскурсії) через спеціальні системи. Фінансове облік та управління
витратами: Системи автоматизації можуть слідкувати за фінансами,
витратами, внутрішнім обліком, що полегшує фінансовий контроль у готелі
[12].
Контроль доступу та безпека: Застосування автоматизованих систем для
контролю доступу може забезпечити безпеку гостей та персоналу. Це може
включати системи контролю доступу до приміщень, використання карток-
ключів тощо. Аналіз даних та управління: Автоматизація дозволяє готелям
збирати та аналізувати дані про клієнтів, операції та попит, що допомагає у
вдосконаленні стратегій управління та пропозицій для клієнтів.
10
Маркетинг і CRM: Автоматизовані системи допомагають готелям вести
ефективний маркетинг, використовуючи дані клієнтів та CRM системи для
персоналізованих пропозицій та взаємодії з гостями. Мобільні додатки і
обслуговування: Розвиток мобільних технологій дозволяє готелям надавати
мобільні додатки для зручного бронювання, перегляду послуг та контролю
над проживанням.
Це лише деякі з аспектів, які можуть бути включені до огляду та аналізу
в контексті застосування автоматизованих систем в готельному господарстві.
Переваги та недоліки
Автоматизовані системи керування готелем мають свої переваги та
недоліки:
Переваги:
Ефективність і зручність: Забезпечують автоматичне управління
бронюванням, обліком, фінансами, що полегшує процес роботи готелю та
збільшує його ефективність.
Зменшення помилок: Автоматизовані системи можуть значно знизити
ризик помилок, пов'язаних з ручним управлінням та обліком даних.
Оптимізація ресурсів: Допомагають ефективно використовувати
ресурси готелю, такі як час персоналу, кімнати та послуги, забезпечуючи їх
оптимальне використання [21].
Аналіз даних і стратегічне планування: Надають можливість збирати та
аналізувати великий обсяг даних, що допомагає у формуванні стратегій та
плануванні майбутніх кроків готелю.
Зручність для клієнтів: Забезпечують зручний онлайн доступ до
інформації про готель, бронювання та додаткові послуги через веб-сайт або
мобільні додатки ( таблиця 1).
11
Таблиця 1
Переваги та недоліки автоматизованої системи керування готелем
№ Переваги Недоліки
1. Ефективність і Високі витрати на
зручність впровадження
2. Зменшення помилок Залежність від технології
3. Необхідність навчання
Оптимізація ресурсів
персоналу
Аналіз даних і
4. стратегічне Загрози кібербезпеки
планування
5. Зручність для клієнтів Втрата людського контакту
Недоліки:
Високі витрати на впровадження: Впровадження та підтримка
автоматизованих систем може бути дорогим процесом, особливо для менших
готелів.
Залежність від технології: Якщо система автоматизації виявиться
нестабільною або відмовить, це може суттєво вплинути на роботу готелю та
обслуговування клієнтів.
Необхідність навчання персоналу: Використання нових технологій
потребує часу та зусиль для навчання персоналу, що може бути складним у
великих готелях з великою кількістю працівників.
Загрози кібербезпеки: Оскільки багато даних про клієнтів та операції
зберігаються в електронній формі, автоматизовані системи можуть бути під
загрозою кібератак.
12
Втрата людського контакту: Покращена автоматизація може призвести
до втрати особистого зв'язку з клієнтами, що може вплинути на якість
обслуговування та сприйняття готелю.
Ці аспекти важливо враховувати при розгляді можливості
впровадження автоматизованих систем у готельному господарстві, оцінці їх
вартості та користі для бізнесу та клієнтів.
Огляд існуючих аналогів
Аналогів програми кваліфікаційної роботи магістра поширено в мережі
Інтернет та існує досить багато різновидностей. Кожен розробник прагне бути
відомим спеціалістом в своїй галузі програмного забезпечення, а розміщений
сайт допомагає поширити інформацію про професійну діяльність. На відміну
від вказаних ресурсів даний проект є широко спеціалізованим та достатньо
зручним у використанні, а також наділений спеціальними унікальними
функціями.
Огляд існуючих аналогів проведено на таких сторінках в Інтернет:
– web-сайт Готелю «“Надія” - відчуй себе вдома!»;
– web-сайт Готелю «АПЕЛЬСИН»;
– web-cайт Готелю «Тернопіль».
1.2.1 Сайт Готелю «“Надія” - відчуй себе вдома!»
Сайт Готелю «“Надія” - відчуй себе вдома!» ромішенний в інтернет за
адресою http://www.nadia.if.ua/. На головній сторінці готелю (Рис. 1.1)
розміщене меню бронювання номерів, приведено інформацію про контактні
дані готелю, його адреса, та розміщена інформація щодо послуг які можливо
отримати, відвідавши готель.
13
Рис. 1.1. Зовнішній вигляд головної сторінки сайту Готелю “Надія”
На головній сторінці сайту розміщено перехід на сторінку з даними про
готель, типи номерів готелю та види послуг. За допомогою головної сторінки
можна більш детальніше дізнатися про види номерів, їх розташування та набір
додаткових послуг. Також можна перейти до розділу спеціальних пропозиції,
та отримати економію коштів в процессі бронювання номерів.
На сайт можлитво заказати такі послуги:
– можливість бронювання місць та реєстрацію в номерах он-лайн;
– організація конференції;
– можливість отримати інші види послуг.
1.2.2 Сайт Готелю «Апельсин»
Сайт Готелю «Апельсин» розміщено і інтернеті за адресою
http://apelsin.ck.ua/site/. На головній сторінці сайту (Рис. 1.2) приведено
зовнішній вигляд готелю та реалізовано меню пошуку та бронювання номерів
14
готелю. Також головна сторінка містить інформацію про контактні дані та
адресу готелю для подальшої поселення.
На головній сторінці web-сайту структуровано та детально надано
інформація про перелік послуг, які надає готель. Наведено види номерів
готелю, які існують в даному господарстві.
Головне меню сайту складається із переходів на головну сторінку, на
сторінку з новинами готелю, на сторінку з меню ресторану, на сторінку з
галереєю та панорамами, на сторінку з 3D туром по території готелю, а також
головне меню містить контакти установи.
На сайті Готелю «Апельсин» можливо отримати наступну інформацію
та замовити послуги:
– інформація про готельне господарство, види номерів та їх
наповнення;
– інформація про організацію конференцій;
– інформація про розміщення, меню та інтер’єр ресторану;
– контактні телефонні номера, гаряча лінія;
Рис. 1.2. Скріншот головної сторінки сайту Готелю «Апельсин»
15
1.2.3 Сайт Готелю «Тернопіль»
Сайт Готелю «Тернопіль» розміщено в інтернеті за адресою:
http://www.hotelternopil.com/. На головній сторінці сайту (Рис. 1.3)
розташовано панель меню, з допомогою якої клієнти зможуть зручно
переходити на потрібні їм сторінки. Головне меню сайту складається з
допоміжноно меню, з використанням якого ви можете забронювати місця та
провести реєстрацію клієнтів, а також дізнатися інформацію про готель.
На сайті Готелю «Тернопіль» можливо отримати наступну інформацію
та замовити послуги:
– детальна інформація про умови проживання в готелі та перелік
послуг;
– інформація про номера та можливість бронювання місць в готелі;
– інформацію про спеціальні пропозиції готелю та замовлення
додаткових послуг;
– контактна інформація.
Рис. 1.3. Скріншот головної сторінки сайту Готелю «Тернопіль»
16
Оформлення сайту не є достатньо вдалим дизайнерським рішенням. На
головній сторінці не приведено панель для бронювання та реєстрації в готелі
та контактні номери телефонів та адреса готелю. Також на розглянутому сайті
відсутня інформація про перелік заброньованих номерів, та їх зовнішній
інтер’єрний вигляд.
1.2.4 Аналіз існуючих аналогів
В результаті аналізу аналогічних за тематикою сайтів можна визначити,
що кожен власник готелю намагається максимально привернути увагу
відвідувачів до його готелю, надати інформацію про перелік послуг,
полегшити процесс реєстрації та бронювання місць для клієнтів.
Аналоги роботи містять в собі додаткові інформаційні матеріали, для
залучення нових відвідувачів: додаткові послуги, опис конференц – залів,
галерей, меню ресторанів.
Сайт Готелю “Надія” - відчуй себе вдома!» містить різнобічну
інформацію, яка стосується як процесу бронювання і надання всіх видів
послуг. На сайті розміщено головне меню, яке має різноманітне, контрастне
забарвлення, також з заданим часовим проміжком відбувається
перелистування фотографій внутрішніх та зовнішніх виглядів готелю. З
головного меню можливо встановити контактні номера та адреса готелю,
також існує простий досуп до головного меню.
Сайт Готелю «Апельсин» має досить яскравий зовнішній вигляд. На
головній сторінці сайту розміщені фотознімки номерів готелю, відразу
доступна панель бронювання номерів, що досить зручно для користувача.
Меню бронювання реалізовано досить вдало. Сайт можна назвати досить
вдалим проектним рішенням, але текст виконано невеликим шрифтом, який
робить незручним весь контент Інтернет-ресурсу.
Сайт Готелю «Тернопіль» не містить достатньої інформації про готель.
Щоб переглянути потрібну клієнтам інформацію потрібно переходити по
17
іншим закладкам, і це є не вдалим проектуванням. Для реалізації процесу
бронювання клієнту потрібно здійснити значну кількість зусиль. Це є не
достатньо зручно та коректно.
На основі розглянутих аналогів можна зробити висновки які проектні
рішення потрібно застосувати в кваліфікаційній роботі, щоб зацікавити
майбутніх відвідувачів сайту.
18
Висновок. Враховуючи інформацію, яка була отримана під час огляду
існуючих аналогів, можна виділити такі переваги, як:
– швидке бронювання номерів для клієнтів;
– основна інформація, що стосуються роботи готелю та надання
основних та додаткових послуг, які розраховані на нових та постійних
відвідувачів сайту готелю;
– доступна галерея зображень номерів кімнат та внутрішніх інтерєрів
готелю;
– можливість переглянути панорами готелюу 3D.
– обладнання конференц–залів;
– можливість онлайн бронювання;
19
РОЗДІЛ 2
АНАЛІЗ АВТОМАТИЗОВАНИХ СИСТЕМ
КЕРУВАННЯ ГОТЕЛЕМ
В даний час практично неможливо уявити готельне господарство, без
наявності в них систем автоматичного управління тими чи іншими
комунікаціями, пристроями, обслуговуванням клієнтів і т.п. Завдання
розробки полягає в створенні сучасної автоматизованої інформаційно-
аналітичної системи готелю: підсистеми керування роботою та аналізу
розміщення клієнтів готелю, яка надає можливість легко реалізувати процесс
практичного бронювання та реєстрації клієнтів. Також існує необхідність в
швидкому користуванні пропонованими послугами, та можливість
забезпечити інформацією користувача.
Розроблений програмний продукт повинен надавати змогу
адміністратору реалізовувати процесс бронювання клієнтів за дуже швидкий
час, без збоїв у програмі. Повинно бути передбачено всі можливі випадки
бронювання номерів, не залежно від часу та дати поселення чи виселення
клієнтів готелю. Розроблений програмний продукт повинен підтримувати
створення графіків щодо популярності номерів готелю. Програма повинна
цілодобово працювати без збоїв. Для того, щоб привернути увагу нових
відвідувачів було створено розділ з бонусними картками. Тобто чим частіше
клієнт готелю використовував додаткові послуги, тим більше у нього могла
бути знижка на замовлення номерів. Розроблена програма надасть
відвідувачам можливість в любий час отримати повну інформацію щодо
їхнього поселення, номер готелю, та бонус карти.
2.1 Вимоги до інтерфейсу програми
Інтерфейс автоматизованої інформаційно-аналітичної системи готелю
має бути розроблений українською мовою. Важливим етапом розробки сайту
20
є визначення складових його дизайну. Основним завданням, яке необхідно
вирішувати при розробці дизайну сайту – зручність адміністратора
реалізувати поставленні перед ним цілі. На головній сторінці реалізовано
процесс бронювання, так як бронювання виконується найчастіше, а потім
реєстрація клієнтів.
Зовнішній вигляд повинен бути зручним та легким в використанні.
2.2 Опис програмних засобів розробки
Засобами програмної реалізації проекту кваліфікаційної роботи
магістра вибрано Hibernate, Java, MySQL.
2.3.1 Hibernate
Hibernate – засіб відображення між реляційними структурами та
об’єктами для платформи Java. Hibernate є вільно
розповсюдженим програмним забезпеченням, яке поширюється на
умовах GNU Lesser General Public License. Hibernate предоставляє легкий для
використання каркас (фреймворк) для зв’язку між об’єктно-орієнтованою
моделлю даних і традиційною реляційною базою даних.
Метою Hibernate є звільнення розробника від значних рутинних
типових завдань із створенням взаємодії з базою даних. Розробник може
застосовувати Hibernate як при розробці з нуля, так і для вже існуючої
розробки бази даних.
Hibernate реалізує зв’язок класів з таблицями бази даних (і типів
даних мови програмування із типами даних SQL), і містить засоби
автоматичної побудови SQL запитів й зчитування/запису даних, і може значно
скоротити час розробки, який типово витрачається на ручне написання
типового SQL і JDBC коду. Hibernate генерує SQL виклики і звільняє процесс
розробки від ручної обробки отримуємого набору даних,
конвертації об’єктів і забезпечення повної сумісності із різними базами
даних.
21
2.3.2 Мова програмування Java
Java — об’єктно-орієнтована мова програмування, розроблена
компанією Sun Microsystems у 1995 році як основний компонент платформи
програмування Java. У офіційній реалізації програми Java проходить
компіляція у байткод, який при виконанні інтерпретується віртуальною
машиною для конкретної платформи.
Програма Java вплинула на розвиток J++, яка поширювалась компанією
Microsoft. Роботу над J++ було призупинено через судовий позов колрпорації
Sun Microsystems, оскільки ця мова програмування була частковою
модифікацією Java. Пізніше в новій програмній платформі
Microsoft .NET випустило J#, щоб полегшити міграцію програмістів J++ або
Java на нову програмну платформу. З часом більш нова мова
програмування С#, стала базовою мовою платформи, взявши багато чого з
Java. J# востаннє включався до складу версії Microsoft Visual Studio 2005.
Мова сценаріїв JavaScript має схожість із Java і синтаксис, але не так пов’язана
із Java.
В якості мови програмування було обрано Java, у цієї мови є багато
суттєвих переваг перед іншими мовами програмування, що дозволяє
реалізувати з її допомогою практично будь-які завдання.
Мова Java нічим не залежить від платформи. Одна з основоположних
переваг мови Java – незалежність її від платформи, на якій розробляються
програми: один і той же код працює під управлінням операційних систем
Windows, Solaris, Linux, Machintosh та інші.
Це дійсно вигідно, коли програми завантажуються через Інтернет для
подальшого використання під управлінням любих операційних систем.
Мова Java дуже проста для вивчення. При розробці Java було приділено
велику увагу зрозумілості мови, тому програми на Java, в порівнянні з
аналогічними програмами на інших мовах, простіше складати, компілювати,
22
налагоджувати і вивчати.Це дозволяє створювати прості модульні програми,
вихідний код яких можливо використовувати багато разів.
2.3.3 СУБД MySQL
Система СУБД MySQL являє собою достатньо невелику та
швидкодійну реляційну СУБД. MySQL – надійна СУБД на базі SQL,
розроблена і підтримувана фірмою Т.с.Х DataKonsultAB (Стокгольм,
Швеція). Починаючи з 1995 року, MySQL стала однієї з найвідоміших СУБД
у світі, що обумовлено її швидкістю, надійністю і достатньо гнучкою
ліцензійною політикою.
Мова SQL – найпоширеніша мова програмування для роботи з базами
даних і закладена в основу роботи практично всіх існуючих СУБД.
Завдяки набору характеристик і великому стандартному набору
інтерфейсних функцій, досить простих у використанні, MySQL стала самим
популярним програмним засобом для роботи з базами даних у РНР. База
даних MySQL – це реляційна база даних.
Реляційна база даних – є результатом сучасного розвитку теоретичної
частини дискретної математики, а саме теорії відносності та булевої алгебри.
Основні поняття реляційної моделі набору даних – це таблиці та база даних.
Зазвичай таблиць у базі даних роміщено багато і обмежуючим фактором
стосовно їхньої кількості є лише об’єм встановленої на конкретному
комп’ютері пам’яті (у тому числі оперативної та фізичної). У багатьох
випадках декілька таблиць застосовується для подання інформації про один і
той же описуємий об’єкт. У подальшому для складання цілісної інформації
про цей об’єкт відбувається індексування кожної з таблиць по певним полям
(які в такому випадку визначаються ключовими полями або просто ключами)
та подальше зв’язування частини таблиць між собою. Зазвичай індексування
реалізується із наступним записом до конкретного індексного файлу, який
створено з одного чи декількох полів та впорядкований за ними конкретним
чином. Це реалізовано для підвищення швидкодії роботи з проіндексованими
23
таблицями, яка набагато швидша, ніж для випадку звичайних таблиць, і для
реалізації зв’язування двох таблиць між собою. Процес видалення зайвої
інформації з бази даних називається нормалізацією, цей процесс полегшує
роботу даної програми а також збільшується продуктивність.
Система СУБД MySQL – це компактно реалізований багато поточний
сервер баз даних. Тому MySQL є ідеальним рішенням для розробки малих та
середніх додатків. Вихідний код сервера компілюються на майже всіх
платформах. Найбільш широко можливості сервера проявляються на
Unix-серверах, де є підтримка реалізації багато поточності, що дає суттєвий
приріст продуктивності. MySQL-сервер є повністю безкоштовним для
некомерційного використання. Основні переваги та можливості MySQL:
– підтримка необмеженої кількості активних користувачів, що
одночасно працюють з базами даних;
– кількість рядків у таблицях може складати 50 млн.;
– швидке виконання всіх команд. Можливо, MySQL – найшвидший
існуючий сервер;
– проста та достатньо ефективна система безпеки. MySQL реально дуже
швидкий сервер, але для досягнення цього розробникам довелося
пожертвувати частиною вимог до реляційних СУБД.
У MySQL відсутні наступні компоненти:
– підтримка роботи вкладених запитів;
– підтримка використання зовнішніх ключів;
– підтримка застосування тригерів та частини збережених процедур.
Також порівняно вагомим аргументом при виборі бази даних, що не
залишило сумнівів про вірність вибору користувачів зробив той факт, що
сервер реляційних баз даних MySQL є сучасним стандартним сервером
більшості хост серверів, що надає можливість безперешкодного встановлення
розробленого сайту на будь-який сервер. Якщо сайт повинен реалізувати
довантаження різних видів скриптів на різні сторінки одночасно (динамічний
сайт), тоді лише розмітки HTML і редактора HTML коду буде недостатньо.
24
Для реалізації динамічного сайту на комп’ютері, необхідно завантажити та
налагодити безкоштовний локальний сервер Xxamp, який працює на
комп’ютері без доступу до Інтернету. І тільки після встановлення цього
програмного забезпечення, можна приступити до вивчення таких мов
програмування, як PHP і MySQL.
2.3 Вимоги до обчислювального середовища
Для поставленої задачі висуваються наступні вимоги до технічних
характеристик комп'ютера з мінімальною продуктивністю, на якому
розроблена система буде успішно робити:
– процесор Intel Pentium 1,6 Ггц і вище;
– як мінімум 1 Гб оперативної пам'яті;
– 2 Гб вільного місця на жорсткому диску;
– монітор і графічна карта повинні бути оснащені матрицею IPS або
E-IPS та підтримувати розподільчу здатністю 1024×768 (оптимальна
розподільча здатність 1920×1080);
Ці вимоги висунуті, виходячи з можливостей багатозадачної
операційної системи Windows ХР/Vista/7/10 та вищих версій, які самі по собі
достатньо вимогливі до апаратного забезпечення комп'ютера. Проте, чим
більша продуктивність комп’ютера, тим швидше будуть загружатися web-
сторінки.
25
Висновок. В другому розділі кваліфікаційної роботи магістра наведено
основні етапи проектування автоматизованої програмної системи готелю,
описані основні вимоги до інтерфейсу програмного продукту, програмні
засоби розробки та наведено мінімальні технічні вимоги для роботи над
проектом кваліфікаційної роботи магістра.
26
РОЗДІЛ 3
ПРОЕКТНІ І СТРУКТУРНІ РІШЕННЯ АВТОМАТИЗОВАНОЇ
СИСТЕМ КЕРУВАННЯ ГОТЕЛЕМ
3.1 Етапи проектування автоматизованої системи готелю:
підсистема керування та розміщення клієнтів
Одним із завдань кваліфікаційної роботи магістра є розробка сучасної
автоматизованої інформаційно-аналітичної системи готельного господарства:
підсистема керування та аналізу розтащування клієнтів. Впровадження такого
проекту дозволить швидко та надійно дати можливість всім зацікавленим
користувачам отримати інформацію про готель, провести швидку реєстрацію
та бронювання місць за клієнтами.
На сьогодні майже кожний сучасний готель має автоматизовану
систему керування та аналізу розтащування клієнтів. В умовах існування
сучасних інформаційних технологій – це абсолютно необхідний аспект, що
дозволяє розширити поле продуктивної діяльності та розширити базу
клієнтів.
Розроблений програмний продукт надає змогу пришвидшити роботу
працівників готелю, розміщення клієнтів, бронювання місць та їх реєстрацію.
Користувачі додатку матимуть змогу в будь-який час ознайомитися з
переліком послуг, ознайомитись із цікавими доступними додатковими
послугими, задавати разнообразні питання адміністраторам.
Пройшовши реєстрацію користувачу додатку надається можливість
перевірити правильність заказу, оплатити замовлені послуги та завершити
процес реєстрації.
Проектування компонентів додатку – один з процесів, якому
приділяють достатньо мало уваги. Варто відзначити, що процес проектування
майбутнього додатку, це процедура економії фінансів і часу. Чим більш
докладно і задовільно сформульовані задачі, чим менше нерозкритих питань,
тим точнішим будуть витрати і тим менше часу піде на реалізацію проекту і
27
на просування продукту в подальшу її реалізацію. Проектування додатку на
початковому етапі дозволяє поділити роботу і побачити цикл життя
конкретного проекту в довгостроковій перспективі. Спроектувавши
заздалегідь поточний розвиток масштабування ресурсу, можливо здійснювати
його побудову з меншими втратами і без переробки базових елементів, що
призводить до суттєвої економії ресурсів як для розробника, так частково і
для замовника.
Проектування та розробка автоматизованої системи поділяється на
наступні етапи:
– затвердження ТЗ на розробку проекту;
– визначення та затвердження базової структури додатку;
– розробка дизайну – складових графічних елементів, макету додатку,
графічних стилів, елементів навігації;
– розробка програмного коду, модулів бази даних і інших елементів,
необхідних для підтримки подальшої роботи проекту;
Пропонуються наступні навігаційні структури додатку:
– лінійна структура (сторінки документа слідують сурово одна за
іншою, є можливість повернення назад на один рівень);
– нелінійна структура (існує можливість переходу між сторінками
незалежно від ієрархії);
– ієрархічна структура (існує головна сторінка, можливість переходів
по дереву посилань, відокремлюються основні розділи);
– комбінована структура (створена на базі ієрархічної та присутні
елементи лінійної).
3.2 Розробка системи
При проектуванні затверджується загальний вид основної структури
програми. Вона реалізується через групу, яка називається процес створення
проекту, прототипу, прообразу розроблюємого об'єкта, стану та способів його
виробництва. У проектуванні застосовують системний підхід, який полягає у
28
визначенні структури системи, типу зав’язків, визначені атрибутів,
дослідженні впливів зовнішнього середовища на досягнення цілей програми
з урахуванням компенсації впливу змін в оточенні.
В роботі використано модель MVC ] (Model-view-controller) –
архітектурний шаблон, який застосовується під час проектування та розробки
програмного забезпечення і добре вписується в розподілену систему.
Шаблон MVC розділяє систему на три частини: модель даних, вигляд
даних та керування. Приміняється для відокремлення даних (модель) від
інтерфейсу користувача (вигляду) так, щоб зміни інтерфейсу користувача
незначно впливали на роботу з даними, а зміни в моделі даних могли
проходити без змін інтерфейсу користувача. Таким чином будуємо схему
(Рис. 3.1). Суцільними лініями вказано прямі зв'язки (виклики методів,
присвоєння значень полів), переривчастими лініями – непрямі зв'язки
(повідомлення через події).
Рис. 3.1. Діаграма MVC (Model-View-Controller)
29
Архітектурний шаблон Модель-Вид-Контролер (MVC) розділяє
програму на три частини. У тріаді до обов'язків компонентів Модель (Model)
входить зберігання даних і забезпечення роботи інтерфейсу до них. Вигляд
(View) відповідальний за представлення цих даних користувачу. Контролер
(Controller) керує всіма компонентами, отримує сигнали у вигляді реакції на
дії користувача, і повідомляє про зміни компоненту Модель. Така внутрішня
структура в цілому поділяє систему на достатньо самостійні частини і
розподіляє відповідальність між різними компонентами.
MVC поділяє цю частину системи на три окремі частини: введення
даних, компонент оброблення даних і виведення інформації. Модель, як вже
було відмічено, інкапсулює ядро даних і частковий функціонал з їх обробки.
Також компонент Модель не залежить від дії процесів введення або виведення
даних. Компонент виводу Вигляд може мати декілька взаємопов'язаних
частин, наприклад, різні таблиці і поля форм, в яких відображається
інформація. У функції Контролера входить моніторинг за подіями, що
виникають в результаті роботи користувача (зміна геометрії курсора миші,
натиснення кнопки або введення даних в текстове поле).
Клієнт-сервер – обчислювальна або мережева архітектура, в якій задача
або мережеве навантаження розділено між постачальниками послуг (сервісів),
окремими серверами, і замовниками послуг, окремими клієнтами. Нерідко
клієнти і сервери взаємодіють через комп'ютерну мережу і можуть бути як
окремими фізичними пристроями, так і різним програмним забезпеченням.
Для забезпечення зв’язку між додатками та передачі даних між ними
використаєм клієнт-серверну архітектуру (Рис. 3.2).
30
Рис. 3.2. Клієнт-серверна модель
Побудову архітектури системи здійснюється шляхом визначення
складових системи, її вхідних і вихідних даних, декомпозиції системи на
окремі підсистеми, компоненти, модулі та розробки її загальної структури.
Процес розроблення, що виконується після етапу аналізу і формування
вимог. Задача такого проектування — перетворення вимог до системи у
вимоги до ПЗ і побудова на їхній основі архітектури системи. Проектування
системи реалізується на основі об'єкто-орієнтованого моделювання методом
UML, який дозволяє враховувати аспекти, властиві діючим акторам системи.
3.3 Стуктурний Java-додаток
Програма запускається у своєму власному середовищі. Вона ізольована
від інших працюючих додатків,тому інші додатки не можуть нашкодити
запущеному. При запуску програми створюється статичне представлення
структури моделі. Статичні елементи, такі як: пакети, класи, їх зміст генерують
дане середовище.
31
Відображаємо пакети, які містять у собі класи(Рис. 3.3,3.7, Г.4). Вони
згруповані за типом застосування, в саме:
a) controller – призначений для управління усіма вхідними запитами і для
створення моделі (Рис. 3.4);
b) dao – динамічне управління транзакціями (Рис. 3.5);
c) entity – встановлюється відповідність з таблицями у базі даних (Рис.
.3.6);
Рис. 3.3– Діаграма пакетів
Рис. 3.4– Діаграма класів пакету controller
32
Рис. 3.5. Діаграма класів пакету dao
Рис. 3.6. Діаграма класів пакету entity
Рис. 3.7. Принцип роботи Model, View, Conrtoler
33
Структура системи яка зображена (Рис. 3.8),складається з:
1. src – вихідний код на Java;
– css – каскадні таблиці стилів, використовується для зображення
сторінок, написаних на мові розмітки;
– js – написання сценаріїв для веб-сторінок, застосовується для
автоматизації обробки і маніпуляції даними;
– manifest.mf – файл, який описує додаток, а також утримує в собі дані
для забезпечення нормальної його роботи;
– jsp – технологія, що дозволяє динамічно генерувати HTML та XML
2. Web-INF – файли стилів, javascript, jsp та файли конфігурації;
34
35
Рис. 3.8. Структура web-додатку
36
ВИСНОВКИ
В кваліфікаційній роботі освітнього ступеня «магістр» було проведено
аналіз стану предмету дослідження та визначено технологію керування
готельним господарством. Розглянуті питання обґрунтування необхідності
побудови автоматизованої системи з метою передачі його в робочу
експлуатацію для адміністраторів готелю; проведено аналіз існуючих
аналогів програмного забезпечення та обґрунтовано вибір програмних і
технічних засобів розробки проекту.
Також була реалізована CRM-система - сучасна автоматизована
інформаційно-аналітична система готелю: модулі керування та аналізу
розміщення клієнтів на основі досліджених методів та прийнятих рішень.
У процесі вирішення поставлених задач отримано подальший розвиток
системи управління взаємозв’язку з клієнтом, який відрізняються від
існуючих використанням нових алгоритмів ведення інформації, що
забезпечує підвищення швидкодії та ефективності у процесі роботи з
системою; удосконалено шаблони проектування, які дозволяють
пришвидшити розробку і покращити якість CRM системи; розроблено
архітектуру CRM-системи з використанням технологій, які дозволять
збільшити продуктивність і масштабованість на усіх рівнях.
Практичне значення результатів полягає у розробці рішення для
побудови архітектури CRM-системи, яке доповнює вже існуючі методики та
сприяє покращенню продуктивності та масштабованості. Крім цього, в роботі
надані практичні рекомендації по впровадженню CRM-систем, розглянуті
проблеми і помилки, які можуть виникнути в процесі впровадження, а також
вивчено питання того, як CRM-системи можуть допомогти в автоматизації
бізнес-процесів і проведенні аналітичної діяльності в будь-якій компанії.
Використання розробленої в кваліфікаційній роботі освітнього ступеня
«магістр» автоматизованої системи дозволить власнику готельного
37
господарства за допомогою розробленого програмного продукту значно
підвищити продуктивність професійної діяльності, прорекламувати свою
діяльність в мережі Інтернет, залучити більше клієнтів та підвищити
продуктивність роботи програмістів.
38
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
1 Albahari B. A ComparativeOverviewof C #. [Текст] / B. Albahari,
2019 — 355 с.
2 Захист та безпека WLAN мереж. [Електронний ресурс] – Режим
доступу до ресурсу :
https://lantorg.com/article/zaschita_i_bezopasnost_wlan_cetej_wifi_pod_kon
trolem.
3 Bluetooth SIG. [Електронний ресурс] – Режим доступу до ресурсу :
https://www.researchgate.net/publication/322228703_Bluetooth_SIG_overse
es_development_of_the_specification_and_prediction_of_program_that_prot
ects_Bluetooth_pin.
4 Home assistant [Електронний ресурс] – Режим доступу до ресурсу:
https://oxorona.com/home-assistant/
5 Raspberry Pi. [Електронний ресурс] – Режим доступу до ресурсу:
https://3d-
https://www.tutorialspoint.com/raspberry_pi/raspberry_pi_tutorial.pdf
6 ДП «НЕК»УКРЕНЕРГО» Досвід країн Євросоюзу з підвищення
енергоефективності, енергоаудиту та енергоменеджменту з
енергоощадності в економіці країн.Відокремлений підрозділ. – К.: 2017.
– 213с.
7 Dr. Ovidiu Vermesan SINTEF, Norway, Dr. Peter FriessEU, Belgium,
“Internet of Things: Converging Technologies for Smart Environments and
Integrated Ecosystems”, river publishers’ series in communications, 2019.
8 Dr. Ovidiu Vermesan SINTEF, Norway, Dr. Peter FriessEU, Belgium,
“Internet of Things–From Research and Innovation to Market Deployment”,
river publishers’ series in communications, 2014.
9 O. Vermesan, P. Friess, P. Guillemin, S. Gusmeroli, et al., “Internet of
Things Strategic Research Agenda”, Chapter 2 in Internet of Things -Global
Technological and Societal Trends, River Publishers, 2019.
39
10 Karen Rose, Scott Eldridge, Lyman Chapin, “The Internet of Things:
An Overview Understanding the Issues and Challenges of a More Connected
World”, The Internet Society (ISOC), 2019.
11 Stearns, P.N. Reconceptualizing the Industrial Revolution. J.
Interdiscip. Hist. 2018, 42, 442–443. [CrossRef]
12 Jensen, M. The Modern Industrial Revolution, Exit, and the Failure of
Internal Control Systems. J. Financ. 1993, 48, 831–880. [CrossRef]
13 Kagermann, H.; Helbig, J.; Hellinger, A.; Wahlster, W.
Recommendations for Implementing the Strategic Initiative Industrie 4.0:
Securing the Future of German Manufacturing Industry; Final Report of the
Industrie 4.0 Working Group; Forschungsunion: Frankfurt/Main, Germany,
2013.
14 Da Xu, L.; He, W.; Li, S. Internet of Things in Industries: A Survey.
IEEE Trans. Ind. Inform. 2014, 10, 2233–2243.
15 Talari, S.; Shafie-Khah, M.; Siano, P.; Loia, V.; Tommasetti, A.;
Catalão, J. A review of smart cities based on the internet of things concept.
Energies 2017, 10, 421.
16 Ibarra-Esquer, J.; González-Navarro, F.; Flores-Rios, B.; Burtseva, L.;
Astorga-Vargas, M. Tracking the evolution of the internet of things concept
across different application domains. Sensors 2017, 17, 1379.
17 Stojkoska, B.L.R.; Trivodaliev, K.V. A review of Internet of Things
for smart home: Challenges and solutions. J. Clean. Prod. 2017, 140, 1454–
1464.
18 Hui, H.; Ding, Y.; Shi, Q.; Li, F.; Song, Y.; Yan, J. 5G network-based
Internet of Things for demand response in smart grid: A survey on application
potential. Appl. Energy 2020, 257, 113972.
19 Petros, anu, D.M.; C ˘arut,as,u, G.; C ˘arut,as,u, N.L.; Pîrjan, A. A
Review of the Recent Developments in Integrating Machine Learning Models
with Sensor Devices in the Smart Buildings Sector with a View to Attaining
40
Enhanced Sensing, Energy Efficiency, and Optimal Building Management.
Energies 2019, 12, 4745.
20 Luo, X.G.; Zhang, H.B.; Zhang, Z.L.; Yu, Y.; Li, K. A New
Framework of Intelligent Public Transportation System Based on the Internet
of Things. IEEE Access 2019, 7, 55290–55304.
21 Khatua, P.K.; Ramachandaramurthy, V.K.; Kasinathan, P.; Yong,
J.Y.; Pasupuleti, J.; Rajagopalan, A. Application and Assessment of Internet
of Things toward the Sustainability of Energy Systems: Challenges and Issues.
Sustain. Cities Soc. 2019, 101957.
22 Haseeb, K.; Almogren, A.; Islam, N.; Ud Din, I.; Jan, Z. An Energy-
Efficient and Secure Routing Protocol for Intrusion Avoidance in IoT-Based
WSN. Energies 2019, 12, 4174.
23 Zouinkhi, A.; Ayadi, H.; Val, T.; Boussaid, B.; Abdelkrim, M.N.
Auto-management of energy in IoT networks. Int. J. Commun. Syst. 2019, 33,
e4168.
24 Internet of Things [Електронний ресурс] – Режим доступу до
ресурсу: https://www.it.ua/ru/knowledge-base/technology-
innovation/internet-veschej-internet-of-things-iot
25 Internet of Things [Електронний ресурс] – Режим доступу до
ресурсу: https://www.researchgate.net/figure/Burst-Mode-Symmetrical-
Double-Sided-Two-way-Ranging_fig2_221366691
26 Banker K. MongoDBinAction (1st ed.). [Текст] / K. Banker, 2017 —
375 с.
27 Жидецький В. Охорона праці користувачів комп’ютерів. [Текст]
/ В. Жидецький . — К. Львів: «Афіша», 2000.
28 Kristina D. MongoDB: TheDefinitiveGuide. [Текст] / O'ReillyMedia
- D. Kristina, 2018 — 216 с.
29 Pirtle M. MongoDBforWebDevelopment. [Текст] / Addison-Wesley
Professional - M. Pirtle, 2017 — 360 с.
41
ДОДАТОК А
Автоматизована інформаційно-аналітична система готелю: підсистема
керування та аналізу розміщення клієнтів. Специфікація
Позначення Найменування Примітка
Документи
UA.ЧДТУ. 23000-01 34-01 ДОДАТОК Б Інструкція
користувачеві
UA.ЧДТУ. 23000-01 90-01 ДОДАТОК В Графічні
матеріали
UA.ЧДТУ. 23000-01 12-01 ДОДАТОК Г Лістинг
програми
42
ДОДАТОК Б
Автоматизована інформаційно-аналітична система готелю:
підсистема керування та аналізу розміщення клієнтів. Інструкція
користувачеві.
1 Інструкція для web додатку
Система описана за характеристиками стандарту ISO/IEC 9126 та за
методом чорного ящика.
1.1 Запуск програми
Для запуску програми необхідно ввести localhost:8080. Після введення
в адресну строку наведений запис, ви попадете на головну сторінку.
Вводимо localhost:8080, натискаємо Enter.
1. Потім ми бачимо головну сторінку, форму бронювання.
1.2 Метод бронювання
На головній сторінці розташовані поля для бронювання клієнта.У
відповідні поля вносимо дані, і після цього вибираємо необхідну дату для
бронювання номера в готелі. Лише коли будуть вибрані дати бронювання
номеру, буде можливість вибрати тип номеру для бронювання.
При вибраній даті відбувається пошук номерів. Пошук відбувається
бо типу номера, тобто на певному періоді часу, ми виконуємо пошук
номерів. Пошук відбувається по типу номера.
Але існує момент, коли на дану дату, тип номера який ми вибираємо,
може бути зайнятим
1.3 Реєстрація клієнта
1. Для реєстрації клієнта потрібно перейти по вкладці реєстрація
2. З’явиться вікно з полями для ввод у в якому потрібно ввести дані
клієнта.
43
ДОДАТОК В
Автоматизована інформаційно-аналітична система готелю: підсистема
керування та аналізу розміщення клієнтів. Графічні матеріали
Рис. В.1. Технологічна схема до бронювання та реєстрації клієнтів
Рис. В.2. Головна сторіка web додатку
44
45
Рис. В.3. Структура web-додатку
Період року Параметр мікроклімату Величина
Температура повітря в приміщенні 22-24°С
Холодний Відносна вологість 40-60 %
Швидкість руху повітря до 0,1м/с
Температура повітря в приміщенні 23-25°С
Теплий Відносна вологість 40-60 %
Швидкість руху повітря 0,1-0,2м/с
Рис. В.4. Параметри мікроклімату
46
Число Витрати
Оплата за
Найменування Міс.посад. дн. на зароб.
роб.
посади оклад, грн. робот плату, гр
день, грн.
и н.
1.Програміст1 31500,00 1500,00 25 37500,00
2.Програміст2 27300,00 1300,00 20 26000,00
3.Web-дизайнер 23100,00 1100,00 12 13200,00
Разом: 76700,00
Рис. В.5. Основна заробітня плата
Рис. В.6. Технології та засоби
47
Рис. В.7. База даних
48
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОІЧНИЙ УНІВЕРСИТЕТ
ФАКУЛЬТЕТ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ І СИСТЕМ
ДОСЛІДЖЕННЯ АВТОМАТИЗОВАНИХ СИСТЕМ КЕРУВАННЯ
ГОТЕЛЕМ
Текст програми
UA.ЧДТУ. 23000-01 12-01
Листів 31
Розробник:
студент IІ курсу
групи МАКІТ-2209 Роман ЛОМАНИЙ
2023
49
Автоматизована інформаційно-аналітична система готелю: підсистема
керування та аналізу розміщення клієнтів. Лістинг програми
1 Компоненти web-додатка
1.1 Conroler
package org.newhotel.controller;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import org.newhotel.dao.SpringProjectDAO;
import org.newhotel.entity.Orders;
import org.newhotel.entity.Rooms;
import org.newhotel.entity.TypeRoom;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.xml.crypto.Data;
@Controller
public class FirstController {
final String selectedRoomNamePrefix = "roomId";
@Autowired
SpringProjectDAO dao;
@RequestMapping("/start.do")
public ModelAndView start(HttpServletRequest request) {
ModelAndView mav = new ModelAndView("booking");
List<TypeRoom> roomType = dao.getAllRooms();
request.getSession().setAttribute("typeRoom",
roomType);
return mav;
}
@RequestMapping(value = "/booking.do", method =
RequestMethod.POST)
50
public ModelAndView registrationOrder(@RequestParam String
surname, @RequestParam String name,
@RequestParam String
dataArrival,
@RequestParam String
dataDeparture, HttpServletRequest request) {
Enumeration<String> names =
request.getParameterNames();
List<Integer> orderedRoomIds = new
ArrayList<Integer>();
while (names.hasMoreElements()) {
String paramName = names.nextElement();
if (paramName.startsWith(selectedRoomNamePrefix))
orderedRoomIds.add(Integer.parseInt(paramName.substring(selecte
dRoomNamePrefix.length())));
}
ModelAndView mav = new ModelAndView("booking");
Date dateArrivalOrders = null;
Date dateDepartureOrders = null;
Date dateOrderOrders = null;
try {
dateArrivalOrders = new SimpleDateFormat("yyyy-MM-
dd").parse(dataArrival);
dateDepartureOrders = new SimpleDateFormat("yyyy-
MM-dd").parse(dataDeparture);
dateOrderOrders = new Date();
} catch (ParseException e) {
e.printStackTrace();
}
for (Integer id : orderedRoomIds) {
Orders order = new Orders();
order.setSurname(surname);
order.setName(name);
order.setMiddlename(null);
order.setDateArrival(dateArrivalOrders);
order.setDateDeparture(dateDepartureOrders);
order.setDateOrder(dateOrderOrders);
order.setCustomer(null);
order.setRoom(dao.readRoom(id));
dao.storeOrder(order);
}
51
return mav;
}
@RequestMapping("/roomsForType.do")
public ModelAndView roomsForType(String startDate, String
endDate, int typeRoomId) throws ParseException {
ModelAndView mav = new ModelAndView("roomsForType");
Date d = new SimpleDateFormat("yyyy-MM-
dd").parse(startDate);
Date d1 = new SimpleDateFormat("yyyy-MM-
dd").parse(endDate);
List<Orders> rooms = dao.getFreeOrders(d, d1,
typeRoomId);
mav.addObject("rooms", rooms);
return mav;
}
@RequestMapping(value = "/searchNewOrder.do", method =
RequestMethod.GET)
public String find() {
return "searchNewOrder";
}
@RequestMapping(value = "/searchNewOrder.do", method =
RequestMethod.POST)
public ModelAndView searchNewOrder(String nameSecond,
String nameFirst) {
ModelAndView mav = new ModelAndView("searchNewOrder");
List<Orders> orderses = dao.readOrders(nameSecond,
nameFirst);
mav.addObject("orderses", orderses);
return mav;
}
@RequestMapping(value = "/registration.do", method =
RequestMethod.GET)
public String reg() {
return "registration";
}
@RequestMapping(value = "/registration.do", method =
RequestMethod.POST)
52
public ModelAndView registrations(String surname, String
name, String middlename, @RequestParam int number_passport,
String country, String city) {
ModelAndView mav = new ModelAndView("registration");
List<Orders> orderses = dao.registrations(surname,
name, middlename, number_passport, country, city);
mav.addObject("orderses", orderses);
return mav;
}
}
1.2 Dao
package org.newhotel.dao;
import java.util.Date;
import java.util.List;
import org.newhotel.entity.Customers;
import org.newhotel.entity.Orders;
import org.newhotel.entity.Rooms;
import org.newhotel.entity.ServiceType;
import org.newhotel.entity.TypeRoom;
public interface SpringProjectDAO {
public void storeOrder(Orders saveOrders);
public Rooms readRoom(int id);
public List<TypeRoom> getAllRooms();
public List<Orders> readOrders(String nameSecond, String
nameFirst);
public List<Orders> getFreeOrders(Date startDate, Date
endDate, int roomType);
public List<Orders> registrations(String surname, String
name, String middlename, int number_passport, String country,
String city);
}
53
package org.newhotel.dao;
import java.util.List;
import org.hibernate.*;
import org.hibernate.criterion.*;
import org.newhotel.entity.Customers;
import org.newhotel.entity.Orders;
import org.newhotel.entity.Rooms;
import org.newhotel.entity.ServiceType;
import org.newhotel.entity.TypeRoom;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import
org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import static
com.sun.corba.se.impl.util.Utility.printStackTrace;
@Repository
@Transactional
public class SpringProjectDAOImpl implements SpringProjectDAO {
@Autowired
SessionFactory sessionFactory;
public List<TypeRoom> readTypeRoom() {
Session session = sessionFactory.getCurrentSession();
List<TypeRoom> list = null;
try {
list = session.createQuery("from TypeRoom").list();
} catch (Exception e) {
printStackTrace();
}
return list;
}
public List<ServiceType> readServiceType() {
return
sessionFactory.getCurrentSession().createQuery("from
ServiceType").list();
}
54
public List<Customers> readCustomers() {
Session session = sessionFactory.getCurrentSession();
List<Customers> list = null;
try {
list = session.createQuery("from
Customers").list();
} catch (Exception e) {
printStackTrace();
}
return list;
}
public List<Orders> readOrders() {
return
sessionFactory.getCurrentSession().createQuery("from
Orders").list();
}
public void storeOrder(Orders saveOrders) {
Session session = sessionFactory.getCurrentSession();
try {
session.save(saveOrders);
} catch (Exception e) {
printStackTrace();
}
}
public List<Rooms> readRooms() {
return
sessionFactory.getCurrentSession().createQuery("from
Rooms").list();
}
public Rooms readRoom(int id) {
List<Rooms> r =
sessionFactory.getCurrentSession().createQuery("from Rooms
where id = " + id).list();
return r.get(0);
}
public List<Rooms> readRoomForType(int typeRoomId) {
55
return
sessionFactory.getCurrentSession().createQuery("from Rooms
where typeRoom.id=:id")
.setParameter("id", typeRoomId)
.list();
}
public Customers readCustomer(int id) {
List<Customers> r =
sessionFactory.getCurrentSession().createQuery("from Customers
where id = " + id).list();
return r.get(0);
}
@Override
public List<TypeRoom> getAllRooms() {
List<TypeRoom> typeRooms = sessionFactory
.getCurrentSession()
.createQuery("from TypeRoom").list();
return typeRooms;
}
@Override
public List<Orders> readOrders(String nameSecond, String
nameFirst) {
String sql = "from Orders where surname='" + nameSecond
+ "' and name='" + nameFirst + "'";
return
sessionFactory.getCurrentSession().createQuery(sql).list();
}
@Override
public List<Orders> getFreeOrders(Date startDate, Date
endDate, int roomType) {
Query query = sessionFactory
.getCurrentSession()
.createQuery("from Rooms r where r.typeRoom.id
= :room_id and r.id not in " +
"(select o.room.id from Orders o where
(o.dateArrival < :dateArrival and o.dateDeparture >
:dateArrival)" +
" or (o.dateArrival > :dateArrival and
o.dateDeparture < :dateDeparture)" +
" or (o.dateArrival > :dateArrival and
o.dateArrival < :dateDeparture)" +
56
" or (o.dateArrival > :dateArrival and
o.dateDeparture < :dateDeparture) )");
query.setParameter("room_id", roomType);
query.setParameter("dateArrival", startDate);
query.setParameter("dateDeparture", endDate);
return query.list();
}
@Override
public List<Orders> registrations(String surname, String
name, String middlename, int number_passport, String country,
String city) {
String sql = "INSERT INTO orders (surname, name,
middlename, number_passport, country, city) VALUES ('" +
surname + "', '" + name + "', '" + middlename + "', " +
number_passport + ", '" + country + "', '" + city + "')";
return
sessionFactory.getCurrentSession().createQuery(sql).list();
}
}
1.3 Entity
package org.newhotel.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "customers")
public class Customers {
@Id
@GeneratedValue
private Integer id;
private String name;
private String surname;
private String middlename;
57
@Column(name = "number_card")
private String numberCard;
@Column(name = "type_card")
private String typeCard;
@Column(name = "bonus_card")
private String bonusCard;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public String getMiddlename() {
return middlename;
}
public void setMiddlename(String middlename) {
this.middlename = middlename;
}
public String getNumberCard() {
58
return numberCard;
}
public void setNumberCard(String numberCard) {
this.numberCard = numberCard;
}
public String getTypeCard() {
return typeCard;
}
public void setTypeCard(String typeCard) {
this.typeCard = typeCard;
}
public String getBonusCard() {
return bonusCard;
}
public void setBonusCard(String bonusCard) {
this.bonusCard = bonusCard;
}
}
package org.newhotel.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
@Table(name = "orders")
public class Orders {
59
package org.newhotel.dao;
import java.util.List;
import org.hibernate.*;
import org.hibernate.criterion.*;
import org.newhotel.entity.Customers;
import org.newhotel.entity.Orders;
import org.newhotel.entity.Rooms;
import org.newhotel.entity.ServiceType;
import org.newhotel.entity.TypeRoom;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import
org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import static
com.sun.corba.se.impl.util.Utility.printStackTrace;
@Repository
@Transactional
public class SpringProjectDAOImpl implements SpringProjectDAO {
@Autowired
SessionFactory sessionFactory;
public List<TypeRoom> readTypeRoom() {
Session session = sessionFactory.getCurrentSession();
List<TypeRoom> list = null;
try {
list = session.createQuery("from TypeRoom").list();
} catch (Exception e) {
printStackTrace();
}
return list;
}
public List<ServiceType> readServiceType() {
return
sessionFactory.getCurrentSession().createQuery("from
ServiceType").list();
60
}
public List<Customers> readCustomers() {
Session session = sessionFactory.getCurrentSession();
List<Customers> list = null;
try {
list = session.createQuery("from
Customers").list();
} catch (Exception e) {
printStackTrace();
}
return list;
}
public List<Orders> readOrders() {
return
sessionFactory.getCurrentSession().createQuery("from
Orders").list();
}
public void storeOrder(Orders saveOrders) {
Session session = sessionFactory.getCurrentSession();
try {
session.save(saveOrders);
} catch (Exception e) {
printStackTrace();
}
}
public List<Rooms> readRooms() {
return
sessionFactory.getCurrentSession().createQuery("from
Rooms").list();
}
public Rooms readRoom(int id) {
List<Rooms> r =
sessionFactory.getCurrentSession().createQuery("from Rooms
where id = " + id).list();
@Id
@GeneratedValue
private Integer id;
61
private String surname;
private String name;
private String middlename;
private Integer tel;
private Integer number_passport;
private String country;
private String sity;
@Column(name = "date_arrival")
@Temporal(TemporalType.TIMESTAMP)
private java.util.Date dateArrival;
@Column(name = "date_departure")
@Temporal(TemporalType.TIMESTAMP)
private java.util.Date dateDeparture;
@Column(name = "date_order")
@Temporal(TemporalType.TIMESTAMP)
private java.util.Date dateOrder;
@ManyToOne
@JoinColumn(name = "customer_id")
private Customers customer;
@ManyToOne
@JoinColumn(name = "id_room")
private Rooms room;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
62
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMiddlename() {
return middlename;
}
public void setMiddlename(String middlename) {
this.middlename = middlename;
}
public java.util.Date getDateArrival() {
return dateArrival;
}
public void setDateArrival(java.util.Date dateArrival) {
this.dateArrival = dateArrival;
}
public java.util.Date getDateDeparture() {
return dateDeparture;
}
public void setDateDeparture(java.util.Date dateDeparture)
{
this.dateDeparture = dateDeparture;
}
// public Integer getTel() { return tel; }
// public void setTel(Integer tel) {
63
// this.tel = tel;
// }
public Integer getNumber_passport() {
return number_passport;
}
public void setNumber_passport(Integer number_passport) {
this.number_passport = number_passport;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getSity() {
return sity;
}
public void setSity(String sity) {
this.sity = sity;
}
public Customers getCustomer() {
return customer;
}
public void setCustomer(Customers customer) {
this.customer = customer;
}
public Rooms getRoom() {
return room;
}
public void setRoom(Rooms room) {
this.room = room;
}
64
public java.util.Date getDateOrder() {
return dateOrder;
}
public void setDateOrder(java.util.Date dateOrder) {
this.dateOrder = dateOrder;
}
@Override
public String toString() {
return "Orders{" +
"id=" + id +
", surname='" + surname + '\'' +
", name='" + name + '\'' +
", middlename='" + middlename + '\'' +
", dateArrival=" + dateArrival +
", dateDeparture=" + dateDeparture +
", dateOrder=" + dateOrder +
", customer=" + customer +
", room=" + room +
'}';
}
}
package org.newhotel.entity;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name = "rooms")
public class Rooms {
@Id
@GeneratedValue
private Integer id;
65
private Integer number;
@ManyToOne
@JoinColumn(name = "type_room_id")
private TypeRoom typeRoom;
private Double price;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public TypeRoom getTypeRoom() {
return typeRoom;
}
public void setTypeRoom(TypeRoom typeRoom) {
this.typeRoom = typeRoom;
}
public Integer getNumber() {
return number;
}
public void setNumber(Integer number) {
this.number = number;
}
66
}
package org.newhotel.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "service_type")
public class ServiceType {
@Id
@GeneratedValue
private Integer id;
private String name;
private Integer price;
@Column(name = "type_count")
private String typeCount;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getPrice() {
return price;
67
}
public void setPrice(Integer price) {
this.price = price;
}
public String getTypeCount() {
return typeCount;
}
public void setTypeCount(String typeCount) {
this.typeCount = typeCount;
}
}
package org.newhotel.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "type_room")
public class TypeRoom {
@Id
@GeneratedValue
@Column(name = "id")
Integer id;
String name;
double price;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
68
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
1.4 Configuration
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-
3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-
3.0.xsd">
<import resource="db-config.xml"/>
<!-- @Controller, @Service, @Configuration, etc. -->
<context:component-scan base-package="org.newhotel.dao"/>
<context:component-scan base-
package="org.newhotel.entity"/>
</beans>
69
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-
3.0.xsd">
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceho
lderConfigurer"
p:location="/WEB-INF/jdbc.properties"/>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-
method="close"
p:driverClassName="${jdbc.driverName}"
p:url="${jdbc.url}" p:username="${jdbc.username}"
p:password="1111"/>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBe
an">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation">
<value>/WEB-INF/hibernate.cfg.xml</value>
</property>
<!--<property name="configurationClass">-->
<!--
<value>org.hibernate.cfg.AnnotationConfiguration</value>-->
<!--</property>-->
<property name="hibernateProperties">
<props>
<prop
key="hibernate.dialect">${jdbc.dialect}</prop>
<prop
key="hibernate.show_sql">${jdbc.show_sql}</prop>
</props>
70
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionM
anager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:annotation-driven/>
</beans>
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-
configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<mapping class="org.newhotel.entity.Orders"/>
<mapping class="org.newhotel.entity.Customers"/>
<mapping class="org.newhotel.entity.Rooms"/>
<mapping class="org.newhotel.entity.ServiceType"/>
<mapping class="org.newhotel.entity.TypeRoom"/>
</session-factory>
</hibernate-configuration>
jdbc.url=jdbc:mysql://localhost:3306/hotel?useUnicode=true&
characterEncoding=utf8
jdbc.username=root
jdbc.password=1111
jdbc.driverName=com.mysql.jdbc.Driver
jdbc.dialect=org.hibernate.dialect.MySQLDialect
jdbc.show_sql=true
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
71
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-
3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-
3.0.xsd">
<context:component-scan base-
package="org.newhotel.controller"/>
<mvc:annotation-driven/>
<context:annotation-config/>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceVie
wResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
<property name="contentType"
value="text/html;charset=UTF-8"/>
</bean>
<!--<bean
class="org.springframework.web.servlet.handler.BeanNameUrlHandl
erMapping" />-->
<!--<mvc:resources mapping="/css/**" location="/css/" />-->
<!--<mvc:resources mapping="/images/**" location="/img/"
/>-->
<!--<mvc:resources mapping="/js/**" location="/js/" />-->
<!--</bean>-->
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>New Hotel Project</display-name>
72
<description>New Hotel application</description>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/application-context.xml</param-
value>
</context-param>
<listener>
<listener-
class>org.springframework.web.context.ContextLoaderListener</li
stener-class>
</listener>
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-
class>org.springframework.web.servlet.DispatcherServlet</servle
t-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
<filter>
<filter-name>charsetFilter</filter-name>
<filter-
class>org.springframework.web.filter.CharacterEncodingFilter</f
ilter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
73
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>charsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>openSessionInViewFilter</filter-name>
<filter-
class>org.springframework.orm.hibernate4.support.OpenSessionInV
iewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<session-config>
<session-timeout>10</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>start.do</welcome-file>
</welcome-file-list>
</web-app>
1.5 View
<%@ page contentType="text/html;charset=UTF-8" language="java"
%>
<%@include file="header.jsp" %>
<form action="booking.do" class="jumbotron form-horizontal"
method="post">
<div class="jumbotron">
<h1>Бронирования</h1>
</div>
<div class="form-group">
<label for="inputSurname" class="col-sm-2 control-
label">Фамилия</label>
74
<div class="col-sm-10">
<input style="width: 275" type="text" class="form-
control" id="inputSurname" placeholder="Фамилия"
name="surname">
</div>
</div>
<div class="form-group">
<label for="inputName" class="col-sm-2 control-
label">Имя</label>
<div class="col-sm-10">
<input style="width: 275" type="text" class="form-
control" id="inputName" placeholder="Имя" name="name">
</div>
</div>
<div class="form-group">
<label for="undefined_display1" class="col-sm-2
control-label">Дата въезда</label>
<div class="col-sm-10">
<input type="text" size="40" style="display:
inline-block;" class="date" id="undefined_display1"
name="dataArrival"/>
<input type="text" size="40" style="display:
none;"/>
</div>
</div>
<div class="form-group">
<label for="undefined_display2" class="col-sm-2
control-label">Дата отъезда</label>
<div class="col-sm-10">
<input type="text" size="40" style="display:
inline-block;" class="date" id="undefined_display2"
name="dataDeparture"/>
<input type="text" size="40" style="display:
none;"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Тип
номера</label>
<div class="btn-group">
75
<select class="form-control" id="typeRoom"
onchange="chooseRoomType();">
<c:forEach items="${typeRoom}" var="room">
<option name="idRoom"
value="${room.id}">${room.name} ${room.price} грн</option>
</c:forEach>
</select>
</div>
</div>
<div id="rooms"></div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-
primary">Забронировать</button>
</div>
</div>
</form>
<%@include file="footer.jsp" %>
<%@ page contentType="text/html;charset=UTF-8" language="java"
%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"
%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"
%>
<html>
<head>
<meta charset="utf-8">
<title>Бронирования клиента</title>
<link
href="${pageContext.request.contextPath}/resources/css/style.cs
s" rel="stylesheet" type="text/css"/>
<link
href="${pageContext.request.contextPath}/resources/css/bootstra
p.min.css" rel="stylesheet" type="text/css"/>
<link
href="${pageContext.request.contextPath}/resources/css/calandar
.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript"
src="${pageContext.request.contextPath}/resources/js/jquery-
1.7.min.js"></script>
76
<script type="text/javascript"
src="${pageContext.request.contextPath}/resources/js/test.calan
dar.js"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/resources/js/jquery.mou
sewheel.js"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/resources/js/will_pickd
ate.js"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/resources/js/bootstrap.
min.js"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/resources/js/main.js"><
/script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/resources/js/bootstrap.
js"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/resources/js/prettify.j
s"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/resources/js/bootstrap-
datepicker.js"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/resources/js/calandar.j
s">
</script>
</head>
<body>
<div class="container">
<div class="header">
<ul class="nav nav-pills pull-right">
<li><a href="start.do">Бронирования</a></li>
<li><a href="registration.do">Регистрация</a></li>
<li><a href="searchNewOrder.do">Поиск
клиента</a></li>
</ul>
<h3 class="text-muted"><a href="/">Готель Нива</a></h3>
</div>
</div>
77
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java"
%>
<%@include file="header.jsp" %>
<form action="registration.do" class="jumbotron form-horizontal"
method="post">
<div class="jumbotron">
<h1>Регистрация</h1>
</div>
<div class="form-group">
<label for="inputSurname" class="col-sm-2 control-
label">Фамилия</label>
<div class="col-sm-10">
<input style="width: 275" type="text" class="form-
control" id="inputSurname" placeholder="Фамилия"
name="surname">
</div>
</div>
<div class="form-group">
<label for="inputName" class="col-sm-2 control-
label">Имя</label>
<div class="col-sm-10">
<input style="width: 275" type="text" class="form-
control" id="inputName" placeholder="Имя" name="name">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Отчество:</label>
<div class="col-sm-10">
<input style="width: 275" type="text" class="form-
control" placeholder="Отчество" name="middlename">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Телефон:</label>
<div class="col-sm-10">
<input style="width: 275" type="text" class="form-
control" placeholder="Телефон" name="tel">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Номер
паспорта:</label>
<div class="col-sm-10">
78
<input style="width: 275" type="text" class="form-
control" placeholder="Номер паспорта"
name="number_passport">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Страна:</label>
<div class="col-sm-10">
<input style="width: 275" type="text" class="form-
control" placeholder="Страна" name="country">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Город:</label>
<div class="col-sm-10">
<input style="width: 275" type="text" class="form-
control" placeholder="Город" name="city">
</div>
</div>
<button type="submit" class="btn btn-info">Добавить</button>
</form>
</div>
<%@include file="footer.jsp" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java"
%>
<html>
<table class="table table-bordered">
<c:forEach var="room" items="${rooms}">
<tr>
<td>${room.number}</td>
<td>${room.typeRoom.name}</td>
<td>${room.price}</td>
<td><input type="checkbox"
name="roomId${room.id}"/></td>
</tr>
</c:forEach>
</table>
<%@ page contentType="text/html;charset=UTF-8" language="java"
%>
<%@include file="header.jsp" %>
<div class="jumbotron">
<form action="searchNewOrder.do" class="form-inline"
method="post">
79
<div class="form-group">
<input type="text" name="nameSecond" class="form-
control" placeholder="Фамилия">
</div>
<div class="form-group">
<input type="text" name="nameFirst" class="form-
control" placeholder="Имя">
</div>
<button type="submit" class="btn btn-
info">Поиск</button>
</form>
<table class="table table-bordered">
<c:forEach var="orders" items="${orderses}">
<tr>
<td>${orders.surname}</td>
<td>${orders.name}</td>
<td><fmt:formatDate pattern="dd-mm-yyyy"
value="${orders.dateArrival}"/></td>
<td><fmt:formatDate pattern="dd-mm-yyyy"
value="${orders.dateDeparture}"/></td>
<td>${orders.room.number}</td>
</tr>
</c:forEach>
</table>
</div>
<%@include file="footer.jsp" %>