報告題名:休閒度假村住房暨設施使用
Resort check-in and use of facilities
作者:林淮蒽、李筱萱、張欣平、謝奕箴、簡暄穎
系級:資訊三丙
學號:D0683364、D0610960、D0611027、D0683453、D0683484
開課老師:林明言 教授
課程名稱:資料庫系統
開課系所:資訊工程學系
開課學年:108 學年度 第一學期
中文摘要
休閒度假村住房暨設施使用是一個資料庫系統的實作,度假村的員工可以透過網
站,並依所屬部門進行工作上的管控、準備顧客所需的服務;顧客可以依自己的
娛樂需求,預約使用娛樂設施及餐飲服務,並於網站中瀏覽當次消費紀錄。我們
以 XAMPP 來實現三層式架構,使用 HTML 建立的網站介面供使用者操作並以 CSS
美化,再經由 PHP 以 SQL 送出指令給 MySQL 資料庫,來進行資料存取,如此便
可以達到資料的一致性和正確性。
進入度假村網站,櫃台可以對現場或線上訂房的顧客進行房間指派,對即將被入
住的房間進行登記,也可將房間清潔需求通知房務部,而餐廳和設施皆可以特定
條件來搜尋使用紀錄,增加管理的便利性,例如:搜尋 10 點到 12 點這個時段使
用設施的顧客資訊或搜尋顧客來餐廳用餐的費用;顧客輸入身分證可查詢當次住
房的相關訊息,例如:每一筆設施及餐廳的使用狀況及花費總金額,還可留下對
飯店的評語供營運方參考,在顧客退房後,所有相關住房訊息將會被刪除,顧客
隱私可以得到保障。
關鍵字:三層式架構、後端語言、資料庫系統、網頁設計
Abstract
Resort check-in and use of facilities is an implementation of a database
system. Employees based on their departments at the resort can use the
website to handle their work and prepare services required by customers.
Customers can not only reserve facilities and restaurants as required,
but also check consumption record on the website. We use XAMPP to implement
a three-tiered architecture, use a web interface created by HTML for user
operation and beautify it with CSS, and then PHP send commands via
Structured Query Language (SQL) to MySQL for data access.
Enter the resort website, the counter can make room assignments for
customers who book on-site or online, record the rooms checked in, or
notify the housekeeping department of room cleaning requirements. To
increase the convenience of management, the usage records of restaurants
and facilities can be searched under specific conditions. For example:
employee can search the information of customers using facilities during
the period from 10:00 to 12:00 or the cost of dining in restaurants.
Customers can enter the identity card number to query the relevant
information of the current check-in, such as each facility and restaurant
usage history and total amount. If customers have any suggestions, they
can also leave their comments on the website for the operator's reference.
After the customers check out, all relevant check-in information will be
deleted, and customers’ privacy can be guaranteed.
Keyword:Back-end language、Database System(DBS)、Three-tier
application architecture、Web design
目 次
中文摘要 ... 1
Abstract ... 2
第1章 主題 ... 4
第2章 目的 ... 4
第3章 系統使用者 ... 4
第4章 使用者需求功能 ... 4
第5章 輸入資料、輸出資料(顯示資料) ... 5
I.
輸入資料 ... 5
II.
輸出資料 ... 5
第6章 EER-diagram ... 6
第7章 Database schema ... 7
第8章 Normalization ... 8
第9章 Database tables ... 9
第10章 Database SQL ... 21
I.
僅使用到單一表格的查詢 ... 21
II.
使用到兩個表格的查詢 ... 21
III.
使用到三個表格的查詢 ... 22
IV.
複合查詢-I ... 22
V.
複合查詢-II ... 23
VI.
變更表格的操作 ... 23
VII.
增加或刪除或修改資料的操作 ... 24
第11章 Three-tier application function ... 25
I.
Home page ... 25
II.
For customers ... 25
III.
For employees ... 28
第12章 辛酸血淚史 ... 32
第1章 主題
休閒度假村住房暨設施使用資料庫
第2章 目的
建立一套住宿房客基本資料,及其使用度假村內設施的紀錄。房客可以
依自己的娛樂需求,預約使用娛樂設施及餐飲服務,並於退房前預覽所需支
付金額。而營運方可透過此系統準備房客所需的服務,管理各項設施情況、
安排使用時段來避免人流壅塞及設備的缺失,使顧客在本渡假村能享受到最
高品質的服務。
第3章 系統使用者
• 休閒度假村
• 房客
第4章 使用者需求功能
•
房客:新增、刪除、查詢訂房狀態、預約餐飲及設施服務、新增評價。
•
休閒度假村:
• 櫃檯接待:查詢訂房資訊;新增房客訂房資料;修改房間清潔需求、
入住狀態;查詢可入住房間。
• 管理部:娛樂設施(游泳池、水療桑拿、健身房、兒童休憩區、娛樂間…
等)即時管理,包括查詢設施預約情況;修改或刪除房客預約登記資
料;新增設施種類、房客使用資訊;修改設施維護需求。
• 餐飲部:餐飲服務(各式餐廳、酒吧)即時管理,包括查詢房客預約內
容;修改或刪除房客預約登記資料;新增餐廳種類、房客使用資訊。
• 房務部:查詢、修改房間清潔情況。
第5章 輸入資料、輸出資料(顯示資料)
/*渡假村內基本建築架構不在修改 ,包括房間數、設施種類、餐廳種類*/
/*本次實作資料庫不含預約功能(斜體部分)*/
I. 輸入資料
• 房客:訂房資料(姓名、身分證字號、電話、入住人數、入住日期、退房日
期、房型)、房間清潔需求、評價、餐飲與娛樂設施預約(項目名稱、日期、
時段、人數)
• 休閒度假村:
• 櫃檯接待:訂房資料(姓名、身分證字號、電話、入住人數、入住日期、
退房日期、房型) 、房間資訊(房間清潔需求、房間是否已入住)
• 管理部:設施基本資訊(名稱、時段、單次使用價錢、維護需求、使用
人數上限)、房客使用資訊 (項目名稱、日期、時段、人數)
• 餐飲部:餐廳基本資訊(名稱、時段、使用人數上限)、房客使用資訊 (項
目名稱、日期、時段、人數、金額)
• 房務部:房間資訊
II. 輸出資料
• 房客:住房資料(姓名、身分證字號、電話、入住人數、入住日期、退房日
期、每筆消費金額、評價)、預定服務之排程
• 休閒度假村:
• 櫃檯接待:房客住房資料、房間資訊(包括房型、剩餘間數)
• 管理部:設施基本資訊、房客預約使用資訊
• 餐飲部:餐廳基本資訊、房客預約使用資訊
• 房務部:房間清潔需求
第6章 EER-diagram
/*多次修改後的版本*/
第8章 Normalization
/*檢查符合 3NF*/ /*符合 1NF*/
第9章 Database tables
/*BOOLEAN = TINYINT(4);部分 tuple 省略(太多筆放不下)*/
customer (名字, 姓氏, 身分證, 入住日期, 退房日期, 房間編號,
評論, 入住人數, 喜好房型)
FOREIGN KEY (R_no) REFERENCES room(No)
ON DELETE CASCADE ON UPDATE CASCADE ; DOMAIN (S_date,E_date) : S_date < E_date
Datetype (R_type) : ENUM(‘1’, ‘2’, ‘4’, ‘6’, ‘8’)
TRIGGER (AFTER INSERT & UPDATE & DELETE) : change room.Available vaule TRIGGER (BEFORE INSERT & UPDATE) : ckeck R_type = room.Pnum
Fname Lname Ssn S_date E_date Comment Pnum R_no R_type
Petit Gallo 1283791642 2019/12/09 2019/12/28 Normal 6 9026 6 Martin David 1293747578 2019/12/20 2019/12/29 Normal 8 6029 8 Robert Jackson 1749389067 2019/12/12 2019/12/30 Great 2 5007 2 Rossi Jonsson 2367768990 2019/12/28 2020/01/03 Great 3 2018 4 Smith Roux 2817457547 2019/12/10 2020/01/01 Great 2 2009 2 Leroy Olsen 2938104891 2019/12/07 2020/12/29 Normal 3 8019 4 Vera Clarke 3892182046 2019/12/25 2020/01/01 Normal 5 3025 6 Nagy Ruiz 4345244361 2019/12/11 2019/12/28 NULL 1 6002 1 Weber Nowak 4547589654 2019/12/15 2019/12/29 Great 4 3019 4 Vincent Haugen 4643533333 2019/12/02 2019/12/30 Great 3 7023 4
Jerry Lin 5498520032 2019-12-31 2020-01-02 3 2
Halsey Frangipane 5899964521 2019-12-23 2019-12-27 5 6 Becker Mazur 6868898069 2019/12/29 2020/1/7 Normal 1 2005 1 Alex Harris 7493716054 2019/12/23 2020/1/9 Great 1 8003 1 Eva Green 8904732891 2019/12/22 2019/12/28 Normal 3 6019 4
customer_phone (身分證, 電話號碼)
FOREIGN KEY (C_ssn) REFERENCES customer(Ssn) ON DELETE CASCADE ON UPDATE CASCADE ;
C_ssn Phone 1283791642 0955215486 1293747578 +886 965541258 1749389067 0945612376 2367768990 0955047859 2817457547 0956999856 2938104891 +886 988563410 3892182046 (+886) 979964880 4345244361 0956454129 4547589654 0964582223 5498520032 0955268426 5899964521 0911158412 5899964521 +886 5214154864
→ 12 tuples
department (編號, 名稱, 屬於櫃台, 屬於餐飲部, 屬於房務部,
屬於管理部)
No Name Counter FB_dept H_dept M_dept
0 Headquarters 0 0 0 0 1 Counter 1 0 0 0 2 Food&Beverage Department 0 1 0 0 3 Housekeeping Department 0 0 1 0 4 Manage Department 0 0 0 1
→ 5 tuples
employee (編號, 名字, 姓氏, 部門編號, 上司編號)
FOREIGN KEY (Super_no) REFERENCES employee(No) ON DELETE CASCADE ON UPDATE CASCADE ; FOREIGN KEY (D_no) REFERENCES department(No) ON DELETE CASCADE ON UPDATE SET NULL ;
No Fname Lname D_no Super_no
0001 Lydia Lee 0 NULL
0002 Yuna Lin 1 0001 0003 Mimi Chang 2 0001 0004 Alessandra Chien 3 0001 0005 Angela Xie 4 0001 0006 Maris Jones 1 0002 0007 Peter Wilson 1 0002 0008 Amy Hall 2 0003 0009 Michael Patel 3 0004 0010 Chaeles White 4 0005 0011 Martin Pall 2 0003 0012 Stephen Adams 4 0005 0013 Ellen Maguire 2 0003 0014 Charles Dong 4 0005 0015 Brown Wilson 3 0004 0016 Doherty Smyth 3 0004 0017 Quinn Young 3 0004 0018 Martin MacDonald 3 0004 0019 Murray Jones 3 0004 0020 Reid Williams 3 0004 0021 Ross Evans 3 0004 0022 Watson Roberts 3 0004
→ 22 tuples
facility (編號, 名稱, 最大容納人數, 使否損壞,
每時段每人使用單價)
No Name Max_num Is_broken Price
1 Children's playground 20 0 0 2 Entertainment 60 0 0 3 Gym 30 0 200 4 Spa 10 0 500 5 Swimming pool 100 0 200
→ 5 tuples
facility_manage (設施編號,管理員工編號)
FOREIGN KEY (E_no) REFERENCES employee(No) ON DELETE CASCADE ON UPDATE CASCADE ; FOREIGN KEY (FA_no) REFERENCES facility(No) ON DELETE CASCADE ON UPDATE CASCADE ; DOMAIN (E_no) : This employee must work for M_dept
FA_no E_no 1 0005 2 0010 3 0010 4 0012 5 0012
→ 5 tuples
facility_use (設施編號, 使用者身分證)
FOREIGN KEY (C_ssn) REFERENCES customer(Ssn ON DELETE CASCADE ON UPDATE CASCADE ; FOREIGN KEY (FA_no) REFERENCES facility(No) ON DELETE CASCADE ON UPDATE CASCADE ;
TRIGGER (BEFORE INSERT & UPDATE) : check facility.Is_broken IS FALSE
FA_no C_ssn 1 1283791642 1 1293747578 1 1749389067 2 2367768990 2 2817457547 2 2938104891 3 3892182046 3 4345244361 3 4547589654 4 4673238942 4 4748932678 5 5657644234 5 6445521789
→ 13 tuples
facility_use_data (設施編號, 使用者身分證, 日期, 時段, 人數)
FOREIGN KEY (C_ssn) REFERENCES customer(Ssn) ON DELETE CASCADE ON UPDATE CASCADE ; FOREIGN KEY (FA_no) REFERENCES facility(No) ON DELETE CASCADE ON UPDATE CASCADE ; Datetype (Session) :
ENUM('10:00 - 12:00', '12:00 - 14:00', '14:00 - 16:00', '16:00 - 18:00', '18:00 - 20:00', '20:00 - 22:00')
DOMAIN (Pnum) : Pnum > 0 AND Pnum <= customer.Pnum
DOMAIN (Date) : Date >= customer.S_date AND Date <=customer.E_date TRIGGER (BEFORE INSERT & UPDATE) : check facility.Is_broken IS FALSE
FA_no C_ssn Date Session Pnum
1 1283791642 2019-12-13 12:00 - 14:00 1 1 1293747578 2019-12-22 14:00 - 16:00 1 1 1749389067 2019-12-24 14:00 – 16:00 1 2 2367768990 2020-01-02 18:00 - 20:00 1 2 2817457547 2020-01-01 20:00 - 22:00 1 2 2938104891 2019-12-25 16:00 – 18:00 2 3 3892182046 2019-12-26 18:00 – 20:00 5 3 4345244361 2019-12-19 10:00 – 12:00 1 3 4547589654 2019-12-16 12:00 – 14:00 3 4 4673238942 2019-12-26 20:00 – 22:00 3 4 4748932678 2019-12-17 16:00 – 18:00 1 5 5657644234 2019-12-08 14:00 – 16:00 2 5 6445521789 2019-12-19 10:00 - 12:00 6
→ 13 tuples
restaurant (編號, 名稱, 最大容納人數)
No Name Max_num 1 Afteroon tea 50 2 Bar 80 3 Chinese meal 200 4 Japanese meal 200 5 Westerm meal 200→ 5 tuples
restaurant_manage (餐廳編號,管理員工編號)
FOREIGN KEY (E_no) REFERENCES employee(No) ON DELETE CASCADE ON UPDATE CASCADE ; FOREIGN KEY (RE_no) REFERENCES restaurant(No) ON DELETE CASCADE ON UPDATE CASCADE ; DOMAIN (E_no) : This employee must work for FB_dept
RE_no E_no 1 0003 2 0008 3 0008 4 0011 5 0013
→ 5 tuples
restaurant_use (餐廳編號, 使用者身分證)
FOREIGN KEY (C_ssn) REFERENCES customer(Ssn) ON DELETE CASCADE ON UPDATE CASCADE ; FOREIGN KEY (RE_no) REFERENCES restaurant(No) ON DELETE CASCADE ON UPDATE CASCADE ;
RE_no C_ssn 1 1749389067 1 3892182046 1 4673238942 2 1283791642 2 1749389067 3 4345244361 3 7493716054 4 4547589654 4 5657644234 5 2817457547 5 2938104891
→ 11 tuples
restaurant_use_data (餐廳編號, 使用者身分證, 日期,
時段, 人數)
FOREIGN KEY (C_ssn) REFERENCES customer(Ssn) ON DELETE CASCADE ON UPDATE CASCADE ; FOREIGN KEY (RE_no) REFERENCES restaurant(No) ON DELETE CASCADE ON UPDATE CASCADE ; Datetype (Session) :
ENUM('07:00 - 08:30', '08:30 - 10:00', '11:00 - 12:30', '12:30 - 14:00', '14:00 - 15:30', '15:30 - 17:00', '17:00 - 18:30', '18:30 - 20:00', '20:00 - 21:30', '21:30 - 23:00', '23:00 - 00:30', '00:30 - 2:00')
DOMAIN (Pnum) : Pnum > 0 AND Pnum <= customer.Pnum
DOMAIN (Date) : Date >= customer.S_date AND Date <= customer.E_date
RE_no C_ssn Date Session Cost Pnum
1 1749389067 2019-12-12 14:00 - 15:30 800 2 1 3892182046 2019-12-26 17:00 – 18:30 2000 5 1 4673238942 2019-12-30 14:00 – 15:30 1200 3 2 1283791642 2019-12-26 00:30 – 02:00 1500 3 2 1749389067 2019-12-22 12:30 – 14:00 1000 2 3 4345244361 2019-12-12 12:30 – 14:00 0 1 3 7493716054 2019-12-25 12:30 – 14:00 0 1 3 7493716054 2019-12-25 20:00 – 21:30 0 1 4 4547589654 2019-12-25 17:00 – 18:30 0 3 4 5657644234 2019-12-01 14:00 – 15:30 0 2 5 2817457547 2020-01-01 07:00 – 08:30 0 1 5 2938104891 2019-12-07 17:00 – 18:30 0 3
→ 12 tuples
room (編號, 是否可入住, 是否需要清潔)
DOMAIN (No) : { (2000 , 2030] , (3000 , 3030] , (5000 , 5030] , (6000 , 6030] , (7000 , 7030] , (8000 , 8030] , (9000 , 9030] }
DOMAIN (Pnum) :
1 : 2001-3030 , 2 : 5001-6030 , 4 : 7001-8030 , 6 : 2001-3030 , 8 : 2001-3030 Datetype (Pnum) : ENUM('1', '2', '4', '6', '8')
*所有房間號都已建好,只列出部分
No Pnum Available Need_clean
2005 1 0 0 2006 1 1 0 2007 2 1 0 2020 4 1 1 2021 4 1 0 3026 6 1 0 3027 6 1 1 3028 8 1 0 3029 8 1 0
→ 210 tuples
room_manage (房間編號,管理員工編號)
FOREIGN KEY (E_no) REFERENCES employee(No) ON DELETE CASCADE ON UPDATE CASCADE ; FOREIGN KEY (R_no) REFERENCES room(No)
ON DELETE CASCADE ON UPDATE CASCADE ; DOMAIN (E_no) : This employee must work for H_dept
*所有房間號都有員工負責,只列出部分
R_no E_no 2004 0004 3001 0009 6016 0016 7009 0017 8002 0018→ 210 tuples
serve (服務員工編號, 顧客身分證)
FOREIGN KEY (E_no) REFERENCES employee(No) ON DELETE CASCADE ON UPDATE CASCADE ; FOREIGN KEY (C_ssn) REFERENCES customer(Ssn) ON DELETE CASCADE ON UPDATE CASCADE ; DOMAIN (E_no) : This employee must work for Counter
E_no C_ssn 0006 1749389067 0007 3892182046 0006 4673238942 0007 7493716054 0002 8904732891
→ 5 tuples
第10章 Database SQL
I. 僅使用到單一表格的查詢
III. 使用到三個表格的查詢
IV. 複合查詢-I
V. 複合查詢-II
(使用到 ORDER BY, IN, max/min/avg/sum/count, GROUP BY, HAVING)
第11章 Three-tier application function
I. Home page
A 和 B 為顧客的兩組主要功能
C 為員工專用連結,需進行員工身分認證才可進入管理頁面,共四個部門
II. For customers
點擊進入頁面 → 輸入身分證
A B C
SELECT Lname, Fname, Pnum, Ssn, S_date, E_date, R_no FROM customer
→ 顯示單次入住資訊(可查看消費情況/ 以房為單位) → 下方可留下評價
SELECT f.Name, Date, Session, fd.Pnum, Price
FROM facility_use_data fd ,customer c, facility f WHERE fd.C_Ssn = c.Ssn
AND c.Ssn = \"$P_Ssn\" AND f.No = fd.FA_no;
SELECT r.Name, Date, Session, re.Pnum, Cost
FROM restaurant_use_data re ,customer c, restaurant r WHERE re.C_Ssn = c.Ssn
AND r.No = re.RE_no AND c.Ssn = \"$P_Ssn\";
點擊進入頁面 → 輸入預定時間及人數
→ 點選喜好房型 → 填寫基本資料
SELECT COUNT(*) FROM room WHERE Available = 1 GROUP BY room.Pnum; SELECT COUNT(*) FROM customer WHERE R_no is NULLGROUP BY customer.R_type;
INSERT INTO customer(Fname,Lname,Ssn,S_Date, E_Date,Pnum,R_type)
VALUES(\"$FNAME\",\"$LNAME\",\"$SSN\",\"$SDATE\", \"$EDATE\",$PNUM,$RTYPE);
INSERT INTO customer_phone(C_ssn,Phone) VALUES (\"$SSN\",$PHONE1);
INSERT INTO customer_phone(C_ssn,Phone) VALUES (\"$SSN\",$PHONE2);
III. For employees
點擊房務部圖示 → 管理所有房間的清潔狀況
SELECT No FROM employee WHERE No = $no;
點擊櫃檯圖示 →完成現場/線上訂單 check-in & check-out
SELECT SUM(rd.Cost)
FROM restaurant_use_data rd, room, customer WHERE R_no = {$_POST['R_no']}
AND Ssn = rd.C_ssn AND room.No = R_no;
SELECT SUM(f.Price * fd.Pnum)
FROM facility_use_data fd, room, customer, facility f WHERE R_no = {$_POST['R_no']}
SELECT * FROM customer
WHERE R_no = {$_POST['R_no']};
DELETE FROM customer WHERE $D_SSN\"; SELECT Fname, Lname, Ssn, R_type
FROM customer WHERE R_no IS NULL;
SELECT No, Pnum FROM room
WHERE Available = 1 AND Need_clean = 0 AND Pnum = \"$TYPE\";
UPDATE customer SET R_no = $I_NO
WHERE Ssn = \"$I_SSN\"; 當顧客要現場訂房,先做 customer 的 BOOKING 動作,資料顯示於 online orders 再由櫃檯指派房間
點擊管理部圖示 → 察看、新增、刪除顧客使用設施的資訊
SELECT R_no, Lname, Fname, Ssn, r.Name, Date, Session, rd.Pnum, rd.Cost FROM customer c, restaurant r, restaurant_use_data rd, room
WHERE rd.C_ssn = c.Ssn AND r.No = rd.RE_no AND c.R_no = room.No $CTL_RENO $CTL_RNO $CTL_DATE $CTL_SESSION $CTL_COST $CTL_PNUM;
INSERT INTO restaurant_use_data(RE_no,C_ssn,Date,Session,Cost,Pnum) VALUES ({$_POST['RE_no']},'$FIND_SSN','{$_POST['Date']}',
{$_POST['Session']},$N_COST,$N_PNUM);
DELETE FROM restaurant_use_data
WHERE RE_no = $FIND_RENO AND $I_SSN AND $I_DATE\" AND $I_SESSION\" AND $I_COST AND $I_PNUM;
點擊餐飲部圖示 → 察看、新增、刪除顧客使用餐飲的資訊
SELECT R_no, Lname, Fname, Ssn, r.Name, Date, Session, rd.Pnum, rd.Cost FROM customer c, restaurant r, restaurant_use_data rd, room
WHERE rd.C_ssn = c.Ssn AND r.No = rd.RE_no AND c.R_no = room.No
$CTL_RENO $CTL_RNO $CTL_DATE $CTL_SESSION $CTL_COST $CTL_PNUM;
INSERT INTO restaurant_use_data(RE_no,C_ssn,Date,Session,Cost,Pnum)
VALUES ({$_POST['RE_no']},'$FIND_SSN','{$_POST['Date']}',{$_POST['Session']},$N_COST,$N_PNUM);
DELETE FROM restaurant_use_data
WHERE RE_no = $FIND_RENO AND $I_SSN AND $I_DATE\" AND $I_SESSION\" AND $I_COST AND $I_PNUM;