Tải bản đầy đủ (.doc) (32 trang)

quản lý khách sạn

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.22 MB, 32 trang )

ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER

QUẢN LÝ KHÁCH SẠN

PHẦN I: KIẾN THỨC VÀ NỀN TẢNG VỀ SQL SERVER 2005
1. Giới thiệu về SQL Server 2005
SQL Server 2005 là một hệ thống quản lý cơ sở dữ liệu (Relational Database
Management System (RDBMS)) sử dụng Transact-SQL để trao đổi dữ liệu giữa
Client computer và SQL Server computer. Một RDBMS bao gồm databases, database
engine và các ứng dụng dùng để quản lý dữ liệu và các bộ phận khác nhau trong
RDBMS.
SQL Server 2005 được tối ưu để có thể chạy trên môi trường cơ sở dữ liệu rất lớn.
(Very Large Database Environment) lên đến Tera-Byte và có thể phục vụ cùng
lúc cho hàng ngàn user. SQL Server 2005 có thể kết hợp "ăn ý" với các server khác
như Microsoft Internet Information Server (IIS), E-Commerce Server, Proxy Server....
Các phiên bản của SQL Server 2005:
Enterprise: Hỗ trợ không giới hạn số lượng CPU và kích thước Database. Hỗ trợ
không giới hạn RAM (nhưng tùy thuộc vào kích thước RAM tối đa mà HĐH hỗ trợ)
và các hệ thống 64bit.
Standard: Tương tự như bản Enterprise nhưng chỉ hỗ trợ 4 CPU. Ngoài ra phiên bản
này cũng không được trang bị một số tính năng cao cấp khác.
Workgroup: Tương tự bản Standard nhưng chỉ hỗ trợ 2 CPU và tối đa 3GB RAM
Express: Bản miễn phí, hỗ trợ tối đa 1CPU, 1GB RAM và kích thước Database giới
hạn trong 4GB.

Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương

Trang: 1


ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER



QUẢN LÝ KHÁCH SẠN

2. Structured Query Language (SQL)
2.1. SQL là ngôn ngữ của cơ sở dữ liệu quan hệ
SQL viết tắt của Structured Query Language (ngôn ngữ hỏi có cấu trúc), là công
cụ sử dụng để tổ chức, quản lý và truy xuất dữ liệu đuợc lưu trữ trong các cơ sở dữ liệu.
SQL là một hệ thống ngôn ngữ bao gồm tập các câu lệnh sử dụng để tương tác với cơ
sở dữ liệu quan hệ.
Khả năng của SQL vượt xa so với một công cụ truy xuất dữ liệu, mặc dù đây là
mục đích ban đầu khi SQL được xây dựng nên và truy xuất dữ liệu vẫn còn là một
trong những chức năng quan trọng của nó. SQL được sử dụng để điều khiển tất cả các
chức năng mà một hệ quản trị cơ sở dữ liệu cung cấp cho người dùng bao gồm:
• Định nghĩa dữ liệu: SQL cung cấp khả năng định nghĩa các cơ sở dữ liệu,
các cấu trúc lưu trữ và tổ chức dữ liệu cũng như mối quan hệ giữa các thành
phần dữ liệu.
• Truy xuất và thao tác dữ liệu: Với SQL, người dùng có thể dễ dàng thực
hiện các thao tác truy xuất, bổ sung, cập nhật và loại bỏ dữ liệu trong các cơ
sở dữ liệu.
• Điều khiển truy cập: SQL có thể được sử dụng để cấp phát và kiểm soát các
thao tác của người sử dụng trên dữ liệu, đảm bảo sự an toàn cho cơ sở dữ
liệu. Đảm bảo toàn vẹn dữ liệu: SQL định nghĩa các ràng buộc toàn vẹn trong
cơ sở dữ liệu nhờ đó đảm bảo tính hợp lệ và chính xác của dữ liệu trước các
thao tác cập nhật cũng như các lỗi của hệ thống.
Như vậy, có thể nói rằng SQL là một ngôn ngữ hoàn thiện được sử dụng
trong các hệ thống cơ sở dữ liệu và là một thành phần không thể thiếu trong các hệ
quản trị cơ sở dữ liệu. Mặc dù SQL không phải là một ngôn ngữ lập trình như C, C+
+, Java,... song các câu lệnh mà SQL cung cấp có thể được nhúng vào trong các
ngôn ngữ lập trình nhằm xây dựng các ứng dụng tương tác với cơ sở dữ liệu.
Khác với các ngôn ngữ lập trình quen thuộc như C, C++, Java,... SQL là ngôn ngữ

có tính khai báo. Với SQL, người dùng chỉ cần mô tả các yêu cầu cần phải thực hiện
trên cơ sở dữ liệu mà không cần phải chỉ ra cách thức thực hiện các yêu cầu như thế
nào. Chính vì vậy, SQL là ngôn ngữ dễ tiếp cận và dễ sử dụng.

Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương

Trang: 2


ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER

QUẢN LÝ KHÁCH SẠN

2.2 Vai trò của SQL
Bản thân SQL không phải là một hệ quản trị cơ sở dữ liệu, nó không thể tồn tại độc
lập. SQL thực sự là một phần của hệ quản trị cơ sở dữ liệu, nó xuất hiện trong các hệ
quản trị cơ sở dữ liệu với vai trò ngôn ngữ và là công cụ giao tiếp giữa người sử dụng
và hệ quản trị cơ sở dữ liệu.
Trong hầu hết các hệ quản trị cơ sở dữ liệu quan hệ, SQL có những vai trò như sau:
SQL là ngôn ngữ hỏi có tính tương tác: Người sử dụng có thể dễ dàng thông qua các
trình tiện ích để gởi các yêu cầu dưới dạng các câu lệnh SQL đến cơ sở dữ liệu và nhận
kết quả trả về từ cơ sở dữ liệu.
SQL là ngôn ngữ lập trình cơ sở dữ liệu: Các lập trình viên có thể nhúng các câu
lệnh SQL vào trong các ngôn ngữ lập trình để xây dựng nên các chương trình ứng dụng
giao tiếp với cơ sở dữ liệu.
SQL là ngôn ngữ quản trị cơ sở dữ liệu: Thông qua SQL người quản trị cơ sở dữ
liệu có thể quản lý được cơ sở dữ liệu, định nghĩa các cấu trúc lưu trữ dữ liệu điều
khiển truy cập cơ sở dữ liệu,...
SQL là ngôn ngữ cho các hệ thống khách chủ (client/server): Trong các hệ thống cơ
dữ liệu khách chủ, SQL được sử dụng như là công cụ để giao tiếp giữa các trình ứng

dụng máy khách với máy chủ cơ sở dữ liệu.
SQL là ngôn ngữ truy cập dữ liệu trên Internet: Cho đến nay, hầu hết các máy chủ
Web cũng như các máy chủ trên Internet sử dụng SQL với vai trò là ngôn ngữ để
tương tác với dữ liệu trong các cơ sở dữ liệu.
SQL là ngôn ngữ cơ sở dữ liệu phân tán: Đối với các hệ quản trị cơ sở dữ liệu phân
tán, mỗi một hệ thống sử dụng SQL để giao tiếp với các hệ thống khác trên mạng, gởi
và nhận các yêu cầu truy xuất dữ liệu với nhau.
SQL là ngôn ngữ sử dụng cho các cổng giao tiếp cơ sở dữ liệu: Trong một
hệ thống mạng máy tính với nhiều hệ quản trị cơ sở dữ liệu khác nhau, SQL thường
được sử dụng như là một chuẩn ngôn ngữ để giao tiếp giữa các hệ quản trị cơ sở dữ
liệu.

Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương

Trang: 3


ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER

QUẢN LÝ KHÁCH SẠN

2.3 Giới thiệu sơ lược về Transact SQL (T-SQL)
Transact-SQL là ngôn ngữ SQL mở rộng dựa trên SQL chuẩn của ISO
(International Organization for Standardization) và ANSI (American

National

Standards Institute) được sử dụng trong SQL Server khác với P-SQL (Procedural-SQL)
dùng trong Oracle.
SQL chuẩn bao gồm khoảng 40 câu lệnh.Trong các hệ quản trị cơ sở dữ liệu khác

nhau, mặc dù các câu lệnh đều có cùng dạng và cùng mục đích sử dụng song mỗi một
hệ quản trị cơ sở dữ liệu có thể có một số thay đổi nào đó. Điều này đôi khi dẫn đến cú
pháp chi tiết của các câu lệnh có thể sẽ khác nhau trong các hệ quản trị cơ cơ sở dữ liệu
khác nhau.

Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương

Trang: 4


ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER

QUẢN LÝ KHÁCH SẠN

PHẦN II: MÔ HÌNH DỮ LIỆU
1. Mô hình thực thể kết hợp:

2. Mô hình quan hệ:
Khach( makhach, tenkhach, socmnd, diahi, sodienthoai)
Dangky( sodk, makhach, sophong, ngaydk)
Phong( sophong, maloaiphong)
Loaiphong( maloaiphong, tenloaiphong, giathuengay, giathuentuan)
Phieuthanhtoan( maphieu, sophong, makhach, ngaynhanphong,
ngaytraphong, tongtienphong, tongtiendichvu)
Dichvu( madichvu, tendichvu, donvitinh, dongia, ghichu)
Chitietdichvu( machitiet, maphieu, madichvu, soluong)

Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương

Trang: 5



ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER

QUẢN LÝ KHÁCH SẠN

PHẦN III: NỘI DUNG VÀ KẾT QUẢ CÀI ĐẶT MÔ HÌNH TRÊN SQL SERVER
1. Mô hình vật lý dữ liệu
Là mô hình của dữ liệu được cài đặt trên máy vi tính dưới một hệ quản trị cơ sở dữ
liệu nào đó. Ứng với mỗi lược đồ quan hệ trong mô hình tổ chức dữ liệu, dữ liệu được cài
đặt thành một tệp cơ sở dữ liệu gồm các cột: tên trường, kiểu dữ liệu, độ lớn và phần ràng
buộc dữ liệu.
Với bài toán "Quản lý khách sạn" thì mô hình hoá dữ liệu được cài đặt trên máy
dưới hệ quản trị cơ sở dữ liệu "Java kết nối với Microsoft SQL 2005". Ứng với mỗi lược
đồ quan hệ trong mô hình tổ chức dữ liệu, dữ liệu được cài đặt dưới dạng bảng_Table
như sau:
• KHACH(makhach, tenkhach, socmnd, diachi, sodienthoai)
Tên trường
Makhach
Tenkhach
Socmnd
Diachi
Sodienthoai

Kiểu dữ liệu
Nvarchar
Nvarchar
Nvarchar
Nvarchar
Nvarchar


Độ lớn
10
30
10
30
11

Ràng buộc dữ liệu
Khóa chính

• DICHVU(madichvu, tendichvu, donvitinh, dongia, ghichu)
Tên trường
Madichvu
Tendichvu
Donvitinh
Dongia
Ghichu

Kiểu dữ liệu
Nvarchar
Nvarchar
Nvarchar
Numeric
Nvarchar

Độ lớn
10
20
10


Ràng buộc dữ liệu
Khóa chính

30

• LOAIPHONG(maloaiphong, tenloaiphong, giathuengay, giathuetuan)
Tên trường
Maloaiphong
Tenloaiphong
Giathuengay
Giathuetuan

Kiểu dữ liệu
Nvarchar
Nvarchar
Numeric
Numeric

Độ lớn
10
20

Ràng buộc dữ liệu
Khóa chính

Độ lớn
5
10


Ràng buộc dữ liệu
Khóa chính
Khóa ngoại

• PHONG(sophong, maloaiphong)
Tên trường
Sophong
Maloaiphong

Kiểu dữ liệu
Nvarchar
Nvarchar

Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương

Trang: 6


ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER

QUẢN LÝ KHÁCH SẠN

• DANGKY(sodk, makhach, sophong, ngaydk)
Tên trường
Sodk
Makhach
Sophong
Ngaydk

Kiểu dữ liệu

Nvarchar
Nvarchar
Nvarchar
Datetime

Độ lớn
5
10
5

Ràng buộc dữ liệu
Khóa chính
Khóa ngoại
Khóa ngoại

• PHIEUTHANHTOAN(maphieu, sophong, makhach, ngaynhanphong,
ngaytraphong, tongtienphong, tongtiendichvu)
Tên trường
Maphieu
Sophong
Makhach
Ngaynhanphong
Ngaytraphong
Tongtienphong
Tongtiendichvu

Kiểu dữ liệu
Nvarchar
Nvarchar
Nvarchar

Datetime
datetime
Numeric
Numeriic

Độ lớn
10
5
10

Ràng buộc dữ liệu
Khóa chính

• CHITIETDICHVU(machitiet, maphieu, madichvu, soluong )
Tên trường
Machitiet
Maphieu
Madichvu
Soluong

Kiểu dữ liệu
Nvarchar
Nvarchar
Nvarchar
Numeric

Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương

Độ lớn
10

10
10

Ràng buộc dữ liệu
Khóa chính

Trang: 7


ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER

QUẢN LÝ KHÁCH SẠN

2. Dữ liệu bảng
• Dữ liệu bảng KHACH
insert into KHACH values('001', 'Nguyen Van Anh', '142385550', 'Binh Duong',
'01672435612')
insert into KHACH values('002', 'Nguyen Thi Be', '142385560', 'Binh Phuoc',
'01673676121')
insert into KHACH values('003', 'Le Van Loc', '142385561', 'Thai Binh', '01672432301')
insert into KHACH values('004', 'Tran Thuy Nga', '142385572', 'TP.HCM',
'01612345612')
insert into KHACH values('005', 'Pham Ba Hoang', '142385562', 'Binh Duong',
'01672436789')
insert into KHACH values('006', 'Le Quang Vang', '142385552', 'Binh Dinh',
'01672435623')
insert into KHACH values('007', 'Tran Quoc Y', '142385557', 'Gia Lai', '01672435456')
insert into KHACH values('008', 'Lam Thi Hong Diem', '142385567', 'Dak Lak',
'01672467890')
insert into KHACH values('009', 'Dang Thi Dieu', '142385577', 'Binh Dinh',

'01672565612')
insert into KHACH values('010', 'Pham Chi Binh', '142385580', 'Dong Nai',
'01672423232')
• Dữ liệu bảng DICHVU
insert into DICHVU values('DV01', 'To Chuc Tiec Cuoi', 'ngay', 6000000, NULL)
insert into DICHVU values('DV02', 'An Uong', 'Phan', 200000, 'Bao gom thuc an va thuc
uong')
insert into DICHVU values('DV03', 'Giai Tri', 'Gio', 100000, NULL)
insert into DICHVU values('DV04', 'Spar', 'Gio', 300000, NULL)
insert into DICHVU values('DV05', 'Thue Xe Oto', 'Gio', 200000, NULL)
insert into DICHVU values('DV06', 'Xong Hoi', 'Gio', 50000, NULL)
insert into DICHVU values('DV07', 'Du Lich', 'Ngay', 700000, NULL)
• Dữ liệu bảng LOAIPHONG
insert into LOAIPHONG values('LP01', 'VIP', 400000, 2500000)
insert into LOAIPHONG values('LP02', 'DOI', 300000, 2300000)
insert into LOAIPHONG values('LP03', 'DON', 200000, 2000000)

Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương

Trang: 8


ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER

QUẢN LÝ KHÁCH SẠN

• Dữ liệu bảng PHONG
insert into PHONG values('101', 'LP01')
insert into PHONG values('102', 'LP02')
insert into PHONG values('103', 'LP02')

insert into PHONG values('104', 'LP03')
insert into PHONG values('105', 'LP03')
insert into PHONG values('201', 'LP01')
insert into PHONG values('202', 'LP02')
insert into PHONG values('203', 'LP02')
insert into PHONG values('204', 'LP03')
insert into PHONG values('205', 'LP03')
insert into PHONG values('301', 'LP01')
insert into PHONG values('302', 'LP02')
insert into PHONG values('303', 'LP02')
insert into PHONG values('304', 'LP03')
insert into PHONG values('305', 'LP03')
• Dữ liệu bảng DANGKY
insert into DANGKY values('DK01','001','101',convert(datetime,'09/08/2011',103))
insert into DANGKY values('DK02','002','103',convert(datetime,'18/08/2011',103))
insert into DANGKY values('DK03','003','102',convert(datetime,'15/09/2011',103))
insert into DANGKY values('DK04','003','203',convert(datetime,'14/10/2011',103))
insert into DANGKY values('DK05','003','201',convert(datetime,'29/10/2011',103))
insert into DANGKY values('DK06','004','303',convert(datetime,'22/08/2011',103))
insert into DANGKY values('DK07','005','202',convert(datetime,'01/08/2011',103))
insert into DANGKY values('DK08','006','302',convert(datetime,'10/08/2011',103))
insert into DANGKY values('DK09','006','201',convert(datetime,'27/09/2011',103))
insert into DANGKY values('DK10','007','203',convert(datetime,'28/09/2011',103))
insert into DANGKY values('DK11','008','301',convert(datetime,'15/09/2011',103))
insert into DANGKY values('DK12','009','101',convert(datetime,'02/08/2011',103))
insert into DANGKY values('DK13','010','302',convert(datetime,'09/07/2011',103))
• Dữ liệu bảng PHIEUTHANHTOAN
insert into PHIEUTHANHTOAN values('P01', '101',
'001',convert(datetime,'10/08/2011',103),convert(datetime,'17/08/2011',103),
2500000,2000000)

insert into PHIEUTHANHTOAN values('P02', '103',
'002',convert(datetime,'20/08/2011',103),convert(datetime,'21/08/2011',103),
400000,250000)
insert into PHIEUTHANHTOAN values('P03', '102',
'003',convert(datetime,'15/09/2011',103),convert(datetime,'20/09/2011',103),
1500000,2700000)
insert into PHIEUTHANHTOAN values('P04', '201',
'006',convert(datetime,'01/10/2011',103),convert(datetime,'22/10/2011',103),
7500000,5450000)

Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương

Trang: 9


ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER

QUẢN LÝ KHÁCH SẠN

insert into PHIEUTHANHTOAN values('P05', '203',
'007',convert(datetime,'01/10/2011',103),convert(datetime,'02/10/2011',103),
200000,550000)
insert into PHIEUTHANHTOAN values('P06', '303',
'004',convert(datetime,'23/08/2011',103),convert(datetime,'26/08/2011',103),
600000,1350000)
insert into PHIEUTHANHTOAN values('P07', '203',
'003',convert(datetime,'15/10/2011',103),convert(datetime,'17/10/2011',103),
400000,400000)
insert into PHIEUTHANHTOAN values('P08', '101',
'003',convert(datetime,'01/11/2011',103),convert(datetime,'02/11/2011',103),

400000,6200000)
insert into PHIEUTHANHTOAN values('P09', '302',
'006',convert(datetime,'10/08/2011',103),convert(datetime,'20/08/2011',103),
3000000,2900000)
• Dữ liệu bảng CHITIETDICHVU
insert into CHITIETDICHVU values('CT01', 'P01', 'DV02',7)
insert into CHITIETDICHVU values('CT02', 'P01', 'DV04',2)
insert into CHITIETDICHVU values('CT03', 'P02', 'DV02',1)
insert into CHITIETDICHVU values('CT04', 'P02', 'DV06',1)
insert into CHITIETDICHVU values('CT05', 'P03', 'DV02',5)
insert into CHITIETDICHVU values('CT06', 'P03', 'DV07',1)
insert into CHITIETDICHVU values('CT07', 'P04', 'DV02',21)
insert into CHITIETDICHVU values('CT08', 'P04', 'DV05',3)
insert into CHITIETDICHVU values('CT09', 'P04', 'DV06',1)
insert into CHITIETDICHVU values('CT10', 'P04', 'DV04',2)
insert into CHITIETDICHVU values('CT11', 'P05', 'DV02',1)
insert into CHITIETDICHVU values('CT12', 'P05', 'DV06',1)
insert into CHITIETDICHVU values('CT13', 'P05', 'DV04',1)
insert into CHITIETDICHVU values('CT14', 'P06', 'DV02',3)
insert into CHITIETDICHVU values('CT15', 'P06', 'DV07',1)
insert into CHITIETDICHVU values('CT16', 'P06', 'DV06',1)
insert into CHITIETDICHVU values('CT17', 'P07', 'DV02',2)
insert into CHITIETDICHVU values('CT18', 'P08', 'DV02',1)
insert into CHITIETDICHVU values('CT19', 'P08', 'DV01',1)
insert into CHITIETDICHVU values('CT20', 'P09', 'DV02',10)
insert into CHITIETDICHVU values('CT21', 'P09', 'DV03',3)
insert into CHITIETDICHVU values('CT22', 'P09', 'DV05',3)

Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương


Trang: 10


ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER

QUẢN LÝ KHÁCH SẠN

3. Khung nhìn - view
Khung nhìn view là một bảng tạm thời có cấu trúc như một bảng, khung nhìn không
lưu chữ dữ liệu mà nó dược tạo ra khi sử dụng , khung nhìn là đối tượng thuộc CSDL:
• cho biết mã khách, tên khách, tổng tiền của khách thuê, sắp xếp tăng dần theo tông
tiền.
create view cau1
as
select KHACH.MAKHACH, TENKHACH,
sum(TONGTIENPHONG+TONGTIENDICHVU) AS TONGTIEN
from KHACH, PHIEUTHANHTOAN PTT
where KHACH.MAKHACH=PTT.MAKHACH
group by KHACH.MAKHACH,TENKHACH
order by TONGTIEN asc
select *from cau1
Kết quả

• Cho biết mã loại phòn, tên loại phòng, số phòng được đặt từ ngày 01/08/2011 đến
ngày26/08/2011
create view cau2
as
select LP.MALOAIPHONG, TENLOAIPHONG, DK.SOPHONG
from LOAIPHONG LP, PHONG, DANGKY DK
where LP.MALOAIPHONG = PHONG.MALOAIPHONG AND

PHONG.SOPHONG = DK.SOPHONG AND
NGAYDK between convert(datetime,'01/08/2011',103) and
convert(datetime,'30/08/2011',103)
select *from cau2
Kết quả

Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương

Trang: 11


ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER

QUẢN LÝ KHÁCH SẠN

• cho biết tổng số lượng dịch vụ được sử dụng trong tháng 8
create view cau3
as
select PTT.MAPHIEU, count(CTDV.MADICHVU) as TONGSLDV
from PHIEUTHANHTOAN PTT, CHITIETDICHVU AS CTDV
Where PTT.MAPHIEU = CTDV.MAPHIEU AND
month(NGAYNHANPHONG) = 8 AND month(NGAYTRAPHONG) = 8
group by PTT.MAPHIEU
select * from cau3
Kết quả

• Lấy ra số phòng được dặt nhiều nhất trong tháng 8
create view cau4
as
select PHONG.SOPHONG, count(DK.SOPHONG) as TONGSP

from DANGKY DK, PHONG
where PHONG.SOPHONG = DK.SOPHONG AND month(NGAYDK) = 8
group by PHONG.SOPHONG
having count(DK.SOPHONG) >=all(select count(DK.SOPHONG)
from DANGKY DK, PHONG
where PHONG.SOPHONG = DK.SOPHONG
group by PHONG.SOPHONG)
select *from cau4
Kết quả
• Cho biết thông tin KHACH đăng kí nhưng không nhận phòng
create view cau5
as
select MAKHACH
from DANGKY DK
where MAKHACH not in(select MAKHACH from PHIEUTHANHTOAN PTT)
select *from cau5
Kết quả

Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương

Trang: 12


ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER

QUẢN LÝ KHÁCH SẠN

• Cho biết thông tin những phòng chua được đăng kí
create view cau6
as

select SOPHONG
from PHONG
where SOPHONG not in(select SOPHONG from PHIEUTHANHTOAN PTT)
select *from cau6
Kết quả

4. Thủ tục lưu trữ(stored procedure)
Thủ tục là một đối tựơng trong CSDL bao gồm nhiều câu lệnh T-SQL được tập hợp
lại với nhau thành một nhóm, và tất cả các lệnh này sẽ được thực thi khi thủ tục lưu chữ
được thực thi:
• Lấy ra những khách thuê phòng trong tháng với tháng là tham số truyền vào
create procedure spcau1
@thang datetime
as
select K.MAKHACH, TENKHACH
from KHACH K, DANGKY DK
where K.MAKHACH = DK.MAKHACH and month(NGAYDK) = @thang
exec spcau1 8
Kết quả

Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương

Trang: 13


ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER

QUẢN LÝ KHÁCH SẠN

• Tính giá trị cho cột giảm giá như sau: Nếu số lượng dịch vụ >=10 giảm 10%, 3<=

số lượng dịch vụ <10 giảm 5%.
create procedure spcau2
as
select DV.MADICHVU,SOLUONG,DONGIA,
GIAMGIA = (case when SOLUONG >= 10
then(SOLUONG*DONGIA)*0.2
when SOLUONG >= 3 and SOLUONG < 10
then (SOLUONG*DONGIA)*0.05
else SOLUONG*DONGIA end)
from CHITIETDICHVU CTDV, DICHVU DV
where CTDV.MADICHVU = DV.MADICHVU
drop procedure spcau2
exec spcau2
Kết quả

• lấy ra ds 5 khách hàng có tổng trị giá phiếu thanh toán cao nhất:
create procedure spcau3
as
select top 5 k.makhach,maphieu, tenkhach,
sum(tongtienphong+tongtiendichvu) as ttg
from khach as k, phieuthanhtoan as ptt
where k.makhach=ptt.makhach
group by k.makhach,maphieu, tenkhach
order by ttg desc
exec spcau3
Kết quả

Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương

Trang: 14



ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER

QUẢN LÝ KHÁCH SẠN

• đếm số phiếu
create procedure spcau4
as
select top 10 dv.madichvu,tendichvu,sum(soluong) as tongsl
from dichvu dv, chitietdichvu as ctdv
where dv.madichvu=ctdv.madichvu
group by dv.madichvu,tendichvu
order by tongsl desc
exec spcau4
Kết quả

• lấy ra danh sách của khách hàng có số lượng phiếu thanh toán nhiều nhất
create procedure spcau5
as
select kh.makhach, tenkhach, count(maphieu) as slp
from khach as kh, phieuthanhtoan as ptt
where kh.makhach=ptt.makhach
group by kh.makhach, tenkhach
having count(maphieu)>=all (select count(maphieu)
from khach kh, phieuthanhtoan as ptt
where kh.makhach=ptt.makhach
group by ptt.makhach)
exec spcau5
Kết quả

5. Trigger
Trigger là một dạng đặc biệt của thủ tục lưu chữ, được thực thi một cách tự động khi
có sự thay đổi dữ liệu(do tác động của câu lệnh INSERT, UPDATE, DELETE)
• Tạo trigger không cho phép 2 dịch vụ cùng tên
create trigger tgcau1
on DICHVU
for insert
as
declare @tendichvu varchar(10)
select @tendichvu = tendichvu
from inserted
if(select count(*) from dichvu where tendichvu = @tendichvu)>1
begin
Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương

Trang: 15


ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER

QUẢN LÝ KHÁCH SẠN

print 'trùng tên dịch vụ'
rollback
end
insert into dichvu values('DV09', 'Spar', 'Gio', 300000, NULL)
Kết quả

• Tạo trigger chỉ cho phép 1 dịch vụ có tối da là 4 chitietdichvu
create trigger tgcau2

on CHITIETDICHVU
for insert
as
declare @sldv int, @madichvu nvarchar(10)
select @madichvu = madichvu
from inserted
select @sldv = count(*) from chitietdichvu ctdv
where ctdv.madichvu = @madichvu
if @sldv > 4
begin
print 'so luong chi tiet dich vu' + @madichvu +'da vuot qua 4 ,khong
them
duoc nua'
rollback
end
insert into chitietdichvu values('CT28', 'P01', 'DV02',2)
select * from chitietdichvu
Kết quả

• Không cho phép xóa 1 lúc nhiều hơn 1 khách hàng
create trigger tgcau3
on khach
for delete
as
if(select count(*) from deleted)>1
begin
raiserror ('ban khong the xoa mot luc nhieu hon 1 khach hang',16,1)
rollback transaction
end
delete from khach where makhach like '002' and makhach like '001'

select * from khach
Kết quả

Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương

Trang: 16


ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER

QUẢN LÝ KHÁCH SẠN

• Tạo trigger không cho phép xóa 1 dịch vụ mà đã có ít nhất 1 chi tiết dịch vụ
create trigger tgcau4
on dichvu
for delete
as
declare @madichvu varchar(10),@sl int
select @madichvu = madichvu
from deleted
select @sl=count(madichvu) from chitietdichvu ctdv
where ctdv.madichvu = @madichvu
if(@sl >= 1)
begin
print 'ban bi loi'
rollback
end
delete from dichvu where madichvu like 'DV01'
select * from dichvu
Kết quả

• Không cho phép đăng kí số phòng vượt quá 2 lần
create trigger tgcau5
on DANGKY
for insert
as
declare @sophong nvarchar(5)
select @sophong = sophong from inserted
select @sophong = count(*) from DANGKY where sophong = @sophong
if @sophong>2
begin
print
'so luong la 2, ban khong duoc dang ky so phong qua 2 lan'
rollback
end
insert into DANGKY values('DK15','005','301',convert(datetime,'10/08/2009',103))
insert into DANGKY values('DK16','005','301',convert(datetime,'10/08/2009',103))
select*from dangky
Kết quả

Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương

Trang: 17


ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER

QUẢN LÝ KHÁCH SẠN

• Kiểm tra số phòng có trong bảng đăng ký không?
create trigger tgcau6

on dangky
for insert
as
declare @sophong nvarchar(5)
if exists(select * from inserted i, dangky t
where i.sophong=t.sophong)
begin
print 'so phong khong ton tai'
rollback
end
insert into dangky values('DK16','005','304',convert(datetime,'20/08/2009',103))
select * from dangky
Kết quả

• Không cho phép khách hàng đăng ký cùng ngày cùng một phòng.
create trigger tgcau7
on dangky
for insert, update
as
if exists(select 1 from dangky a, inserted b
where a.makhach=b.makhach and a.ngaydk=b.ngaydk
and a.sophong= b.sophong)
begin
print 'phong da co khach quy khach vui long dang ky phong khac '
rollback
end
drop trigger tgcau7
update dangky set ngaydk='09/08/2011',sophong='101' where makhach='001'
Kết quả


• Không cho phép xóa phòng mà đã được đăng ký vào tháng 8
create trigger tgcau8
on dangky
for delete
as
declare @sophong nvarchar(5)
select @sophong = sophong from deleted
select @sophong = count(*) from dangky where sophong = @sophong
if @sophong>=1
Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương

Trang: 18


ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER

QUẢN LÝ KHÁCH SẠN

begin
print 'phong da duoc dang ky khong duoc xoa'
rollback
end
delete from phong where sophong like '302' and month(ngaydk)
select * from phong
Kết quả

• Không cho phép xóa những khách hàng đã ở ít nhất 1 lần
create trigger tgcau9
on phieuthanhtoan
for delete

as
declare @makhach nvarchar(10)
select @makhach = makhach from deleted
select @makhach = count(*) from phieuthanhtoan where makhach = @makhach
if @makhach >1
begin
raiserror ('ban ko the xoa',16,1)
rollback transaction
end
drop trigger tgcau9
delete from khach where makhach like '001'
select *from khach
Kết quả

• Không cho phép sua mã khách hàng
create trigger tgcau4
on khach
for update
as
if update(makhach)
begin
print 'khong the thay doi gia tri cua ma khach'
rollback transaction
end
update khach set makhach = '001 'where makhach = '03k'
Kết quả

Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương

Trang: 19



ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER

QUẢN LÝ KHÁCH SẠN

PHẦN IV: KẾT NỐI CSDL VỚI NGÔN NGỮ LẬP TRÌNH
I. Công cụ phát triển
1. Lựa chọn công cụ
Do tính chất của cơ sở dữ liệu của bài toán chương trình này sử dụng ngôn ngữ lập
trình Java trong việc tạo giao diện và chương trình chính, kết hợp với Microsoft SQL
server 2005 tạo cơ sở dữ liệu.
Java là ngôn ngữ lập trình thông dụng trên Windows. Java hỗ trợ quản lý Cơ sở dữ
liệu và Internet, đặc biệt là quản lý cơ sở dữ liệu.
So với các ngôn ngữ khác java không có hiệu quả hơn nhưng tính năng đồ họa , sự
đơn giản, nhỏ gọn, tính khả chuyển khiến Java có hiệu quả chung là đáng khích lệ so với
tính phức tạp của các ngôn ngữ khác.
Chương trình "Quản lý khách sạn" là chương trình quản lý cơ sở dữ liệu (lưu trữ,
tra cứu...) tại khách sạn. Do đó việc dùng ngôn ngữ Java là thích hợp.
2. Môi trường làm việc
- Hệ thống máy tính chủ yếu được sử dụng hiện nay tại các khách sạn là máy PC.
- Đa số người sử dụng trên thực tế đã làm quen với tin học với hệ điều hành
Windows.
- Hệ thống chương trình quản lý khách sạn sẽ rất tiện dụng khi chạy trên môi
trường mạng. Tuy nhiên nó vẫn có thể cài trên máy lẻ, áp dụng với những cơ sở chưa ứng
dụng mạng máy tính trong quản lý.
3. Lệnh kết nối với ngôn ngữ lập trình
a. Class(SQLconnect)
package jdbc;
import com.microsoft.sqlserver.jdbc.SQLServerDataSource;

import java.sql.*;
public class SQLConnect {
String Host = "";
String UserName = "";
String Password = "";
Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương

Trang: 20


ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER

QUẢN LÝ KHÁCH SẠN

String Database = "";
int Port=0;
Connection connect = null;
Statement statement =null;
ResultSet result=null;
public SQLConnect(String Host, int Port,String UserName,String Password,String
Database){
this.Database=Database;
this.Host=Host;
this.Port=Port;
this.Password=Password;
this.UserName=UserName;
}
protected void driverTesr()throws Exception{
try
{

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

}
catch (java.lang.ClassCastException e)
{
throw new Exception("SQL JDBC Driver not found");
}
}
protected Connection getConcect()throws Exception{
if(this.connect==null)
Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương

Trang: 21


ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER

QUẢN LÝ KHÁCH SẠN

{
driverTesr();
try
{
SQLServerDataSource ds=new SQLServerDataSource();
ds.setUser(this.UserName);
ds.setPassword(this.Password);
ds.setServerName(this.Host);
ds.setDatabaseName(this.Database);
this.connect=ds.getConnection();
}

catch(java.sql.SQLException e)
{
throw new Exception("Khong the ket noi den Database
Server"+e.getMessage());
}
}
return this.connect;
}
protected Statement getStatement()throws Exception
{
if(this.statement==null? true :this.statement.isClosed())
{
this.statement=this.getConcect().createStatement();
}
return this.statement;
Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương

Trang: 22


ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER

QUẢN LÝ KHÁCH SẠN

}
public ResultSet excuteQuery(String Query)throws Exception
{
try
{
this.result=getStatement().executeQuery(Query);

}
catch (Exception e)
{
throw new Exception("Erro:"+e.getMessage()+"-"+Query);
}
return this.result;
}
public int excutuUpdate(String Query)throws Exception
{
int res=Integer.MIN_VALUE;
try
{
res=getStatement().executeUpdate(Query);
}
catch(Exception e)
{
throw new Exception("Erro : "+e.getMessage()+" - " +Query);
}
finally
{
Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương

Trang: 23


ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER

QUẢN LÝ KHÁCH SẠN

this.Close();

}
return res;
}
public void Close()throws SQLException
{
if(this.result!=null && !this.result.isClosed())
{
this.result.close();
this.result=null;
}
if(this.statement!=null && !this.statement.isClosed())
{
this.statement.close();
this.statement=null;
}
if(this.connect!=null && !this.connect.isClosed())
{
this.connect.close();
this.connect=null;
}
}
}

Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương

Trang: 24


ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER


QUẢN LÝ KHÁCH SẠN

b. Kết nối đến các bảng trong SQL(file JDBC)
package jdbc;
import java.sql.ResultSet;
import java.sql.SQLException.*;
public class JDBC {
public static void main(String[] args) throws Exception{
SQLConnect connect=new SQLConnect("localhost",1433,"sa","123","QLKS");
ResultSet result = connect.excuteQuery("Select * from KHACH");
while(result.next()){
String m=result.getString("MAKHACH");
String t=result.getString("TENKHACH");
String h=result.getString("SOCMND");
String d=result.getString("DIACHI");
String g=result.getString("SODIENTHOAI");
System.out.println(m+" "+t+" "+h+" "+d+" "+g);
}
System.out.println("----------------------");
ResultSet result1 = connect.excuteQuery("Select * from DICHVU");
while(result1.next()){
String a=result1.getString("MADICHVU");
String b=result1.getString("TENDICHVU");
String c=result1.getString("DONVITINH");
int f=result1.getInt("DONGIA");
String i=result1.getString("GHICHU");
System.out.println(a+" "+b+" "+c+" "+f+" "+i);
}
Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương


Trang: 25


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×