Додаток для автоматизації роботи готелю

Національний  університет «Львівська політехніка»

Кафедра програмного забезпечення

 

 

 

 

 

 

 

 

 

 

 

Курсова робота

з дисципліни «Бази даних»

на  тему:

«Додаток  для автоматизації роботи готелю»

 

 

 

 

 

 

 

 

 

 

Виконала:   

студенка групи ПІ - 32 

Сахаревич І.М. 

 

Перевірила:  

доц. Павич Н.Я.  

 

 

 

 

 

 

 

Львів 2011

Зміст

 

Розділ 1. Постановка задачі обліку готелю ……………..………………3

    1. Опис предметної області………………………………………….3
    2. Специфікація вимог до системи обліку готелю…………………4
      1. Вступ ………………………………………………………………4
      2. Загальний опис ….………………………………………………...4
      3. Характеристики системи ……………………….………………...6
      4. Вимоги зовнішніх інтерфейсів ……………..……...…………….8
      5. Нефункціональні вимоги до проекту ……………………...…….8
    3. Вибір засобів розроблення системи ………………………..…….9

Розділ 2. Проектування бази даних…………….…………………..…....12

2.1. Концептуальне моделювання предметної області ………...……..12

2.2. Логічне проектування бази даних ………………………………....19

Розділ 3. Реалізація програми роботи з базою даних…………...……...20

3.1. Реалізація доступу до даних ………………………………………..21

3.2 Реалізація функціональних характеристик системи ……..………..22

3.3 Опис роботи програми ……………………………………….…..….32

Висновки……………………………………………………………………...39

Додаток А. Скрипт створення  бази даних ……………..………………..41

 

 

 

 

 

 

 

 

 

 

РОЗДІЛ 1. ПОСТАНОВКА ЗАДАЧІ ОБЛІКУ ГОТЕЛЮ

    1. Опис предметної області.

База  даних готелю.

Мета  – спроектувати базу даних, в якій буде зберігатися інформація про номери та послуги, які надаються готелем; про клієнтів, які проживають у готелі; дані про бронювання кімнат; організувати додавання та редагування даних про клієнтів, кімнати, сервіс, проживання, бронювання.

 Інформація накопичується постійно з кожним днем і може змінюватися.

 Основними вимогами до системи є:

    • виведення і зберігання інформації про типи номерів – номер кімнати, комфортність, номер телефону, вартість;
    • введення і зберігання інформації про стан кімнат (вільна, зайнята чи заброньована);
    • введення, виведення і зберігання інформації про послуги, що надаються, і їх вартість;
    • введення, виведення і зберігання інформації про клієнтів, що мешкають у готелі;
    • введення, виведення і зберігання інформації бронювання кімнат.

Більш докладно  вимоги описані нижче:

Ведення довідника кімнат. Це повна вичерпна інформація про кімнати, які включає в себе дані про комфортність, вартість, номер кімнати та інше.

Ведення довідника клієнтів. Клієнти бувають  постійні і одноразові, але, незважаючи на це, інформація про них залишається  в базі даних. Довідник постійно поповнюється, редагується. Як правило, редагуванням інформації про клієнтів та поповненням довідника займається одна людина. 
 Ведення довідника послуг, що надаються. По кожній послузі необхідно вести дані клієнта який цю послугу замовив та номер в якому проживає цей клієнт, про її вартість.

Ведення довідника бронювання. Всі дані про бронювання зберігаються у системі, лише у разі відміни бронювання дані видаляються з бази даних. Дані постійно оновлюються.

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

Довідник  постійно поповнюється, редагується.

Для рішення  цих задач необхідно розробити  у додатку:

      1. форми для введення, виведення та редагування інформації про клієнтів, кімнати та послуги, що надаються і їх кошторис;
      2. форму для бронювання: тип кімнати бронювання, ім’я та прізвище клієнта, дата в’їзду;
      3. форму для внесення  або редагування даних про проживання: ідентифікатор проживання, дата в’їзду та виїзду, кількість осіб які поселяються і кількість дітей, номер кімнати, вартість номеру, особисті дані про клієнта (ім’я та прізвище клієнта, телефонний номер, дата народження, стать).

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

 

    1. Специфікація вимог до системи обліку перукарні
  1. Вступ

    1. Призначення, мета

 

В даній специфікації описуватиметься робота інформаційної системи роботи готелю.

 Призначення  і мета системи: 

      1. старшому адміністратору готелю та адміністратору служби розміщення – надання інформації про працівників, клієнтів, розрахунки та інше;
      2. портьє – надання інформації про проживання та можливість здійснювати оформлення бронювання та замовлених послуг клієнтом.
  1. Загальний опис

    1. Перспективи продукту

Даний продукт розробляється як самодостатня системи. Вона належить до систем управління інформацією та доступу  до даних.

    1. Характеристики продукту

Основні характеристики системи:

  • Робота з даними – перегляд даних.
  • Внесення змін – внесення нової інформації, редагування та видалення існуючої інформації.
    1. Класи користувачів та їх характеристики

Для цієї системи  можна виділити такі класи користувачів:

  • Старший адміністратор готелю - користувач, який має доступ до всіх підсистем системи.
  • Адміністратор служби розміщення – користувач, який має доступ до інформації за допомогою якої контролює надання номерів, приймає заявки на бронювання і розміщує гостей, узгоджуючи це зі старшим адміністратором готелю.
  • Портьє – користувач, який має можливість переглядати інформацію про проживання та бронювання кімнат та здійснювати прийом і реєстрацію прибулих гостей, розміщення в заброньовані й підготовлені до заселення номери. Портьє підпорядковується безпосередньо черговому адміністратору.

    1. Середовище функціонування

Даний програмний продукт  буде написано на C#.  Як  СУБД вибрана MS SQL Server 2008. Так як продукт є кросплатформним рішенням, його використання не прив'язується до конкретної операційної системи. Мінімальна апаратна підтримка буде визначатися середовищем функціонування.

    1. Документація користувача

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

  1. Характеристики системи

 

3.1 Робота з системою користувачем

3.1.1 Опис і пріоритет

Пріоритет високий.  Призначається для користувачів, які хочуть переглянути вміст  системи.

3.1.2 Послідовності дія/відгук

Користувач входить у систему без авторизації.

Функціональні вимоги

1.1: Можливість переглядання вмісту  системи.

1.2: Можливість редагування та  додавання інформації про клієнтів, кімнати, послуги.

1.3: Перевірка  бронювання та оформлення бронювання.

1.4: Можливість внесення чи редагування інформації про проживання.

  1. Вимоги зовнішніх інтерфейсів

    1. Апаратні інтерфейси

Продукт не має особливих вимог до апаратних  інтерфейсів.

    1. Програмні інтерфейси

Система буде працювати з даними у вигляді таблиці, які будуть

знаходитися на сервері баз даних MS SQL Server 2008 за допомогою технології ADO.NET та інтерфейсу ODBC.

    1. Комунікаційні інтерфейси

Продукт не має особливих вимог  до комунікаційних інтерфейсів.

  1. Інші нефункціональні вимоги

    1. Вимоги продуктивності

Основною  вимогою є швидкість обробки  даних системою, зокрема це залежить  від швидкості доступу до бази даних.

    1. Вимоги надійності

Система повинна  забезпечувати надійність обробки  даних та збереження інформації. У  випадку збоїв при обробці  запитів, необхідно передбачити  можливість відкату даних до попереднього стану за допомогою транзакцій. При  неможливості відкату, використовувати  базу-копію. Недолік – використання великих об'ємів дискової пам'яті.

    1. Вимоги безпеки

Для коректної роботи системи, при  якій дані будуть захищені, програми будуть працювати коректно було забезпечено:

  • Безпеку даних за допомогою використання останніх версій антивірусних програм
  • Консультації з фахівцями в області захисту інформації
    1. Атрибути якості програмного продукту

Якісні характеристики програмного продукту:

  • Прозорість – користувач не знає як відбуваються дані запити, що спрощує взаємодію користувача і програми
  • Супроводжуваність – можливість супроводити систему для її постійного вдосконалення
  • Надійність – система є надійною і стійкою до збоїв
  • Зручність користування – є простою у використанні, легко освоюється користувачами, простий інтерфейс.
  1. Інші вимоги

Система не має  інших вимог, крім описаних вище у  даній специфікації.

 

    1. Вибір засобів розроблення системи

ADO.NET Entity Framework (EF) - об'єктно-орієнтована технологія доступу до даних, є object-relational mapping (ORM) рішенням для. NET Framework від Microsoft. Надає можливість взаємодії з об'єктами як за допомогою LINQ у вигляді LINQ to Entities, так і з використанням Entity SQL. Для полегшення побудови web-рішень використовується як ADO.NET Data Services (Astoria), так і зв'язка з Windows Communication Foundation і Windows Presentation Foundation, що дозволяє будувати багаторівневі програми, реалізуючи один з шаблонів проектування MVC, MVP або MVVM.

 

 

 

 

 

РОЗДІЛ 2. ПРОЕКТУВАННЯ БАЗИ ДАНИХ

2.1.  Концептуальне моделювання  предметної області

При оцінці предметної області, а саме – готелю, було розроблено схему бази даних яка дає змогу вести облік даних, до яких належать клієнти готелю, кімнати та послуги, які надаються, проживання та бронювання у готелі.

Для управління даними про клієнтів була розроблена сутність «Client» з такими складовими:

ID_client – ідентифікатор клієнта для забезпечення впорядкованості та швидкого пошуку або редагування даних за кодом, а також для більш зручного написання запитів та розстановки індексів,

NameSurname – ім’я та прізвище клієнта.

Birthday – день народження клієнта,

Gender – стать клієнта,

Phone – особистий номер телефону.

 

Для управління даними про кімнати була розроблена сутність «Room» з такими складовими:

ID_room – ідентифікатор кімнати для забезпечення впорядкованості та швидкого пошуку або редагування даних про кімнату за кодом, також для більш зручного написання запитів та розстановки індексів,

Number_room – номер кімнати,

Type_room – тип кімнати(стандарт1, стандарт2, напівлюкс, люкс, апартаменти, конференц-зал, бенкетний зал),

Note – примітка, зокрема інформація про комфортність кімнати,

Phone – номер телефону в кімнаті,

Price_room – ціна кімнати вказана в гривнях за одну добу,

State_room – стан кімнати(вільна, зайнята, зарезервована).

 

Для управління даними про послуги була розроблена сутність «Service» з такими складовими:

ID_service – ідентифікатор послуги для забезпечення впорядкованості та швидкого пошуку або редагування послуги за кодом, також для більш зручного написання запитів та розстановки індексів,

Name_service – назва послуги,

Note – примітка,

Price – вартість послуги.

 

Для роботи та управління даними про послуги які були замовлені і надані була розроблена сутність «Service_rendered» з такими складовими:

ID_service_rendered – ідентифікатор наданої послуги для забезпечення впорядкованості та швидкого пошуку або редагування послуги за кодом, також для більш зручного написання запитів та розстановки індексів,

ID_service – ідентифікатор послуги, для визначення деталей про послугу,

ID_client – ідентифікатор клієнта, котрий замовив послугу,

Cost – вартість послуги,

Service_State – стан послуги (виконано, очікує, скасовано).

 

Для роботи та управління даними про бронювання була розроблена сутність «Reservation» з такими складовими:

ID_reservation – ідентифікатор броні для забезпечення впорядкованості та швидкого пошуку або редагування даних за кодом, а також для більш зручного написання запитів та розстановки індексів.

From_the_date – дата запланованого поселення,

ID_room – ідентифікатор кімнати, яка бронюється,

ID_client – ідентифікатор клієнта.

 

Для роботи та управління даними про проживання була розроблена сутність «Residence» з такими складовими:

ID_residence – ідентифікатор проживання для забезпечення впорядкованості та швидкого пошуку або редагування даних за кодом, а також для більш зручного написання запитів та розстановки індексів,

From_the_date_residence – дата в’їзду,

To_date – дата виїзду,

Number_of_persons – кількість осіб,

Number_of_children – кількість дітей,

ID_client – ідентифікатор клієнта,

ID_ room – ідентифікатор кімнати,

All_Cost – загальна вартість проживання.

 

Сутності  «Клієнт» і «Бронювання». Один клієнт  може забронювати декілька номерів. Отже зв’язок один до багатьох.

Сутності  «Клієнт» і «Проживання». Один клієнт  може поселитися в декілька номерів. Отже зв’язок один до багатьох.

Сутності  «Клієнт» і «Замовлені послуги». Один клієнт  може замовити декілька послуг. Отже зв’язок один до багатьох.

Сутності  «Послуги» і «Замовлені послуги». Одну послугу можуть замовити декілька раз. Отже зв’язок один до багатьох.

Сутності  «Кімнати» і «Проживання». В одній кімнаті можуть проживати  безліч разів. Отже зв’язок один до багатьох.

Сутності  «Кімнати» і «Бронювання». Одну кімнату  можуть забронювати  лише раз. Отже зв’язок один до одного.

 

Після визначення сутностей і зв’язків між ними переходимо до побудови схеми. Для побудови концептуальної моделі використовувався CASE -  засіб Erwin 7.3. Erwin Data. При створенні моделі даних  в програмі ми можемо вибрати її тип: фізична, логічна або комбінована(фізична і логічна). Нам потрібний третій варіант:

Рис. 1. Вибір типу моделі даних.

 

При створенні таблиць добавляємо поле, яке буде первинним ключем цієї таблиці, а також інші атрибути і вибираємо  для них типи даних.

Рис. 2. Створення сутностей і атрибутів.

 

Після створення  таблиць переходимо до встановлення зв’язків між ними. У Erwin Data Modeller існує три типи зв’язків – ідентифікуючий, неідентифікуючий і зв'язок – багато до багатьох.

Ідентифікуючий  зв’язок встановлюється між залежною (батьківською) і незалежною (дочірньою) сутностями. Коли створюється ідентифікуючий зв’язок , ERWin автоматично перетворює дочірню сутність в залежну. Залежна сутність позначається прямокутником з заокругленими кутами. При встановленні ідентифікуючого зв’язку атрибути первинного ключа батьківської сутності автоматично переносяться в склад первинного ключа дочірньої сутності. Ця операція доповнення атрибутів дочірньої сутності при створенні зв’язка називається міграцією атрибутів. В дочірній сутності нові атрибути позначаються як зовнішній ключ - (FK).

При встановленні неідентифікованого зв’язку дочірня  сутність залишається залежною, а  атрибути первинного ключа батьківської сутності мігрують в склад неключових компонентів батьківської сутності. Неідентифікуючий зв’язок служить  для зв’язування незалежних сутностей. Ідентифікуючий зв’язок позначається на діаграмі суцільною лінією з жирною точкою на дочірньому кінці зв’язку, не ідентифікуючий – пунктирною.

Зв’язок багато-до-багатьох, що відповідає останньому типу, відображається суцільною лінією з жирними точками  на обох кінцях. При переході в фізичне  представлення моделі ERWin автоматично  перетворює зв’язок багато-до-багатьох, додаючи нову таблицю та встановлюючи два нових зв’язки один-до-багатьох від старих таблиць до нової.

Використовуючи Erwin 7.3  та описані вище сутності та зв’язки між ними було побудовано концептуальну модель даних на логічному  рівні:

 

Рис.3 Логічна  схема бази даних

Тепер переходимо до фізичного рівня представлення  і переглядаємо модель:

Рис.4 Фізична  схема бази даних

 

2.2.  Логічне проектування бази  даних

Для створення  бази даних зі схеми було використано  вбудовану компоненту програмного  продукту Erwin, за допомогою якої можна згенерувати скрипт та виконавши його у СУБД створити БД ідентичну до схеми.

Послідовність генерації базі даних зі схеми.

  1. Пісдя створення схеми пройдена валідація, натисканням на кнопку на панелі інструментів.

Рис. 5. Валідація.

 

  1. У вкладці Tools ( ) вибираємо меню Froward Engineer  та підпункт Schema Generation.

 

Рис.6

  1. Обравши всі потрібні пункти створення схеми натискаємо кнопку Generate.

 

Рис.7

  1. У вікні, що відкрилось вписуємо у відповідні поля назву сервера та бази даних та натискаємо кнопку Connect.

 

Рис.8 

 

  1. Після генерації скрипту зявляється таке діалогове вікно із згенерованим скриптом створення БД.

Рис.9

Рис.9 Скрипт який генерується після натискання кнопки «Connect»

Після генерації  бази даних у СУБД Microsoft SQL Server 2008 отримується база даних з такими таблицями та зв’язками:

Рис.10 Діаграма БД

Також нижче  представлені сутності, тобто таблиці  які були створенні в результаті виконання скрипта створення  бази.

Рис.11 Таблиці  в БД

РОЗДІЛ 3. РЕАЛІЗАЦІЯ ПРОГРАМИ РОБОТИ З БАЗОЮ  ДАНИХ

3.1. Реалізація доступу до даних

Для доступу  до даних було використано технології ADO.NET Entity Framework

Entity Framework дозволяє розробникам писати  менше коду для доступу до  даних, зменшує обслуговування, становить  структуру даних в більш придатної  для бізнесу (і менш нормалізованої) формі і забезпечує сталість  даних. При використанні разом  з LINQ to Entities (обговорюється далі) вона також дозволяє знизити  кількість помилок часу компіляції, оскільки вона будує суворо  типізовані класи, грунтуючись  на концептуальної моделі. 
           Entity Framework створює концептуальну модель, для якої розробники пишуть код. До цієї моделі можна звертатися безпосередньо, використовуючи новий постачальник даних EntityClient і нову мову (схожий на T-SQL), званий Entity SQL. Модель EntityClient схожа із звичними об'єктами ADO.NET, він використовує об'єкти EntityConnection і EntityCommand, щоб повернути DbDataReader. Іншим варіантом для розробників є задіяння Object Services з використанням якого об'єкта ObjectQuery і Entity SQL, або LINQ to Entities. Object Services дозволяють розробникам скористатися побудованими на основі концептуальної моделі класами, що пропонують можливості по суворої типізації та постійності. 
Такі способи доступу до даних дозволяють розробнику взаємодіяти з концептуальними сутностями EDM. Шари EDM існують у вигляді XML-файлів; на сьогодні EDM можна створити вручну за допомогою засобу командного рядка (EDMGEN.EXE) або за допомогою майстра Visual Studio. Нижче наведено код зєднання з БД для подальшого виконання запитів на ADO.NET Entity Framework: 

HotelEntities db = new HotelEntities();

 

 

3.2. Реалізація функціональних характеристик  системи

В системі реалізовано облік кімнат:

У системі  можна переглядати та редагувати інформацію про кімнати.

Для перегляду  даних про кімнати використовується запит:

HotelEntities  hotel  = new HotelEntities();

var query = from b in hotel.Room select new { b.ID_room, b.Number_room, b.Type_room, b.Note, b.Phone, b.Price_room, b.State_room };

this.dataGrid1.DataContext = query;

Для редагування інформації про кімнату у базу даних готелю і для її подальшого задіювання в роботі використовується запит:       

HotelEntities hotel = new HotelEntities();

List<Room> roomList = new List<Room>();

Room room = new Room();

        private void button1_Click(object sender, RoutedEventArgs e)

        {

            room.Type_room = textBox1.Text;

            room.Number_room = Convert.ToInt32(textBox2.Text);

            room.Note = textBox4.Text;

            room.Phone = textBox5.Text;

            room.Price_room = Convert.ToInt32(textBox6.Text);

 

            var roominfo = from r in hotel.Room

                           where r.ID_room == room.ID_room

                           select r;

            foreach (var i in roominfo)

            {

                i.Type_room = room.Type_room;

                i.Number_room = room.Number_room;

                i.Note = room.Note;

                i.Phone = room.Phone;

                i.Price_room = room.Price_room;

                if (comboBox4.Text == "Поселена")

                    i.State_room = "зайнята";

                else

                    if (comboBox4.Text == "Зарезервована")

                        i.State_room = "зарезервована";

                    else

                        i.State_room = "вільна";

            }

 

            hotel.SaveChanges();

 

            Window1 wind1 = new Window1();

            wind1.ShowDialog();

        }

 

        private void Window_Loaded(object sender, RoutedEventArgs e)

        {

            var id = from room in hotel.Room

                     select room.ID_room;

            foreach (var i in id)

            {

                comboBox1.Items.Add(i);

            }

            comboBox1.SelectedIndex = -1;

            comboBox4.Items.Add("---");

            comboBox4.Items.Add("Зарезервована");

            comboBox4.Items.Add("Поселена");

            comboBox4.Items.Add("Вільна");

 

          

 

            var list = (from room in hotel.Room

                           select room);

            foreach (var i in list)

            {

                Room r = new Room();

                r.ID_room = i.ID_room;

               

                r.Number_room = i.Number_room;

                r.Phone = i.Phone;

                r.Price_room = i.Price_room;

                r.Note = i.Note;

                r.Type_room = i.Type_room;

                r.State_room = i.State_room;

                roomList.Add(r);

            }

        }

 

        private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)

        {

            room = roomList.Find(r1 => r1.ID_room == Convert.ToInt32(comboBox1.SelectedItem));

            if (room != null)

            {

 

                textBox1.Text = room.Type_room;

                textBox2.Text = Convert.ToString(room.Number_room);

                textBox4.Text = room.Note;

                textBox5.Text = room.Phone;

                textBox6.Text = Convert.ToString(room.Price_room);

                if (room.State_room.Contains("зарезервована"))

                {

                    comboBox4.SelectedIndex = 1;

                }

                else

                    if (room.State_room.Contains("зайнята"))

                    {

                        comboBox4.SelectedIndex = 2;

                    }

                    else

                        if (room.State_room.Contains("вільна"))

                        {

                            comboBox4.SelectedIndex = 3;

                        }

            }

        }

 

В системі реалізовано  облік клієнтів:

Додаток для автоматизації роботи готелю