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

Автор работы: Пользователь скрыл имя, 11 Декабря 2013 в 19:55, курсовая работа

Описание работы

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

Содержание работы

Розділ 1. Постановка задачі обліку готелю ……………..………………3
Опис предметної області………………………………………….3
Специфікація вимог до системи обліку готелю…………………4
Вступ ………………………………………………………………4
Загальний опис ….………………………………………………...4
Характеристики системи ……………………….………………...6
Вимоги зовнішніх інтерфейсів ……………..……...…………….8
Нефункціональні вимоги до проекту ……………………...…….8
Вибір засобів розроблення системи ………………………..…….9
Розділ 2. Проектування бази даних…………….…………………..…....12
2.1. Концептуальне моделювання предметної області ………...……..12
2.2. Логічне проектування бази даних ………………………………....19
Розділ 3. Реалізація програми роботи з базою даних…………...……...20
3.1. Реалізація доступу до даних ………………………………………..21
3.2 Реалізація функціональних характеристик системи ……..………..22
3.3 Опис роботи програми ……………………………………….…..….32
Висновки……………………………………………………………………...39
Додаток А. Скрипт створення бази даних ……………..………………..41

Файлы: 1 файл

Записка.docx

— 3.34 Мб (Скачать файл)

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;

                        }

            }

        }

 

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

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