Đồ án Quản lý khách sạn

doc 32 trang phuongnguyen 8020
Bạn đang xem 20 trang mẫu của tài liệu "Đồ án Quản lý khách sạn", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • docdo_an_quan_ly_khach_san.doc

Nội dung text: Đồ án Quản lý khách sạn

  1. ĐỒ Á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
  2. ĐỒ Á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 Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương Trang: 2
  3. ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER QUẢN LÝ KHÁCH SẠ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. 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
  4. ĐỒ Á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
  5. ĐỒ Á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
  6. ĐỒ Á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 Kiểu dữ liệu Độ lớn Ràng buộc dữ liệu Makhach Nvarchar 10 Khóa chính Tenkhach Nvarchar 30 Socmnd Nvarchar 10 Diachi Nvarchar 30 Sodienthoai Nvarchar 11 DICHVU(madichvu, tendichvu, donvitinh, dongia, ghichu) Tên trường Kiểu dữ liệu Độ lớn Ràng buộc dữ liệu Madichvu Nvarchar 10 Khóa chính Tendichvu Nvarchar 20 Donvitinh Nvarchar 10 Dongia Numeric Ghichu Nvarchar 30 LOAIPHONG(maloaiphong, tenloaiphong, giathuengay, giathuetuan) Tên trường Kiểu dữ liệu Độ lớn Ràng buộc dữ liệu Maloaiphong Nvarchar 10 Khóa chính Tenloaiphong Nvarchar 20 Giathuengay Numeric Giathuetuan Numeric PHONG(sophong, maloaiphong) Tên trường Kiểu dữ liệu Độ lớn Ràng buộc dữ liệu Sophong Nvarchar 5 Khóa chính Maloaiphong Nvarchar 10 Khóa ngoại Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương Trang: 6
  7. ĐỒ Á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 Kiểu dữ liệu Độ lớn Ràng buộc dữ liệu Sodk Nvarchar 5 Khóa chính Makhach Nvarchar 10 Khóa ngoại Sophong Nvarchar 5 Khóa ngoại Ngaydk Datetime PHIEUTHANHTOAN(maphieu, sophong, makhach, ngaynhanphong, ngaytraphong, tongtienphong, tongtiendichvu) Tên trường Kiểu dữ liệu Độ lớn Ràng buộc dữ liệu Maphieu Nvarchar 10 Khóa chính Sophong Nvarchar 5 Makhach Nvarchar 10 Ngaynhanphong Datetime Ngaytraphong datetime Tongtienphong Numeric Tongtiendichvu Numeriic CHITIETDICHVU(machitiet, maphieu, madichvu, soluong ) Tên trường Kiểu dữ liệu Độ lớn Ràng buộc dữ liệu Machitiet Nvarchar 10 Khóa chính Maphieu Nvarchar 10 Madichvu Nvarchar 10 Soluong Numeric Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương Trang: 7
  8. ĐỒ Á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
  9. ĐỒ Á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
  10. ĐỒ Á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
  11. ĐỒ Á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
  12. ĐỒ Á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
  13. ĐỒ Á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
  14. ĐỒ Á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 = 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
  15. ĐỒ Á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
  16. ĐỒ Á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
  17. ĐỒ Á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
  18. ĐỒ Á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
  19. ĐỒ Á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
  20. ĐỒ Á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
  21. ĐỒ Á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
  22. ĐỒ Á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
  23. ĐỒ Á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
  24. ĐỒ Á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
  25. ĐỒ Á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
  26. ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER QUẢN LÝ KHÁCH SẠN System.out.println(" "); ResultSet result2 = connect.excuteQuery("Select * from LOAIPHONG"); while(result2.next()){ String ab=result2.getString("MALOAIPHONG"); String bc=result2.getString("TENLOAIPHONG"); int cs=result2.getInt("GIATHUENGAY"); int fa=result2.getInt("GIATHUENTUAN"); System.out.println(ab+" "+bc+" "+cs+" "+fa); } System.out.println(" "); ResultSet result3 = connect.excuteQuery("Select * from PHONG"); while(result3.next()){ String ax=result3.getString("SOPHONG"); String bg=result3.getString("MALOAIPHONG"); System.out.println(ax+" "+bg); } System.out.println(" "); ResultSet result4 = connect.excuteQuery("Select * from DANGKY"); while(result4.next()){ String bc=result4.getString("SODK"); String ba=result4.getString("MAKHACH"); String bd=result4.getString("SOPHONG"); String bf=result4.getString("NGAYDK"); System.out.println(bc+" "+ba+" "+bd+" "+bf); } System.out.println(" "); Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương Trang: 26
  27. ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER QUẢN LÝ KHÁCH SẠN ResultSet result5 = connect.excuteQuery("Select * from PHIEUTHANHTOAN"); while(result5.next()){ String ca=result5.getString("MAPHIEU"); String cb=result5.getString("SOPHONG"); String cc=result5.getString("MAKHACH"); String cd=result5.getString("NGAYNHANPHONG"); String cf=result5.getString("NGAYTRAPHONG"); int cg=result5.getInt("TONGTIENPHONG"); int ch=result5.getInt("TONGTIENDICHVU"); System.out.println(ca+" "+cb+" "+cc+" "+cd+" "+cf+" "+cg+" "+ch); } System.out.println(" "); ResultSet result6 = connect.excuteQuery("Select * from CHITIETDICHVU"); while(result6.next()){ String da=result6.getString("MACHITIET"); String db=result6.getString("MAPHIEU"); String dc=result6.getString("MADICHVU"); int dd=result6.getInt("SOLUONG"); System.out.println(da+" "+db+" "+dc+" "+dd); } connect.Close(); } } Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương Trang: 27
  28. ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER QUẢN LÝ KHÁCH SẠN II. Thiết kế giao diện Có lẽ khâu quan trọng nhất trong lập trình là thiết kế. Sau khi thiết kế giao diện, chúng ta cần thiết kế cấu trúc chương trình. Cách thiết kế khác nhau sẽ dẫn đến các hoạt động khác nhau và bảo trì theo đó cũng khác nhau.  Dưới đây là một số Form của chương trình Form_Khach Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương Trang: 28
  29. ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER QUẢN LÝ KHÁCH SẠN Form_Phòng Form_Chitietdichvu Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương Trang: 29
  30. ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER QUẢN LÝ KHÁCH SẠN Form_Dangky Form_Dichvu Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương Trang: 30
  31. ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER QUẢN LÝ KHÁCH SẠN Form_Loaiphong Form_phieuthanhtoan Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương Trang: 31
  32. ĐỒ ÁN MÔN HỌC: CƠ SỞ DỮ LIỆU SQL SERVER QUẢN LÝ KHÁCH SẠN Kết luận Mặc dù đã rất cố gắng tìm hiểu công việc " Quản lý khách sạn " nhưng không sao tránh khỏi những thiếu sót. Mong quý Thầy , Cô và các bạn đóng góp ý kiến để em rút ra được nhiều kinh nghiệm quý báu khi bước vào cuộc sống mới. Bài toán được thiết kế và cài đặt bằng ngôn ngữ Java cho phép chạy trên môi trường Windows do đó kế thừa được những tính năng mạnh của Windows như: - Cho một giao diện thân thiện với người sử dụng - Chạy theo chế độ đa nhiệm - In ấn nhanh chóng và thuận lợi Bài toán quản lý khách sạn này chủ yếu là áp dụng với khách sạn có quy mô tương đối nhỏ, do đặc thù của mỗi khách sạn nên công tác quản lý với mỗi khách sạn là khác nhau. Ở đây em chỉ tìm hiểu về công tác quản lý của một khách sạn chúng nên chương trình này chủ yếu áp dụng cho công tác quản lý của khách sạn mà thôi. Do thời gian hạn chế và trình độ hiểu biết của bản thân chưa nhiều nên việc phân tích thiết kế và cài đặt bài toán quản lý khách sạn chưa hoàn thiện như một phần mềm quản lý. Nó mang tính chất học hỏi, trao đổi và bắt đầu làm quen với thực tế. Nhưng qua đợt thực tập này, chúng em đã học hỏi được nhiều kinh nghiệm trong quá trình cài đặt một chương trình quản lý, đồng thời cũng bổ sung kiến thức cho bản thân. Em xin chân thành cảm ơn Trịnh Công Nhựt đã tận tình giúp đỡ để chúng em hoàn thành đồ án của mình. Chúng em cũng bày tỏ lòng biết ơn sâu sắc tới quý Thầy Cô khoa Công nghệ thông tin trường Cao đẳng Kinh Tế Kỹ Thuật Vinatex TP.MCM, đã chỉ dạy trong suốt khoá học. Tôi cảm ơn các bạn đã đóng góp ý kiến và động viên để tôi hoàn thành đồ án này. Sinh viên: Nguyễn Thị Len & Bùi Thị Thúy Hương Trang: 32