1. Trang chủ
  2. » Công Nghệ Thông Tin

Đồ án cơ sở dữ liệu, khoa công nghệ thông tin (7)

20 15 0

Đ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

Định dạng
Số trang 20
Dung lượng 217,45 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

1.Mô tả bài toánKhách hàng muốn đặt phòng tại khách sạn, sẽ cần lựa chọn loại phòngphòng đơn, phòng đôi,giường lớn, giường nhỏ … và phương thức thuê phòng thuê theo giờ, thuê qua

Trang 1

Khoa Công nghệ Thông tin

Bộ môn Công nghệ Phần mềm

Đề tài: Quản lý khách sạn

Nhóm thực hiện: 06 – lớp 63IT3

Giáo viên hướng dẫn: Nguyễn Đình Anh

Các thành viên:

1) Đỗ Mạnh Tuấn (Nhóm trưởng)

2) Đinh Kim Bảo Long

3) Hoàng Xuân Tiến

Trang 2

1.Mô tả bài toán

Khách hàng muốn đặt phòng tại khách sạn, sẽ cần lựa chọn loại phòng(phòng đơn, phòng đôi,giường lớn, giường nhỏ … ) và phương thức thuê phòng (thuê theo giờ, thuê qua ngày ,thuê qua đêm) lễ tân kiểm tra xem yêu cầu của khách hàng có đáp ứng được hay không, nếu không đáp ứng được sẽ thông báo lại cho khách, nếu đáp ứng được thì kiểm tra chứng minh thư, giữ lại chứng minh thư hoặc giữ tiền cọc và bắt đầu tính giờ vào, sau đó hỏi khách có cần đồ ăn đồ uống gì không và đưa khách chìa khóa phòng

Khi khách muốn trả phòng thì lễ tân gọi nhân viên buồng phòng lên kiểm tra lại phòng, tính xem khách có sử dụng đồ có phí của khách sạn không xong thông báo xuống Lễ tân kiểm tra thông tin về phòng khách thuê và tính tổng hóa đơn từ lúc khách bắt đầu nhận phòng, trả phòng và phí phát sinh Đưa khách hóa đơn, chứng minh thư và thanh toán

Trường hợp khách muốn cọc trước 1 phần tiền thì hệ thống sẽ lưu lại số tiền cọc trước của khách

Trường hợp khi kiểm tra phòng khách muốn trả mà thấy thiếu đồ hoặc hỏng đồ của khách sạn thì sẽ tính tiền thiệt hại và thêm vào phí phát sinh

Trong trường hợp khách muốn nợ tiền thì lễ tân sẽ ghi nhận tiền khách nợ và lưu vào hệ thống, hệ thống sẽ lưu lại thông tin khách nợ, số tiền nợ và thời gian nợ Trường hợp khách quá số giờ đã đặt thì hệ thống sẽ tính giờ phụ thu theo mức giá

có sẵn, nếu khách quá nhiều giờ thì hệ thống sẽ chuyển đổi phương thức thuê phòng của khách

Mỗi lần chuyển ca hệ thống sẽ tính tổng tiền ca trước và giao lại cho ca sau

Cuối mỗi ngày hệ thống sẽ đưa ra báo cáo của ngày đấy , cuối mỗi tháng hệ thống đưa ra báo cáo của tháng đấy

Trang 3

2.Phân tích dữ liệu và vẽ sơ đồ thực thể liên kết

a Lập bảng phân tích

Đặt + phòng

Chọn + loại phòng

Chọn + phương thức thuê

Kiểm tra + yêu cầu

Giữ + chứng minh thư

Giữ + tiền cọc

Tính + giờ vào

Hỏi + nhu cầu ăn uống

Đưa + chìa khóa

Trả + phòng

Gọi + buồng phòng

Kiểm tra + phòng

Thanh toán + hóa đơn

Cọc + tiền

Ghi nhận + tiền cọc

Nợ + tiền

Ghi nhận + tiền nợ

Tính + giờ phụ thu

Chuyển đổi + phương thức

thuê

Chuyển + ca

Tính + tiền ca

Khách Phòng Loại phòng Phương thức thuê phòng

Lê tân Chứng minh thư Tiền cọc

Đồ ăn uống Chìa khóa phòng Nhân viên buồng phòng

Hóa đơn Tiền nợ Thời gian ở

Giờ phụ thu Ca

Báo cáo Phí phát sinh

Tác nhân

Hồ sơ dữ liệu

Hồ sơ dữ liệu

Hồ sơ dữ liệu Tác nhân

Hồ sơ dữ liệu

Hồ sơ dữ liệu

Hồ sơ dữ liệu

= Tác nhân

Hồ sơ dữ liệu

Hồ sơ dữ liệu

Hồ sơ dữ liệu

Hồ sơ dữ liệu

=

Hồ sơ dữ liệu

Hồ sơ dữ liệu

Trang 4

1 2 3

Trang 5

Loại phòng x

Dịch vụ

Ca làm

Sự cố phát sinh

Trang 6

b.Vẽ sơ đồ thực thể liên kết

Trang 7

c.Mô hình quan hệ(dạng 3NF)

Khách (số điện thoại, họ tên, địa chỉ, chứng minh thư)

Hóa đơn(mã hóa đơn,số lượng phòng, tổng tiền, số điện thoại,thời gian lập hóa đơn,phương thức thanh toán,tiền cọc,tiền nợ, mã nhân viên, tình trạng)

Phân quyền(ID, tên, ghi chú)

Nhân viên(mã nhân viên,họ tên nhân viên, chức vụ,ID)

Ca làm(mã ca, lương theo ca)

Phòng(mã phòng, mã loại phòng, trạng thái)

Loại phòng (mã loại phòng, tên loại phòng)

Phương thức thuê (mã phương thức thuê, tên phương thức thuê)

Dịch vu(mã dịch vụ, tên dịch vụ, đơn giá dịch vụ)

Sự cố phát sinh(mã sự cố, tên sự cố,phí phát sinh)

Bảng công(mã nhân viên, mã ca,ngày)

Chi tiết loại phòng (mã loại phòng, mã phương thức thuê,đơn giá)

Chi tiết hóa đơn(mã hóa đơn, mã phòng, thời gian ra dự kiến, thời gian ra, thời gian vào, mã phương thức thuê)

Chi tiết dịch vụ phòng(mã hóa đơn, mã phòng, mã dịch dịch vụ,số lượng dịch vụ) Chi tiết sự cố phát sinh(mã hóa đơn, mã phòng, mã sự cố, số lượng sự cố)

Trang 8

3.Mô tả các ràng buộc

Khách Tên trường Kiểu dữ

liệu Kích thước Ràng buộc Ghi chú

Hóa đơn Tên trường Kiểu dữ liệu Kích thước Ràng buộc Ghi chú

Phương thức

Thời gian lập

Phân quyền Tên trường Kiểu dữ

liệu Kích thước Ràng buộc Giá trị mặc định Ghi chú

Trang 9

key quyền

Nhân viên Tên trường Kiểu dữ liệu Kích thước Ràng buộc Giá trị

mặc đinh Ghi chú

PhanQuyenI

Ca làm Tên trường Kiểu dữ liệu Kích thước Ràng buộc Ghi chú

Phòng Tên trường Kiểu dữ liệu Kích thước Ràng buộc Ghi chú

Trang 10

Loại phòng Tên trường Kiểu dữ liệu Kích thước Ràng buộc Ghi chú

Phương thức thuê

liệu Kích thước Ràng buộc Ghi chú

Tên phương thức thuê nVarcha

Dịch vụ Tên trường Kiểu dữ liệu Kích thước Ràng buộc Ghi chú

Đơn giá dịch vụ money

Sự cố phát sinh Tên trường Kiểu dữ liệu Kích thước Ràng buộc Ghi chú

Phí phát sinh money

Bảng công Tên trường Kiểu dữ liệu Kích thước Ràng buộc Ghi chú

Trang 11

Ngày dateTime Not null

Chi tiết loại phòng Tên trường Kiểu dữ liệu Kích thước Ràng buộc Ghi chú

Chi tiết hóa đơn Tên trường Kiểu dữ liệu Kích thước Ràng buộc Ghi chú

Thời gian ra dự kiến Date time

Thời gian vào Date time

Chi tiết dịch vụ phòng Tên trường Kiểu dữ liệu Kích thước Ràng buộc Ghi chú

Số lượng dịch vụ tinyint

Chi tiết sự cố phát sinh Tên trường Kiểu dữ

liệu Kích thước Ràng buộc Ghi chú

Trang 12

Mã phòng Char 5 Khóa chính

Số lượng sự cố tinyint

5 Các vấn đề nghiệp vụ của bài toán và cách xử lý

a Các nghiệp vụ

Quản lý thông tin(thêm, sửa, xóa) : phòng, khách, dịch vụ, ca làm, loại phòng,

phương thức thuê, sự cố

Chức năng đặt phòng: tạo hóa đơn(tạo mã hóa đơn(tự tăng), giờ vào, thông tin khách

hàng(sdt), thông tin nhân viên(MaNV)), chọn phòng , chọn phương thức thuê, ghi nhận tiền cọc

Chức năng cập nhật hóa đơn: thêm dịch vụ và số lượng sử dụng, cập nhật số lượng

dịch vụ , đổi phòng

Chức năng trả phòng: in hóa đơn(tính tổng tiền(tiền dịch vụ, tiền phòng, tiền phát

sinh),in hóa đơn, giờ ra), ghi nhận tiền nợ, chọn phương thức thanh toán

Chức năng báo cáo : báo cáo doanh thu (ca, ngày, tháng), thông kê lương nhân viên Chức năng đăng nhập: ghi nhận nhân viên, ca làm.

b Cách xử lý

Quản lý thông tin(thêm, sửa, xóa) : phòng, khách, dịch vụ, ca làm, loại phòng,

phương thức thuê, sự cố

- Thêm khách hàng

Create ProC Insert_Khachhang

@SoDT Char ( 10 ),

@Hoten nvarchar ( 50 ),

@CMT char ( 12 ),

@DiaChi nvarchar ( 50 )

As

Begin

Insert Into KhachHang ( SoDT , Hoten , CMT , DiaChi )

Values ( @SoDT , @Hoten , @CMT , @DiaChi )

Trang 13

End ;

- Sửa thông tin khách hàng

Create ProC Update_Khachhang

@SoDT Char ( 10 ),

@Hoten nvarchar ( 50 ),

@CMT char ( 12 ),

@DiaChi nvarchar ( 50 )

As

Update KhachHang

Set

SoDT = @SoDT ,

Hoten = @Hoten ,

CMT = @CMT ,

DiaChi = @DiaChi

Where SoDT = @SoDT

End ;

- Xóa thông tin khách hàng

Create ProC Delete_Khachhang

@SoDT Char ( 10 )

As

Delete From KhachHang

Where SoDT = @SoDT

End ;

- Các table còn lại làm tương tự như table khách hàng

Chức năng đặt phòng: tạo hóa đơn(tạo mã hóa đơn, giờ vào, thông tin khách hàng,

thông tin nhân viên), chọn phòng , chọn phương thức thuê, ghi nhận tiền cọc

+ Sử dụng lệnh Insert Into để ghi nhận các dữ liệu vào bảng Hóa Đơn và Chi Tiết Hóa Đơn ví dụ như”

Insert Into HoaDon Values ( '0987654321' , '1' , '100000' , '0' , '0' , GETDATE (),0)

Insert Into HoaDon Values ( '0987654324' , '2' , '500000' , '0' , '0' , GETDATE (),0)

Insert Into HoaDon Values ( '0987654323' , '3' , '700000' , '0' , '0' , GETDATE (),0)

Insert Into CTHD Values ( '7' , 'P2003' , 'N' , '2021-10-06' , GETDATE (),null)

Insert Into CTHD Values ( '7' , 'P2001' , 'N' , '2021-10-05' , GETDATE (),null)

Insert Into CTHD Values ( '8' , 'P2005' , 'D' , '2021-10-04' , GETDATE (),null)

Insert Into CTHD Values ( '9' , 'P2007' , 'N' , '2021-10-06' , GETDATE (),null)

Trang 14

+ Khi thêm Phòng vào Hóa Đơn (insert vào bảng CTHD) thì trạng thái của Phòng đó sẽ được cập nhật lại bằng trigger sau:

Create Trigger Thm_CTHD ON CTHD After Insert As

Begin

Update Phong Set TrangThai = 0

From Phong

Join inserted ON Phong MaPhong = inserted MaPhong

END

Chức năng cập nhật hóa đơn: thêm dịch vụ và số lượng sử dụng, cập nhật số lượng

dịch vụ, đổi phòng

- Phần thêm dịch vụ:

+ Sử dụng: lệnh INSERT INTO ChiTietDichVuPhong VALUES (…)

+ Nhưng câu lệnh INSERT này gặp vấn đề là có thể thêm dịch vụ vào 1 phòng không thuộc hóa đơn(Thêm phòng ở chức năng đặt phòng) Nên cần phải có 1 TRIGGER để ngăn chặn điều đó

+ Khi sử dụng lệnh INSERT này thì giá trị của số lượng dịch vụ đó sẽ được cộng thêm vào HoaDon.TongTien nên ta sử dụng trigger after insert

+ Tạo trigger là trg_insertCTDVP:

CREATE TRIGGER trg_insertCTDVP

ON dbo ChiTietDichVuPhong

For INSERT

AS

BEGIN

DECLARE @count INT 0

SELECT @count = Count (*) FROM inserted

WHERE EXISTS SELECT FROM CTHD

WHERE MaHD = inserted MaHD AND MaPhong =

inserted MaPhong )

IF ( @count = 0 )

BEGIN PRINT N'Không thêm được vì không có hóa đơn này hoặc phòng này trong hóa đơn'

ROLLBACK TRAN END

END

+ Tạo trigger trg_afterinsertCTDVP:

CREATE TRIGGER trg_afterinsertCTDVP

ON dbo ChiTietDichVuPhong

AFTER INSERT

AS

Trang 15

UPDATE HoaDon

SET TongTien = TongTien +

( SELECT SoLuongDichVu

from inserted WHERE MaHD = inserted MaHD AND MaPhong =

inserted MaPhong )*

( SELECT DonGiaDichVu

FROM DichVu JOIN inserted on DichVu MaDichVu = inserted MaDichVu )

FROM HoaDon JOIN inserted on HoaDon MaHD = inserted MaHD

END

- Cập nhật số lượng dịch vụ: Cập nhật số lượng ở bảng CTDVP và cập nhật lại vào HoaDon.TongTien

+ Sử dụng: Stored procedure để ta có thể dễ dàng thực thi hơn Dùng trigger để cập nhật lại TongTien trong bảng HoaDon

+ Để thực thi gọi :

EXEC usp_updateCTDVP MaHD, MaPhong, MaDV, SoLuongThem

+ Tạo Stored Procedure là usp_apdateCTDVP:

CREATE PROC usp_updateCTDVP

@Mahd INT , @MaPhong CHAR ( ), @MaDV CHAR ( ), @so TINYINT

AS

BEGIN

UPDATE ChiTietDichVuPhong

SET SoLuongDichVu = @so

WHERE MaHD = @Mahd AND MaPhong = @MaPhong AND MaDichVu = @MaDV

END

+ Tạo trigger là trg_afterupdateCTDVP:

CREATE TRIGGER trg_afterupdateCTDVP

ON dbo ChiTietDichVuPhong

AFTER UPDATE

AS

BEGIN

UPDATE HoaDon

SET TongTien = TongTien +

( ( SELECT SoLuongDichVu FROM inserted

WHERE MaHD = inserted MaHD and MaPhong =

inserted MaPhong )-( SELECT SoLuongDichVu FROM deleted

WHERE MaHD = deleted MaHD and MaPhong = deleted MaPhong ) )

*

( SELECT DonGiaDichVu

FROM DichVu JOIN inserted on DichVu MaDichVu = inserted MaDichVu )

FROM HoaDon JOIN inserted on HoaDon MaHD = inserted MaHD

END

Trang 16

- Trường hợp đổi phòng:

+ Cập nhật sự cố tại phòng đó vào bảng ChiTietSuCoPhatSinh nếu có bằng lệnh Insert Và cũng cần có 1 Trigger(trg_insertCTSCPS) để tránh lỗi Insert vào bảng như phần thêm dịch vụ tại bảng ChiTietDichVuPhong

+ Cập nhật lại HoaDon.TongTien

 Trigger trg_insertCTSCPS:

CREATE TRIGGER trg_insertCTSCPS

ON dbo ChiTietSuCoPhatSinh

For INSERT

AS

BEGIN

DECLARE @count INT 0

SELECT @count = Count (*) FROM inserted

WHERE EXISTS SELECT FROM CTHD

WHERE MaHD = inserted MaHD AND MaPhong =

inserted MaPhong )

IF ( @count = 0 )

BEGIN PRINT N'Không thêm được vì không có hóa đơn này hoặc phòng này trong hóa đơn'

ROLLBACK TRAN END

END

 Trigger trg_afterinsertCTSCPS

CREATE TRIGGER trg_afterinsertCTSCPS

ON dbo ChiTietSuCoPhatSinh

AFTER INSERT

AS

BEGIN

UPDATE HoaDon

SET TongTien = TongTien + ( SELECT SoLuongSuCo FROM inserted

WHERE MaHD = inserted MaHD and MaPhong = inserted MaPhong )* ( SELECT PhiPhatSinh FROM SuCoPhatSinh

join inserted on SuCoPhatSinh MaSuCo = inserted MaSuCo )

FROM HoaDon JOIN inserted on HoaDon MaHD = inserted MaHD

END

+ Tiếp theo ta cần phải thay đổi trạng thái từ 0 (đang thuê) của phòng đang dùng về -1 (dọn phòng, sửa chữa) Bằng cách execute usp_updateTTP(stored

procedure):

CREATE PROC usp_updateTTP

Trang 17

@MaPhong CHAR ( ), @TrangThai int

AS

BEGIN

UPDATE Phong

SET TrangThai = @TrangThai

WHERE MaPhong = @MaPhong

END

+ Chọn lại phòng với MaHD hiện tại (với thời gian vào được set là thời gian

đổi phòng)

Chức năng trả phòng: tính tổng tiền(tiền dịch vụ + tiền phòng + tiền phát sinh), ghi

nhận giờ ra, ghi nhận tiền nợ, chọn phương thức thanh toán, in hóa đơn

+ Phần tính tổng tiền sẽ được tự động tính nhờ trigger(phần trên)

+ Ghi nhận giờ ra, tiền nợ, chọn phương thức thanh toán sẽ sử dụng lệnh update thông thường

+ Phần in hóa đơn:

 Xuất tất cả thông tin của hóa đơn đó ra 1 bản biểu mẫu(làm sau) ,

tự động cập nhật lại trạng thái phòng về -1(trạng thái dọn-sửa chữa)

 Sau khi in hóa đơn sẽ cập nhật lại tình trạng hóa đơn từ 0(chưa thanh toán) thành 1(đã thanh toán)

Chức năng báo cáo : báo cáo doanh thu (ca, ngày, tháng), thông kê lương nhân viên Chức năng đăng nhập(Login): ghi nhận nhân viên, ca làm và thêm thông tin nhân

viên

- Login

GO

if ( OBJECT_DEFINITION ( 'ft_login' ) is not null) drop function ft_login ;

GO

Trang 18

CREATE FUNCTION ft_Login ( @taikhoan varchar ( 300 ), @matkhau varchar ( 300 )) RETURNS smallint

AS

BEGIN

if ( @taikhoan is null or @matkhau is null)

begin

return 1

end else begin

IF ( select MaNV from NhanVien where NhanVien TaiKhoan = @taikhoan and

NhanVien MatKhau = @matkhau ) is null

RETURN 3 ELSE BEGIN

RETURN ( select top ( ) MaNV from NhanVien where

NhanVien TaiKhoan = @taikhoan and NhanVien MatKhau = @matkhau order by MaNV )

end end return 1

end

- Thêm nhân viên:

GO

if ( OBJECT_DEFINITION ( 'ft_login' ) is not null) drop function ft_login ;

GO

CREATE FUNCTION ft_Login ( @taikhoan varchar ( 300 ), @matkhau varchar ( 300 )) RETURNS smallint

AS

BEGIN

if ( @taikhoan is null or @matkhau is null)

begin

return 1

end else begin

IF ( select MaNV from NhanVien where NhanVien TaiKhoan = @taikhoan and

NhanVien MatKhau = @matkhau ) is null

RETURN 3 ELSE BEGIN

RETURN ( select top ( ) MaNV from NhanVien where

NhanVien TaiKhoan = @taikhoan and NhanVien MatKhau = @matkhau order by MaNV )

end end return 1

end go

select from NhanVien

select dbo ft_Login ( 2 , 3 )

go

Trang 19

create proc pr_login @taikhoan varchar ( 300 ), @matkhau varchar ( 300 )

as

begin

declare @manhanvien smallint

set @manhanvien = dbo ft_Login ( @taikhoan , @matkhau )

declare @thoigian int

set @thoigian = DATENAME ( hour , getdate ())

print @thoigian

declare @maca char

declare @ngay date

set @ngay = GETDATE ()

print @ngay

if ( @thoigian > 5 and @thoigian < 13 )

begin

set @maca = 'N'

insert into BangCong ( MaNV , MaCa , Ngay )

values ( @manhanvien , @maca , @ngay )

end

else

if ( @thoigian >= 13 and @thoigian < 21 )

begin

set @maca = 'C'

insert into BangCong ( MaNV , MaCa , Ngay )

values ( @manhanvien , @maca , @ngay )

end else

begin

set @maca = 'D'

insert into BangCong ( MaNV , MaCa , Ngay )

values ( @manhanvien , @maca , @ngay )

end

End

- Xóa tài khoản nhân viên:

go

CREATE PROCEDURE pr_delete_nhanvien @Result int output , @Cur_PhanQuyen_ID

smallint , @manhanvien smallint

as

begin

if ( @cur_phanquyen_id = 1 )

begin

begin try

delete from NhanVien where @manhanvien = MaNV

set @Result = 1 thanh cong

end try begin catch

set @Result =- 1 that bai

Ngày đăng: 13/10/2021, 10:46

TỪ KHÓA LIÊN QUAN

w