Автор работы: Пользователь скрыл имя, 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
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 існує три типи зв’язків – ідентифікуючий, неідентифікуючий і зв'язок – багато до багатьох.
Рис.3 Логічна схема бази даних
Рис.4 Фізична схема бази даних
2.2. Логічне проектування бази даних
Для створення бази даних зі схеми було використано вбудовану компоненту програмного продукту Erwin, за допомогою якої можна згенерувати скрипт та виконавши його у СУБД створити БД ідентичну до схеми.
Послідовність генерації базі даних зі схеми.
Рис. 5. Валідація.
Рис.6
Рис.7
Рис.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;
}
}
}
В системі реалізовано облік клієнтів: