Додаток для автоматизації роботи готелю
Автор работы: Пользователь скрыл имя, 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, за допомогою якої можна згенерувати скрипт та виконавши його у СУБД створити БД ідентичну до схеми.
Послідовність генерації базі даних зі схеми.
- Пісдя створення схеми пройдена валідація, натисканням на кнопку на панелі інструментів.
Рис. 5. Валідація.
- У вкладці Tools ( ) вибираємо меню Froward Engineer та підпункт Schema Generation.
Рис.6
- Обравши всі потрібні пункти створення схеми натискаємо кнопку Generate.
Рис.7
- У вікні, що відкрилось вписуємо у відповідні поля назву сервера та бази даних та натискаємо кнопку Connect.
Рис.8
- Після генерації скрипту зявляється таке діалогове вікно із згенерованим скриптом створення БД.
Рис.9
Рис.9 Скрипт який генерується після натискання кнопки «Connect»
Після генерації бази даних у СУБД Microsoft SQL Server 2008 отримується база даних з такими таблицями та зв’язками:
Рис.10 Діаграма БД
Також нижче представлені сутності, тобто таблиці які були створенні в результаті виконання скрипта створення бази.
Рис.11 Таблиці в БД
РОЗДІЛ 3. РЕАЛІЗАЦІЯ ПРОГРАМИ РОБОТИ З БАЗОЮ ДАНИХ
3.1. Реалізація доступу до даних
Для доступу до даних було використано технології ADO.NET Entity Framework
Entity Framework
дозволяє розробникам писати
менше коду для доступу до
даних, зменшує обслуговування, становить
структуру даних в більш
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(obj
{
room = roomList.Find(r1 => r1.ID_room == Convert.ToInt32(comboBox1.
if (room != null)
{
textBox1.Text = room.Type_room;
textBox2.Text = Convert.ToString(room.Number_
textBox4.Text = room.Note;
textBox5.Text = room.Phone;
textBox6.Text = Convert.ToString(room.Price_
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;
}
}
}
В системі реалізовано облік клієнтів: