1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo bài tập lớn môn hệ quản trị csdl Đề tài quản lý khách sạn

77 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Quản Lý Khách Sạn
Tác giả Lâm Thị Hạnh - 2010A04, Đặng Thành Công - 2010A05
Người hướng dẫn Th.S Nguyễn Thị Tâm
Trường học Trường Đại Học Mở Hà Nội
Chuyên ngành Công Nghệ Thông Tin
Thể loại Báo cáo
Năm xuất bản 2021
Thành phố Hà Nội
Định dạng
Số trang 77
Dung lượng 5,93 MB

Cấu trúc

  • 1. I. PHÁT BIỂU BÀI TOÁN (4)
  • 1. Xây dựng mô hình thực thể liên kết (5)
  • 2. Xác định các thuộc tính và phân loại thuộc tính (6)
  • 3. Vẽ mô hình ER (11)
  • 4. Xây dựng mô hình cơ sở dữ liệu quan hệ (12)
  • 5. Chuẩn hóa cơ sở dữ liệu của bài toán (12)
  • 2. II. TẠO BẢNG CƠ SỞ DỮ LIỆU (16)
  • 2. Diagram_quan_ly_KS (18)
  • 3. Nhập dữ liệu (19)
  • 3. III. THỰC HIỆN CÁC YÊU CẦU (27)
  • 1. Truy vấn dữ liệu (27)
  • 2. Tạo view hiện dữ liệu (30)
  • 3. Tạo các STORED PROCEDURE (35)
  • 4. Tạo Trigger kiểm soát ràng buộc dữ liệu (53)
  • 5. Phân quyền cho các thành viên (68)
  • 6. Thực hiện phân tán ngang bảng Nhân viên (70)

Nội dung

 Trong mỗi khách sạn có nhiều DỊCH VỤ theo nhu cầu của từng khách hàng và từng dịch vụ có đơn giá khác nhau.. Mỗi NHÂN VIÊN bao gồm các thông tin như: Mã nhân viên, họ tên, ngày sinh, g

I PHÁT BIỂU BÀI TOÁN

 Quản lý khách sạn gồm các thông tin sau:

Mỗi khách sạn thường có nhiều phòng với số hiệu khác nhau, được phân loại thành các hạng phòng như hạng A (Cao cấp), hạng B (Trung bình) và hạng C (Giá rẻ) Sự đa dạng này không chỉ tạo ra nhiều lựa chọn cho khách hàng mà còn ảnh hưởng đến giá cả của từng loại phòng.

Mỗi khách sạn cung cấp nhiều dịch vụ đa dạng nhằm đáp ứng nhu cầu của từng khách hàng, với mức giá khác nhau cho từng dịch vụ Mỗi dịch vụ được xác định bằng mã dịch vụ, tên dịch vụ và giá cả, tùy thuộc vào loại dịch vụ cụ thể.

Trong khách sạn, BỘ PHẬN QUẢN LÝ có trách nhiệm giám sát và điều hành các nhân viên thuộc từng bộ phận, bao gồm mã bộ phận, tên bộ phận và mã nhân viên quản lý Mỗi phòng ban sẽ quản lý nhiều nhân viên để đảm bảo hoạt động hiệu quả và đồng bộ trong toàn khách sạn.

Một khách sạn có đội ngũ nhân viên đa dạng, mỗi nhân viên được ghi nhận với các thông tin quan trọng như mã nhân viên, họ tên, ngày sinh, giới tính, địa chỉ, số điện thoại, chức vụ, lương cơ bản và phụ cấp tương đương, cùng ngày vào làm Mức lương của từng nhân viên được xác định dựa trên tổng hệ số lương và các phụ cấp liên quan.

Mã nhân viên để phân biệt các nhân viên với nhau.

Khi khách hàng đến thuê khách sạn, thông tin cá nhân sẽ được lưu trữ bao gồm mã khách hàng duy nhất, tên, giới tính, số CCCD hoặc giấy tờ tương đương, và số điện thoại.

Mỗi khách hàng có thể nhận nhiều hóa đơn, trong đó bao gồm các thông tin quan trọng như mã hóa đơn, tên dịch vụ, tên khách hàng, mã phòng (số phòng) mà khách hàng đã thuê, thông tin thuê phòng (ngày đặt phòng, thời gian thuê, ngày đi), ngày lập hóa đơn và tổng số tiền.

Xây dựng mô hình thực thể liên kết

+ Một nhân viên chỉ làm việc cho một loại phòng ban

+ Có ít nhất một nhân viên làm việc tại phòng ban

+ Một nhân viên có thể lập nhiều hóa đơn

+ Mỗi hóa đơn chỉ nhập bằng 1 nhân viên

BỘ PHẬN QL Làm việc NHÂN VIÊN

NHÂN VIÊN Lập HÓA ĐƠN

+ Một khách hàng chỉ có thể có nhiều hóa đơn

+ Một hóa đơn chỉ thuộc 1 khách hàng

+ Mỗi hóa đơn có thể có thông tin nhiều phòng

+ Mỗi phòng có thể thuộc nhiều hóa đơn ở các thời điểm khác nhau.

+ Mỗi hóa đơn có nhiều dịch vụ

+ Mỗi dịch vụ thuộc nhiều hóa đơn khác nhau

Xác định các thuộc tính và phân loại thuộc tính

 Các đối tượng cần lưu trữ thông tin : NHANVIEN, PHONG,

BOPHANQUANLY, KHACHHANG, HOADON, DICHVU. a PHONG (imaP; fgiaP; sLoaiP)

 maP : Mã loại phòng – Khóa chính

HÓA ĐƠN Có DỊCH VỤ

KHÁCH HÀNG Có HÓA ĐƠN

 giaP: Giá của loại phòng b BoPhanQuanLy (smaPB; stenPB)

 tenPB: Tên phòng ban c KhachHang ( smaKH; stenKH; sgioiTinh; sCCCD; sSDTKH)

maKH : Mã khách hàng - Khóa chính

tenKH: là họ và tên khách hàng

gioiTinh: là giới tính của khách hàng

CCCD : là mã căn cước công dân của khách hàng

SDTKH: Số điện thoại của khách hàng

BỘ PHẬN QUẢN LÝ smaPB stenBP d NhanVien(smaNV; stenNV; dNgSinh; sgioiTinh ; sDchi ; sSDTNV ; sMaPB; fluongCB ; fphuCap;dngayVaoLam)

maNV : Mã Nhân viên - Khóa chính

tenNV: là họ và tên nhân viên

Ngsinh: là ngày sinh của nhân viên

gioiTinh: là giới tính của nhân viên

Dchi : là địa chỉ của nhân viên

SDTNV : là số điện thoại của nhân viên

luongCB : là lương của nhân viên

phuCap: là mức lương được hưởng thêm của nhân viên

KHÁCH HÀNG smaKH stenKH sgioiTinh sCCCD sSDTKH e DichVu ( smaDV ; stenDV ; fgiaDV; maLDV )

maDV : Mã dịch vụ - khóa chính

tenDV : là tên dịch vụ

giaDV: là giá dịch vụ

maLDV: mã loại dịch vụ f HoaDon ( smaHD; smaKH; smaNV; dNgayLap ; ftongTien)

 maHD : Mã Hóa Đơn - Khóa chính

NHÂN VIÊN smaNV stenNV dNgaySinh sDiaChi sSDTNV smaPB sgioiTinh fluongCB fphuCap dngayVaoLam

DỊCH VỤ sMaDV stenDV fgiaDV smaLDV

tongTien: Tổng tiền hóa đơn

NgayLap: Ngày lập hóa đơn

HÓA ĐƠN smaHD smaKH smaNV ftongTien dngayLap

Vẽ mô hình ER

KHÁCH HÀNG PHÒNG co có

Xây dựng mô hình cơ sở dữ liệu quan hệ

 Quy tắc 1 : Thực thể mạnh

 NhanVien( maNV; tenNV; NgSinh; gioiTinh ; Dchi ; SDTNV ; ngayVaoLam; LuongCB; maPB; phuCap)

 DichVu ( maDV ; tenDV ; giaDV; MaLDV )

 HoaDon ( maHD; maKH; maNV; ngayLap; tongTien)

 KhachHang ( maKH; tenKH; gioiTinh; CCCD; SDTKH)

 NhanVien( maNV; tenNV; ngaySinh; gioiTinh ; diaChi ; SDTNV ; luongCB; phuCap ;maBP; ngayVaoLam)

 HoaDon ( maHD; maKH; maNV ; ngayLap; tongTien)

 Quy tắc 5: kiểu liên kết N-M

 Chi_tiet_hoa_don_dv( maHD ; maDV)

 Chi_tiet_hoa_don_phong ( maP ; maHD; NgayThue; NgayTra)

 HoaDon ( maHD; maKH; maNV ; ngayLap; tongTien)

 NhanVien( maNV; tenNV; ngaySinh; gioiTinh ; diaChi ; SDTNV ; luongCB; phuCap ;maPB ; ngayVaoLam)

 Chi_tiet_hoa_don_dv( maHD ; maDV)

 Chi_tiet_hoa_don_phong ( maP ; maHD; NgayThue; NgayTra)

 KhachHang ( maKH; tenKH; gioiTinh; CCCD; SDTKH)

 DichVu( maDV ; tenDV ; giaDV; MaLDV )

Chuẩn hóa cơ sở dữ liệu của bài toán

Xác định các quan hệ chuẩn NF

 HoaDon ( maHD; maKH; maNV ; ngayLap; tongTien)

R1 {maHD → maKH ; maHD → ngayLapHD ; maHD → TongTien ; maHD →maNV ; maKH → tenK

 HoaDon ( maHD; maKH; maNV ; ngayLap; tongTien)

→ Mọi thuộc tính không khóa đều phụ thuộc hàm đày đủ vào khóa chính->Chuẩn 2NF

→Mọi thuộc tính không khóa đều không phụ thuộc bắc cầu vào bất kỳ khóa chính của quan hệ -> 3NF

 NhanVien( maNV; tenNV; ngaySinh; gioiTinh ; diaChi ; SDTNV

R2 {; maNV → tenNV ; maNV → Ngsinh ; maNV → gioitinh; maNV → Dchi ; maNV → SDTNV ; }

 NhanVien( maNV; tenNV; ngaySinh; gioiTinh ; diaChi ; SDTNV; luongCB; phuCap ;maBP; ngayVaoLam)

→ Mọi thuộc tính không khóa đều phụ thuộc hàm đày đủ vào khóa chính->Chuẩn 2NF

→Mọi thuộc tính không khóa đều không phụ thuộc bắc cầu vào bất kỳ khóa chính của quan hệ -> 3NF

R3 = { maP → tenP ; maP → giaP ; maP →loaiP }

→ Mọi thuộc tính không khóa đều phụ thuộc hàm đày đủ vào khóa chính->Chuẩn 2NF

→Mọi thuộc tính không khóa đều không phụ thuộc bắc cầu vào bất kỳ khóa chính của quan hệ -> 3NF

 Chi_tiet_hoa_don_dv( maHD ; maDV)

→ Mọi thuộc tính không khóa đều phụ thuộc hàm đày đủ vào khóa chính->Chuẩn 2NF

→Mọi thuộc tính không khóa đều không phụ thuộc bắc cầu vào bất kỳ khóa chính của quan hệ -> 3NF

 Chi_tiet_hoa_don_phong ( maP ; maHD; NgayThue; NgayTra) → Mọi thuộc tính không khóa đều phụ thuộc hàm đày đủ vào khóa chính->Chuẩn 2NF

→Mọi thuộc tính không khóa đều không phụ thuộc bắc cầu vào bất kỳ khóa chính của quan hệ -> 3NF

 KhachHang ( maKH; tenKH; gioiTinh; CCCD; SDTKH)

R4={maKH → tenKH ; maKH → gioitinh ; maKH →CCCD ; maKH → STDKH }

→ Mọi thuộc tính không khóa đều phụ thuộc hàm đày đủ vào khóa chính->Chuẩn 2NF

→Mọi thuộc tính không khóa đều không phụ thuộc bắc cầu vào bất kỳ khóa chính của quan hệ -> 3NF

→ Mọi thuộc tính không khóa đều phụ thuộc hàm đày đủ vào khóa chính->Chuẩn 2NF

→Mọi thuộc tính không khóa đều không phụ thuộc bắc cầu vào bất kỳ khóa chính của quan hệ -> 3NF

 DichVu( maDV ; tenDV ; giaDV; MaLDV )

R6 = { maDV → tenDV ; maDV → LoaiDV ;maDV → giaDV }

DichVu( maDV ; tenDV ; giaDV; maLDV )

→ Mọi thuộc tính không khóa đều phụ thuộc hàm đày đủ vào khóa chính->Chuẩn 2NF

→Mọi thuộc tính không khóa đều không phụ thuộc bắc cầu vào bất kỳ khóa chính của quan hệ -> 3NF

Kết luận: Các thuộc tính thuộc dang chuẩn 3NF

 KhachHang ( maKH; tenKH; gioiTinh; CCCD; SDTKH)

 NhanVien( maNV; tenNV; ngaySinh; gioiTinh ; diaChi ; SDTNV; luongCB; phuCap ;maPB; ngayVaoLam)

 DichVu( maDV ; tenDV ; giaDV; maLDV )

 HoaDon ( maHD; maKH; maNV ; ngayLap; tongTien)

 Chi_tiet_hoa_don_dv( maHD ; maDV)

 Chi_tiet_hoa_don_phong ( maP ; maHD; NgayThue; NgayTra)

Vậy lược đồ quan hệ đã được chuẩn hóa về dạng cao nhất – 3NF.

II TẠO BẢNG CƠ SỞ DỮ LIỆU

CREATE DATABASE BTL_quan_ly_khach_san

USE BTL_quan_ly_khach_san

GO/* -1Tạo Bảng Bộ Phận Quản Lý -*/

CREATE TABLE tblBoPhanQuanLy( sMaPB int PRIMARY KEY IDENTITY (1 11, ), sTenPB NVARCHAR(30) NOT NULL

GO/* -2Tạo Bảng Nhân Viên -*/

The SQL statement creates a table named `tblNhanVien` to store employee information It includes the following fields: `sMaNV` as the primary key with an auto-increment starting from 12, `sTenNV` for the employee's name, `sNgaysinh` for the date of birth, `sGioiTinh` with a gender check for 'Nam' or 'Nu', `sDiaChi` for the address, `sSDT` for a mandatory phone number, `sLuongcb` for the base salary with a default value of 0, `sPhuCap` for additional benefits also defaulting to 0, and `sMaPB` which references the department table `tblBoPhanQuanLy`.

ON DELETE CASCADE ON UPDATE CASCADE, sNgayVaoLam DATETIMENOT NULL,

CHECK(DATEDIFF day( ,sNgaysinh,sNgayVaoLam) / 365 > ); 18)

GO/* -3Tạo Bảng Khách Hàng -*/

CREATE TABLE tblKhachHang( sMaKH INT PRIMARY KEY IDENTITY (3,13), sTenKH NVARCHAR(20) NOT NULL, sGioiTinh NVARCHAR(3) CHECK(sGioiTinh IN ('Nam' 'Nu', )), sCCCD NVARCHAR(11) NOT NULL, sSDTKH NVARCHAR(11) NOT NULL

CREATE TABLE tblPhong( sMaP INT PRIMARY KEY IDENTITY (4 14, ), sLoaiP NVARCHAR(10)CHECK(sLoaiP IN

('HangA','HangB' 'HangC')),, sGiaP FLOAT(2) NOT NULL

GO/* -5Tạo Bảng Loại Dịch Vụ -*/

CREATE TABLE tblLoaiDV( sMaLoai INT PRIMARY KEY IDENTITY (4 14, ), sTenLoai NVARCHAR(20) NOT NULL

CREATE TABLE tblDichVu( sMaDV INT PRIMARY KEY IDENTITY (5 15, ), sTenDV NVARCHAR(20) UNIQUE NOT NULL, sGiaDV FLOAT (2)DEFAULT 0, sMaLDV INT REFERENCES tblLoaiDV(sMaLoai)

ON DELETE CASCADE ON UPDATE CASCADE

GO/* -7Tạo Bảng Hóa Đơn -*/

CREATE TABLE tblHoaDon( sMaHD INT PRIMARY KEY IDENTITY (6, 16), sMaKH INT REFERENCES tblKhachHang(sMaKH)

ON DELETE CASCADE ON UPDATE CASCADE, sMaNV INT REFERENCES tblNhanVien(sMaNV)

ON DELETE CASCADE ON UPDATE CASCADE, sNgayLap DATETIME CHECK (sNgayLap = 2 SELECT kh.sTenKH FROM tblHoaDon hd

INNER JOIN tblChi_tiet_hoa_don_phong dp ON hd.sMaHD dp sMaHD.

INNER JOIN tblKhachHang kh ON kh sMaKH = hd sMaKH .

GROUP BY kh.sMaKH kh sTenKH,

Tạo view hiện dữ liệu

1 Tạo view cho biết số khách hàng Nam và số khách hàng Nữ CREATE VIEW [số khách hàng Nam và số khách hàng Nữ]

SELECT COUNT(*) AS [tổng khách hàng nữ] FROM tblKhachHang

SELECT COUNT(*) AS [tổng khách hàng nam] FROM tblKhachHang

SELECT FROM * [số khách hàng Nam và số khách hàng Nữ]

2 Tạo view cho biết tổng tiền của từng hoá đơn (cả tiền dịch vụ lẫn tiền phòng)

CREATE OR ALTER VIEW [tổng tiền của từng hoá đơn (cả tiền dịch vụ lẫn tiền phòng)]

SELECT hd.sMaHD,ISNULL([tong tien dv], 0) + ISNULL([tong tien p] 0, ) AS [tổng tiền] FROM [dbo] [tblHoaDon] hd.

SELECT cdv.sMaHD,SUM(cdv.sGiaNiemYet * cdv sSoLuong ) AS[tong tien dv] FROM tblChi_tiet_hoa_don_dv cdv GROUP BY cdv.sMaHD

SELECT cdp.sMaHD,SUM(cdp.sGiaPhong * DATEDIFF day( , sNgayThue, sNgayTra)) AS[tong tien p] FROM tblChi_tiet_hoa_don_phong cdp

SELECT FROM * [tổng tiền của từng hoá đơn (cả tiền dịch vụ lẫn tiền phòng)]

3 Tạo view cho biết 3 khách hàng đã trả nhiều tiền nhất CREATE VIEW [3 khách hàng đã trả nhiều tiền nhất]

SELECT TOP 3 kh.sMaKH sTenKH, sGioiTinh, sSDTKH, [tổng , tiền] FROM tblKhachHang kh

LEFT JOIN tblHoaDon hd ON kh sMaKH = hd sMaKH .

LEFT JOIN [tổng tiền của từng hoá đơn (cả tiền dịch vụ lẫn tiền phòng)] a ON a sMaHD hd = sMaHD

ORDER BY a.[tổng tiền] DESC

SELECT FROM * [3 khách hàng đã trả nhiều tiền nhất]

4 Tạo view thống kê số lượng nhân viên theo giới tính

CREATE VIEW [thống kê số lượng nhân viên theo giới tính] AS

SELECT sGioiTinh, COUNT(*)AS [tổng số nhân viên] FROM tblNhanVien

SELECT FROM * [thống kê số lượng nhân viên theo giới tính]

5 Tạo view thống kê số lượng nhân viên có độ tuổi >= 23 CREATE VIEW [thống kê số lượng nhân viên có độ tuổi >= 23]

ASSELECT COUNT(*) AS [số nhân viên] FROM tblNhanVien

WHERE DATEDIFF day( , sNgaysinh, GETDATE()) / 365 >= 23 SELECT FROM * [thống kê số lượng nhân viên có độ tuổi >= 23]

/*6 Đưa ra danh sách khách hàng đã thuê phòng trong tháng này*/

CREATE VIEW [danh sách khách hàng đã thuê phòng trong tháng này]

SELECT kh.sMaKH sTenKH, sGioiTinh, sSDTKH , FROM tblKhachHang kh

INNER JOIN tblHoaDon hd ON kh sMaKH = hd sMaKH .

INNER JOIN tblChi_tiet_hoa_don_phong p ON p sMaHD = hd sMaHD.

WHERE MONTH(sNgayThue) =MONTH GETDATE( ()) AND

SELECT FROM * [danh sách khách hàng đã thuê phòng trong tháng này]

7.Tạo view tính trung bình cộng tiền dịch vụ mỗi khách hàng đã trả trong năm 2019

CREATE VIEW [trung bình cộng tiền dịch vụ mỗi khách hàng đã trả trong năm 2019]

SELECT [tong tien dv] / [so kh] AS [tiền TB] FROM (

SELECT COUNT(x.sMaKH )AS [so kh] FROM (

SELECT sMaKH FROM tblHoaDon hd

WHERE YEAR(sNgayLap 2019) GROUP BY sMaKH

SELECT SUM(cdv sGiaNiemYet cdv sSoLuong AS [tong * ) tien dv] FROM tblHoaDon hd

INNER JOIN tblChi_tiet_hoa_don_dv cdv ON cdv.sMaHD hd sMaHD.

SELECT FROM * [trung bình cộng tiền dịch vụ mỗi khách hàng đã trả trong năm 2019]

8 Tạo view cho biết danh sach khách hàng đã thuê/đang thuê phòng hạng A

CREATE VIEW [danh sach khách hàng đã thuê/đang thuê phòng hạng A]

ASSELECT kh.sMaKH sTenKH, sGioiTinh, sSDTKH , FROM tblKhachHang kh

INNER JOIN tblHoaDon hd ON hd.sMaKH kh sMaKH=

INNER JOIN tblChi_tiet_hoa_don_phong cp ON cp sMaHD = hd sMaHD.

INNER JOIN tblPhong p ON cp sMap = p.sMaP.

SELECT FROM * [danh sach khách hàng đã thuê/đang thuê phòng hạng A]

9 Tạo view cho biết nhân viên nào có lương cao nhất

WHERE sLuongcb sPhuCap + = (SELECT MAX(sLuongcb + sPhuCap) FROM tblNhanVien)

10 Tạo view cho biết loại dịch vụ nào khách hàng hay sử dụng nhất

CREATE VIEW [loại dịch vụ nào khách hàng hay sử dụng nhất]

ASSELECT sTenLoai FROM tblChi_tiet_hoa_don_dv cdv

INNER JOIN tblDichVu dv ON cdv sMaDV dv.sMaDV INNER JOIN tblLoaiDV ldv ON dv.sMaLDV = ldv sMaLoai.

GROUP BY ldv.sMaLoai, sTenLoai

The SQL query retrieves the count of records from the `tblChi_tiet_hoa_don_dv` table, joining it with the `tblDichVu` and `tblLoaiDV` tables based on service and service type IDs It groups the results by the service type ID, providing a summary of the number of service details for each type.

SELECT FROM * [loại dịch vụ nào khách hàng hay sử dụng nhất]

Tạo các STORED PROCEDURE

/* -TẠO STORED PROCEDURE HIỆN DỮ LIỆU (20 CÂU)

/*1 Tạo Stored Procedure có tham số truyền vào là tháng, năm cho biết những khách hàng nào thuê phòng trong tháng đó.

có tham số truyền vào là năm và tháng

CREATE PROC [những khách hàng nào thuê phòng trong tháng đó] (@thang INT, @nam INT)

SELECT FROM * tblChi_tiet_hoa_don_phong

WHERE MONTH(sNgayThue) @thang = AND

SELECT kh.sMaKH sTenKH, sGioiTinh, sSDTKH , FROM tblKhachHang kh

INNER JOIN tblHoaDon hd ON kh sMaKH = hd sMaKH . INNER JOIN tblChi_tiet_hoa_don_phong p ON p sMaHD.

GROUP BY kh.sMaKH sTenKH, sGioiTinh, sSDTKH, , sNgayThue

HAVING MONTH(sNgayThue @thang ) = AND

PRINT N'không có khách hàng nào thuê trong tháng này' END

EXEC [những khách hàng nào thuê phòng trong tháng đó] 5, 2020

/*2 Tạo thủ tục để bổ sung thêm một bản ghi mới cho bảng [dbo].[tblNhanVien]

-có tham số truyền vào là tênnv, ngày sinh, giới tính, diachi, sdt, luong, phu cap, mapb

+) ngày vào làm đủ 18 tuổi

+) mã PB phải nhập đúng

+) Ngày vào làm phải 5

ENDEXEC [tăng lương lên gấp rưỡi cho Nhân viên làm việc trên 5 năm]

/* 9 Tạo thủ tục lấy ra danh sách nhân viên theo giới tính và theo tuổi

- tuổi và giới tính truyền vào

CREATE PROC [lấy ra danh sách nhân viên theo giới tính và tuổi](@gioitinh NVARCHAR( ), @tuoi INT)3

WHERE sGioiTinh @gioitinh = AND DATEDIFF day( , sNgaysinh, GETDATE()) / 365 = @tuoi

EXEC [lấy ra danh sách nhân viên theo giới tính và tuổi] 'Nu', 24

/* 10 Tạo thủ tục tính tổng tiền thu được trong năm truyền vào

*/CREATE PROC tong_tien @nam ( INT)

SELECT @tongt += SUM(dv.sGiaNiemYet sSoLuong) * FROM tblHoaDon hd

INNER JOIN tblChi_tiet_hoa_don_dv dv ON hd.sMaHD dv sMaHD.

WHERE YEAR( hd sNgayLap @nam ) SELECT @tongt += SUM(hp.sGiaPhong DATEDIFF day* ( , sNgayThue, sNgayTra)) FROM tblHoaDon hd

INNER JOIN tblChi_tiet_hoa_don_phong hp ON hd.sMaHD hp sMaHD.

WHERE YEAR( hd sNgayLap @nam ) PRINTN'Tổng tiền thu được trong năm '+ CAST(@nam AS NVARCHAR( )) +10 N' là: '+ CAST(@tongt AS NVARCHAR(30)) ENDEXEC dbo.tong_tien 2019

11 tạo thủ tục tăng phụ cấp nhân viên lập được nhiều hóa đơn nhất lên 500000

SET sPhuCap 5000000WHERE sMaNV IN (

HAVING COUNT(sMaHD ) >= (SELECT MAX(tong) FROM(

SELECT COUNT(sMaHD) AS tong FROM tblHoaDon

Tham số truyền vào: mã loại phòng

Thực hiện tăng giá phòng lên gấp rưỡi cho những phòng thuộc loại phòng truyền vào

CREATE PROC [tăng giá phòng lên gấp rưỡi] (@maloai

EXEC dbo.[tăng giá phòng lên gấp rưỡi] N'hangA'

/*13 Tạo thủ tục thêm bản ghi khách hàng tham số truyền vào tương ứng

*/CREATE PROC [INSERTtblKhachHang] @ten ( NVARCHAR(20) ,

@gioiTinh NVARCHAR( ),3 @cccd NVARCHAR( ),11 @sdt

IF(LEN(@sdt 11 ) != ANDLEN(@sdt) != 10)

PRINT N'Số điện thoại phải có 10 hoặc 11 chữ số' SET @CHECK 1END

IF(@gioitinh NOT IN ('Nam' 'Nu', ))

PRINT N'giới tính chỉ nhận giá trị Nam hoặc Nữ' SET @CHECK 1END

PRINT N'Căn cước công dân phải đủ 11 chữ số' SET @CHECK 1END

PRINT N'Mời bạn nhập lại'

INSERT INTO tblKhachHang(sTenKH, sGioiTinh , sCCCD, sSDTKH)

VALUES (@ten, @gioiTinh @cccd @sdt, , )

EXEC dbo.INSERTtblKhachHang 'zzcongkunzz' 'Nam', ,

14 tạo thủ tục thêm hóa đơn tham số truyền vào tương ứng

*/CREATE PROC [INSERTtblHoaDon] @makh ( INT, @manv INT,

PRINT N'Mã nhân viên nhập không đúng'

PRINT N'Mã khách hàng nhập không đúng'

PRINT N'ngày lập hóa đơn phải trước hoặc bằng ngày hiện tại'

PRINT N'Mời bạn nhập lại'

INSERT INTO tblHoaDon(sMaKH, sMaNV , sNgayLap)

/*15 tạo thủ tục thêm dịch vụ với tham số truyền vào tương ứng

*/CREATE PROC [INSERTtblDichVU] @tendv ( NVARCHAR(20), @gia FLOAT(2), @maloai INT)

PRINT N'Giá phải lớn hơn 0'

PRINT N'Không có loại dịch vụ nào'

PRINT N'Mời bạn nhập lại'

Để thêm bản ghi mới vào bảng chi tiết dịch vụ, bạn cần truyền vào tham số dưới dạng chuỗi {{madv1, so luong}, {madv2, so luong}, } Mã hóa đơn mặc định sẽ được thiết lập với giá niêm yết là 110% giá dịch vụ.

*/CREATE PROC [INSERTtbltblChi_tiet_hoa_don_dv](@mhd INT,

PRINT N'Mã hóa đơn nhập không đúng'

DECLARE contro CURSOR FOR SELECT FROM *

FETCH NEXT FROM contro INTO @madv

DECLARE @sl INT FETCH NEXT FROM contro INTO @sl

SELECT FROM * tblDichVu WHERE CAST(@madv AS INT) sMaDV

PRINT N'Không có dịch vụ nào có mã là ' @madv+

SELECT @giany sGiaDV = * 1.1 FROM tblDichVu

WHERE @madv sMaDV INSERT INTO tblChi_tiet_hoa_don_dv

FETCH NEXT FROMEND contro INTO @madv END

EXEC dbo.INSERTtbltblChi_tiet_hoa_don_dv 6,'{{80,10},{95, 2}}'

/*17 Tạo thủ tục thống kê số lượng nhân viên của từng phòng ban

*/CREATE PROC [số lượng nhân viên của từng phòng ban]

SELECT sTenPB, COUNT(*)AS [số nhân viên] FROM tblBoPhanQuanLy ql

LEFT JOIN tblNhanVien nv ON ql sMaPB nv.sMaPB GROUP BY ql.sMaPB, ql.sTenPB

ENDEXEC [số lượng nhân viên của từng phòng ban]

18 tạo thủ tục tính số phòng của từng loại phòng

CREATE PROC [số phòng của từng loại phòng]

SELECT sLoaiP ,COUNT(sMaP) AS [số lượng] FROM tblPhong

EXEC [số phòng của từng loại phòng]

/*19 Tạo thủ thục thêm phòng với tham số truyền vào là loại phòng, giáp và số lượng phòng muốn thêm

*/CREATE PROC [INSERTtblPhong] @loaip ( NVARCHAR( ),10 @gia FLOAT(2), @sl INT)

IF (@loaip != 'HangA' AND @loaip !='HangB'AND @loaip

PRINT N'Loại phòng chỉ nhận giá trị HangA hoặc HangB hoặc HangC'

20 tạo PROC lấy ra khách hàng đã chi tiêu số tiền lớn hơn hoặc bằng số tiền truyền vào

CREATE PROC [KH_tiềm_năng](@tt FLOAT( ))2

SELECT sTenKH sGioiTinh sSDTKH , , FROM tblHoaDon hd INNER JOIN tblKhachHang kh ON hd.sMaKH kh sMaKH= LEFT JOIN (

SELECT sMaHD ,SUM(sGiaNiemYet * sSoLuong) AS [ttdv] FROM tblChi_tiet_hoa_don_dv cdv

SELECT sMaHD ,SUM(sGiaPhong * DATEDIFF day( , sNgayThue, sNgayTra)) AS [ttp] FROM tblChi_tiet_hoa_don_phong cp

GROUP BY sTenKH, sGioiTinh sSDTKH,

HAVING SUM ISNULL(( (ttdv, 0) +ISNULL( , ))) >=ttp 0 @tt

EXEC dbo.KH_tiềm_năng 100000000

Tạo Trigger kiểm soát ràng buộc dữ liệu

1 Tạo trigger kiểm tra số điện thoại của nhân viên

SELECT @sdt = sSDT FROM inserted

IF(LEN(@sdt 10 ) != ANDLEN(@sdt) != 11) BEGIN

PRINT N'số điện thoại phải có 10 hoặc

BEGIN PRINT N'số điện thoại phải bắt đầu bằng chữ số 0'

BEGIN IF(SUBSTRING(@sdt, @i 1 , )

BEGIN PRINT N'số điện thoại chỉ được chứa những chữ số từ 0 đến 9'

INSERT INTO tblNhanVien (sTenNV, sNgaySinh sGioiTinh , , sDiaChi, sSDT sLuongcb sPhuCap, , ,sMaPB, sNgayVaoLam) VALUES (N' Trần Thị Hà' ' 12/03/1995', ,N'Nu',N'Hà Nội',

WHERE sMaNV 3778/*2 khi có 1 nhân viên bị xoá khỏi bảng tblNhanVien

Các đơn đặt hàng của nhân viên bị xoá sẽ được phân bổ đồng đều cho những nhân viên khác có số đơn đặt hàng cao hơn nhưng vẫn thấp hơn số đơn của nhân viên đó.

DECLARE @manvxoa INT mã nv của thằng bị xóa

DECLARE @tonghoadonnvxoa INT tổng hóa đơn của nv bị xóa

DECLARE @tongdhcaonhat INT 1 = - tổng số đơn đặt hàng cao nhất nhưng ít hơn nhân viên bị xoá.

SELECT @manvxoa sMaNV = FROM deleted lấy ra mã nv bị xóa

IF NOT EXISTS( nếu nv bị xóa chưa lập hóa đơn nào SELECT FROM * tblHoaDon

DELETE FROM tblNhanVien sau khi thành công xóa nhân viên

WHERE sMaNV @manvxoaPRINT N'Xóa thành công nhân viên1' return

SELECT @tonghoadonnvxoa = COUNT(sMaHD) FROM tblHoaDon lấy ra tổng hóa đơn của nv bị xóa

WHERE sMaNV @manvxoaSELECT TOP 1 @tongdhcaonhat = COUNT(sMaHD) FROM tblHoaDon

GROUP BY sMaNV lấy ra tổng số đơn đặt hàng cao nhất nhưng ít hơn nhân viên bị xoá

HAVING sMaNV != @manvxoa AND COUNT(sMaHD ) @ckngaytra) thì thiết lập @min bằng @ckngaytra Để kiểm tra xem trong khoảng thời gian đó có phòng nào đã được khách thuê hay không, ta cần xác định xem hai khoảng thời gian có giao nhau hay không Nếu hai khoảng thời gian giao nhau, nghĩa là phòng đã có người thuê Cách kiểm tra là tìm giá trị lớn nhất của đầu A và giá trị nhỏ nhất của đầu B, sau đó xem giá trị nhỏ nhất có lớn hơn giá trị lớn nhất hay không Nếu lớn hơn, tức là hai khoảng thời gian đã giao nhau.

IF(@Max < @Min) BEGIN PRINT N'Phòng đã có người thuê' ROLLBACK

FETCH NEXT FROM contro INTO

SELECT FROM * tblChi_tiet_hoa_don_phong

INSERT INTO tblChi_tiet_hoa_don_phong

VALUES (368, 454,'2020-01-13 00:00:00.000', '2020-01-14') 4 Tạo trigger kiểm tra tuổi của nhân viên đủ 18 và không quá

50CREATE OR ALTER TRIGGER [ck_tuoi]

SELECT @ngaysinh = sNgaysinh FROM inserted

IF(DATEDIFF day( , @ngaysinh, GETDATE()) / 365

>= 18 AND DATEDIFF(day, @ngaysinh GETDATE, ()) / 365 = 18) );

thêm dữ liệu bảng bộ phận quản lý

VALUES ( N' Bộ phận nhà hàng'),

GO Tạo PROC thêm nhân viên

CREATE OR ALTER PROC [INSERTtblNhanVien](@smanv INT,

@stennv NVARCHAR( ),20 @sngaysinh DATETIME, @sgioitinhNVARCHAR( ),3 @sdiachi NVARCHAR( ),50 @sdt NVARCHAR(11),

@sluongcb FLOAT( ),2 @sphucap FLOAT( ),2 @mapb INT,

LINKBTL BTL_quan_ly_khach_san dbo tblNhanVien .

PRINT N'Mã nhân viên bị trùng'

IF(@sdiachi LIKE N'%Hà Nội')

INSERT INTO tblNhanVien VALUES (@smanv, @stennv,

@sngaysinh, @sgioitinh, @sdiachi , @sdt , @sluongcb,

LINKBTL BTL_quan_ly_khach_san dbo tblNhanVien .

@sngaysinh, @sgioitinh, @sdiachi , @sdt , @sluongcb,

EXEC INSERTtblNhanVien 11,N' Trần Thị Hồng',' 12/03/1995' N'Nu', ,N'Thanh Xuân - Hà Nội',

CREATE DATABASE BTL_quan_ly_khach_san

USE BTL_quan_ly_khach_san

tạo bảng bộ phận quản lý

CREATE TABLE tblBoPhanQuanLy( sMaPB int PRIMARY KEY, sTenPB NVARCHAR(30) NOT NULL

GO tạo bảng nhân viên

The SQL command creates a table named "tblNhanVien" to store employee information, including a primary key "sMaNV" of type integer It requires the employee's name "sTenNV" as a non-null NVARCHAR with a maximum length of 20 characters and mandates a non-null date of birth "sNgaysinh." The gender "sGioiTinh" is restricted to specific values, either 'Nam' or 'Nu,' while the address "sDiaChi" must be an NVARCHAR of up to 50 characters, specifically containing 'Hà Nội.' Additionally, the table includes a non-null phone number "sSDT" of 11 characters and two floating-point columns for base salary "sLuongcb" and allowances "sPhuCap," both defaulting to 0 Finally, it establishes a foreign key relationship with the "tblBoPhanQuanLy" table through "sMaPB."

ON DELETE CASCADE ON UPDATE CASCADE, sNgayVaoLam DATETIMENOT NULL,

CONSTRAINT [sNgayVaoLam du 18 tuoi] CHECK(DATEDIFF day( ,sNgaysinh,sNgayVaoLam) / 365 >= 18) );

kéo dữ liệu của bảng bộ phận quản lý từ trạm 1 sang trạm 2

LINKBTL BTL_quan_ly_khach_san dbo tblBoPhanQuanLy .

GO Tạo PROC thêm nhân viên

CREATE OR ALTER PROC [INSERTtblNhanVien](@smanv INT,

@stennv NVARCHAR( ),20 @sngaysinh DATETIME, @sgioitinh NVARCHAR( ),3 @sdiachi NVARCHAR( ),50 @sdt NVARCHAR(11),

@sluongcb FLOAT( ),2 @sphucap FLOAT( ),2 @mapb INT,

LINKBTL BTL_quan_ly_khach_san dbo tblNhanVien .

PRINT N'Mã nhân viên bị trùng'

IF(@sdiachi NOT LIKE N'%Ha Noi')

INSERT INTO tblNhanVien VALUES (@smanv, @stennv,

@sngaysinh, @sgioitinh, @sdiachi , @sdt , @sluongcb,

LINKBTL BTL_quan_ly_khach_san dbo tblNhanVien .

@sngaysinh, @sgioitinh, @sdiachi , @sdt , @sluongcb,

Ngày đăng: 14/02/2025, 15:43