Bối cảnh và vấn đề nghiên cứu

Báo cáo đồ án môn học Cơ sở dữ liệu với đề tài "Chương trình quản lý khách sạn" được thực hiện bởi nhóm sinh viên lớp 64PM1, Khoa Công nghệ Thông tin – Trường Đại học Xây dựng (Hà Nội, tháng 01/2023), dưới sự hướng dẫn của giảng viên Nguyễn Đình Anh. Nhóm nghiên cứu gồm ba thành viên: Nguyễn Công Bình (Nhóm trưởng), Nguyễn Tùng Sơn và Bùi Thị Hạnh.

Về bối cảnh thực tiễn, tác giả chỉ ra rằng cùng với sự phát triển của đời sống kinh tế - xã hội và ngành du lịch, nhu cầu tìm kiếm phòng nghỉ có chất lượng và dịch vụ tốt ngày càng phổ biến. Trước khi ứng dụng tin học hóa, các khâu nghiệp vụ tại khách sạn như cập nhật thông tin khách hàng, kiểm tra tình trạng phòng, tra cứu dịch vụ, quản lý thông tin nhân viên và lập hóa đơn thanh toán đều được thực hiện thủ công. Phương thức quản lý truyền thống này khiến cán bộ quản trị mất nhiều thời gian, công sức và gặp khó khăn trong việc tổng hợp số liệu kịp thời. Do đó, việc xây dựng một hệ thống phần mềm quản lý ứng dụng cơ sở dữ liệu là yêu cầu cấp thiết nhằm tin học hóa quy trình vận hành và nâng cao hiệu quả quản trị doanh nghiệp.

Mục tiêu và nhiệm vụ nghiên cứu của đồ án được xác định gồm:

  1. Xây dựng hệ thống quản lý cung cấp chính xác, nhanh chóng các thông tin về danh mục phòng và phương thức đặt phòng/hẹn phòng cho khách hàng.
  2. Tối ưu hóa quy trình nghiệp vụ nội bộ của khách sạn nhằm rút ngắn thời gian xử lý giao dịch giữa khách hàng và bộ phận quản lý.
  3. Phân tích, thiết kế và chuẩn hóa cơ sở dữ liệu quan hệ phục vụ 05 phân hệ nghiệp vụ chính: quản lý khách hàng, quản lý phòng, quản lý đặt phòng, quản lý nhân viên và quản lý dịch vụ (đồ ăn, đồ uống).
  4. Cài đặt hoàn chỉnh cơ sở dữ liệu trên hệ quản trị SQL Server thông qua việc áp dụng các hàm (Functions), bộ kích hoạt (Triggers) và thủ tục lưu trữ (Stored Procedures).
  5. Xây dựng ứng dụng giao diện người dùng trên nền tảng Java đồng bộ trực tiếp với cơ sở dữ liệu SQL Server.

Đối tượng nghiên cứu của đề tài là quy trình quản lý thông tin lưu trú và dịch vụ trong mô hình khách sạn quy mô vừa và nhỏ. Phạm vi nghiên cứu về mặt không gian và nghiệp vụ bao gồm các hoạt động diễn ra tại quầy lễ tân và bộ phận quản lý khách sạn (tiếp nhận thông tin khách, phân loại phòng, xử lý đặt/hẹn phòng, gọi món ăn/đồ uống, thanh toán và lập báo cáo thống kê doanh thu). Phạm vi thời gian tính toán chu kỳ đặt phòng trong hệ thống được xác định theo đơn vị ngày.

Cơ sở lý thuyết và phương pháp

Đồ án vận dụng các cơ sở lý thuyết và công nghệ chuyên ngành Công nghệ thông tin:

  • Khung lý thuyết cơ sở dữ liệu quan hệ và chuẩn hóa dữ liệu: Sử dụng mô hình thực thể - liên kết (Entity-Relationship Model) và quy trình chuẩn hóa dữ liệu về Dạng chuẩn 3 (3NF) nhằm loại bỏ các thuộc tính đa trị, phụ thuộc hàm bắc cầu và triệt tiêu dư thừa dữ liệu.
  • Hệ quản trị cơ sở dữ liệu: Microsoft SQL Server, sử dụng ngôn ngữ T-SQL để định nghĩa cấu trúc bảng (DDL), thiết lập ràng buộc toàn vẹn (Constraints: PRIMARY KEY, FOREIGN KEY, CHECK, UNIQUE, NOT NULL, DEFAULT), xây dựng hàm kiểm tra định dạng dữ liệu, lập trình trigger kiểm soát logic nghiệp vụ và viết các stored procedure xử lý giao dịch.
  • Công nghệ phát triển phần mềm: Ngôn ngữ lập trình Java (sử dụng thư viện giao diện đồ họa Java Swing/GUI) kết nối với cơ sở dữ liệu SQL Server qua JDBC để thực hiện đồng bộ dữ liệu hai chiều.

Phương pháp nghiên cứu được triển khai bao gồm:

  • Phương pháp phân tích và mô hình hóa: Khảo sát các yêu cầu thực tế của nghiệp vụ khách sạn, trích xuất các thực thể dữ liệu độc lập, phân tích thuộc tính và xác định các mối quan hệ (1-1, 1-N, N-N).
  • Phương pháp chuẩn hóa cấu trúc: Tiến hành phân rã các quan hệ phức tạp và thuộc tính đa trị (như thuộc tính trạng thái phòng theo ngày) để hình thành các bảng quan hệ đạt chuẩn 3NF.
  • Phương pháp thực nghiệm lập trình: Viết mã lệnh T-SQL cài đặt trực tiếp trên hệ thống SQL Server với tên cơ sở dữ liệu QLKS, đồng thời phát triển các form giao diện người dùng trên Java để kiểm thử việc thực thi các stored procedure và trigger.
  • Nguồn dữ liệu: Dữ liệu thực nghiệm do nhóm tác giả tự thiết lập bao gồm hồ sơ nhân viên, danh mục loại phòng, phòng, khách hàng mẫu, danh mục đồ ăn, đồ uống và các bản ghi giao dịch đặt phòng, gọi món thử nghiệm.

Thiết kế và triển khai

Hệ thống cơ sở dữ liệu QLKS được thiết kế gồm 11 bảng quan hệ sau quá trình chuẩn hóa 3NF, liên kết chặt chẽ thông qua các khóa ngoại:

Tên bảng Chức năng lưu trữ Khóa chính (Primary Key) Khóa ngoại (Foreign Key)
tbl_nhanvien Thông tin nhân sự maNV Không
tbl_taikhoan Tài khoản đăng nhập của nhân viên maNV maNV $\rightarrow$ tbl_nhanvien
tbl_loaiphong Phân loại và đơn giá phòng maLoaiPhong Không
tbl_phong Danh sách phòng vật lý maPhong maLoaiPhong $\rightarrow$ tbl_loaiphong
tbl_trangthaiphong Tình trạng phòng theo từng ngày (maPhong, ngay) maPhong $\rightarrow$ tbl_phong
tbl_khachhang Hồ sơ thông tin khách hàng maKH Không
tbl_doAn Danh mục món ăn và đơn giá maDA Không
tbl_doUong Danh mục đồ uống và đơn giá maDU Không
tbl_dangkyDoAn Nhật ký gọi đồ ăn của phòng (ngay, maPhong, maDA) maPhong $\rightarrow$ tbl_phong, maDA $\rightarrow$ tbl_doAn
tbl_dangkyDoUong Nhật ký gọi đồ uống của phòng (ngay, maPhong, maDU) maPhong $\rightarrow$ tbl_phong, maDU $\rightarrow$ tbl_doUong
tbl_datphong Giao dịch thuê/hẹn phòng (maKH, maNV, maPhong, ngayDat) maKH $\rightarrow$ tbl_khachhang, maNV $\rightarrow$ tbl_nhanvien, maPhong $\rightarrow$ tbl_phong

Hệ thống triển khai các cơ chế kiểm soát dữ liệu tại tầng cơ sở dữ liệu:

  • Hàm người dùng (User-defined Function): Hàm funcSDT(@SoDT) thực hiện kiểm tra chuỗi số điện thoại nhập vào, trả về giá trị 1 nếu chuỗi rỗng hoặc có độ dài đúng 10 hoặc 11 chữ số, trả về 0 nếu không hợp lệ.
  • Bộ kích hoạt (Triggers):
    • Trigger addAccount trên bảng tbl_taikhoan (loại INSTEAD OF INSERT): kiểm soát nguyên tắc mỗi nhân viên chỉ được cấp duy nhất 1 tài khoản, tên tài khoản (taiKhoan) không được trùng lặp.
    • Trigger addphong trên bảng tbl_phong (loại INSTEAD OF INSERT): kiểm tra sự tồn tại của loại phòng, kiểm tra mã phòng không trùng lặp và tự động chèn bản ghi trạng thái 'trong' vào bảng tbl_trangthaiphong tương ứng với ngày hiện tại (GETDATE()).
  • Thủ tục lưu trữ (Stored Procedures): Hệ thống xây dựng 28 thủ tục thực thi các nhóm chức năng:
    • Quản lý danh mục và người dùng: addNhanVien, updateNhanVien, checkLogin, addLoaiPhong, updateLoaiPhong, addKhachHang, updateKhachHang, addDoAn, updateDoAn, addDoUong, updateDoUong.
    • Xử lý nghiệp vụ đặt/hẹn phòng: updateData (tự động chuyển trạng thái phòng và lịch hẹn khi đến ngày), uPhongTrong, uPhongTrongs (duyệt và thêm trạng thái trống cho tất cả các phòng), datphong (xử lý logic kiểm tra phòng trống, phòng đang hẹn hoặc đang đặt để cho phép khách đặt ngay hoặc hẹn ngày trong tương lai).
    • Quản lý dịch vụ và thanh toán: datDoAn, datDoUong (tự động cộng dồn số lượng nếu cùng phòng gọi cùng món trong ngày), thanhToan (cập nhật trạng thái thanhtoan = 1 khi đến hoặc quá ngày trả).
    • Kết xuất hóa đơn và báo cáo: hoaDonDoAn, hoaDonDoUong, hoaDonPhong, hoaDonTheoPhong (tổng hợp tiền phòng, tiền đồ ăn và tiền đồ uống), hoaDonTheoKhachHang, doanhThu (tính tổng doanh thu phòng và dịch vụ trong khoảng thời gian từ ngày bắt đầu đến ngày kết thúc).
    • Thống kê nâng cao: khachHangDatPhongMax (top 3 khách hàng đặt/hẹn phòng nhiều nhất), khachHangQH và chiTietKhachHangQH (khách hàng quá hạn thanh toán), khachHangHenPhong và chiTietKhachHangHenPhong (khách hàng đang có lịch hẹn), tkKhachHangDatPhongTheoMY (thống kê lượng khách theo tháng/năm), phongDatMax (top 3 phòng được thuê nhiều nhất), doAnDatMax (top 3 món ăn được gọi nhiều nhất), doUongDatMax (top 3 đồ uống được gọi nhiều nhất).

Ứng dụng Java được xây dựng đồng bộ với hệ thống cơ sở dữ liệu thông qua 10 màn hình chức năng (Forms): Form đăng nhập, Form đăng ký tài khoản, Menu chính, Form thông tin tài khoản, Form quản lý đồ ăn/đồ uống/loại phòng, Form quản lý phòng, Form quản lý nhân viên (phân quyền quản trị viên thông qua trường chucVu), Form quản lý khách hàng, Form trạng thái phòng theo ngày, Form đặt phòng (tích hợp chức năng tìm kiếm, đặt phòng, hẹn phòng, trả phòng và hiển thị tổng tiền thanh toán), Form đặt đồ ăn/đồ uống và Form báo cáo - thống kê.

Nội dung chính theo từng chương

Lời mở đầu, Mục tiêu và ý nghĩa của Đồ án hệ thống quản lý Khách sạn, Mô tả hệ thống

Tác giả trình bày tính cấp thiết của việc áp dụng công nghệ thông tin trong kinh doanh khách sạn nhằm thay thế phương thức quản lý sổ sách thủ công. Xác định mục tiêu phần mềm là cầu nối cung cấp thông tin phòng nhanh chóng cho khách hàng và hỗ trợ ban quản lý khách sạn kiểm soát 05 mảng nghiệp vụ: khách hàng, phòng lưu trú, giao dịch đặt phòng, nhân sự và dịch vụ ăn uống.

Phân tích dữ liệu

Nội dung phần này mô tả chi tiết 07 thực thể dữ liệu ban đầu cùng danh sách các thuộc tính cấu thành:

  1. Thực thể Nhân viên: Mã nhân viên, Tên nhân viên, Ngày sinh, Giới tính, CMT (Chứng minh thư/CCCD), SDT (Số điện thoại).
  2. Thực thể Tài khoản: User (Tên tài khoản), Pass (Mật khẩu).
  3. Thực thể Loại phòng: Mã loại phòng, Mô tả, Giá.
  4. Thực thể Phòng: Mã phòng, Tên phòng, Mô tả, Số người tối đa, Trạng thái phòng (theo ngày).
  5. Thực thể Khách hàng: Mã khách hàng, Tên khách hàng, Ngày sinh, Giới tính, CMT, SDT.
  6. Thực thể Đồ ăn: Mã đồ ăn, Tên đồ ăn, Giá.
  7. Thực thể Đồ uống: Mã đồ uống, Tên đồ uống, Giá.

Mô hình hóa các thực thể liên kết về dạng chuẩn 3

Nhóm tác giả phân tích và xử lý các mối liên kết giữa các thực thể nhằm đạt dạng chuẩn 3 (3NF):

  • Quan hệ Nhân viên - Tài khoản: Quan hệ 1-1, bảng tbl_taikhoan nhận maNV vừa là khóa chính vừa là khóa ngoại tham chiếu đến tbl_nhanvien.
  • Thuộc tính đa trị của Phòng: Do trạng thái phòng biến đổi theo thời gian, thuộc tính này được tách thành bảng riêng tbl_trangthaiphong với khóa chính phức hợp gồm (maPhong, ngay).
  • Quan hệ Loại phòng - Phòng: Quan hệ 1-N, tbl_phong chứa khóa ngoại maLoaiPhong.
  • Quan hệ Nhân viên - Khách hàng - Phòng: Liên kết ba bên được mô hình hóa thành bảng giao dịch tbl_datphong với khóa chính gồm bốn thuộc tính (maKH, maNV, maPhong, ngayDat).
  • Quan hệ Phòng - Đồ ăn và Phòng - Đồ uống: Quan hệ N-N được tách thành hai bảng trung gian tbl_dangkyDoAn (khóa chính (ngay, maPhong, maDA)) và tbl_dangkyDoUong (khóa chính (ngay, maPhong, maDU)).

Mô hình dữ liệu quan hệ quản lý khách sạn

Tổng hợp danh sách 11 lược đồ bảng quan hệ sau chuẩn hóa, xác định rõ cấu trúc các trường và các mối liên kết khóa chính - khóa ngoại phục vụ việc chuyển đổi sang mô hình vật lý.

Thiết kế cơ sở dữ liệu trong SQL Server

Đây là phần trọng tâm của đồ án, chứa toàn bộ mã nguồn T-SQL triển khai thực tế:

  • Tạo lập cơ sở dữ liệu QLKS.
  • Cài đặt hàm funcSDT kiểm tra định dạng số điện thoại.
  • Thiết kế DDL cho 11 bảng dữ liệu kèm theo các ràng buộc kiểm tra toàn vẹn: ràng buộc độ tuổi khách hàng và nhân viên phải từ 18 tuổi trở lên (DATEDIFF(YEAR, ngaySinh, GETDATE()) >= 18), giới tính nhận giá trị 'Nam' hoặc 'Nu', giá phòng và dịch vụ phải lớn hơn 0, trạng thái đặt phòng chỉ nhận giá trị 'dat' hoặc 'hen', trạng thái phòng nhận giá trị 'trong', 'dat', hoặc 'hen'.
  • Thiết lập hệ thống khóa ngoại bảo đảm toàn vẹn tham chiếu giữa các bảng.
  • Xây dựng mã nguồn chi tiết cho 2 trigger (addAccount, addphong) và 28 stored procedure phục vụ quản lý dữ liệu, kiểm tra đăng nhập, đặt phòng, gọi dịch vụ, in hóa đơn chi tiết từng khoản mục và tổng hợp doanh thu/thống kê top 3.

Cài đặt chương trình Java đồng bộ với cơ sở dữ liệu SQL

Trình bày thiết kế và nguyên lý hoạt động của các giao diện người dùng trên Java:

  • Chi tiết hóa luồng xử lý của từng form: điều kiện kích hoạt các nút bấm (Tìm kiếm, Thêm, Sửa, Lưu, Đặt phòng, Trả phòng, Refresh), cơ chế kiểm tra dữ liệu đầu vào trên giao diện trước khi gửi tham số vào Stored Procedure.
  • Phân quyền người dùng: chỉ tài khoản có quyền quản trị (chucVu = 1) mới được phép thêm, sửa thông tin tại Form quản lý nhân viên.
  • Cơ chế ánh xạ dữ liệu: khi người dùng nhấp chọn một dòng trên bảng dữ liệu (JTable), thông tin chi tiết sẽ tự động hiển thị lên các ô nhập liệu (JTextField) tương ứng.

Nhận xét về phần cơ sở dữ liệu

Đánh giá khách quan kết quả đạt được và chỉ ra các hạn chế tồn tại trong giải pháp thiết kế:

  • Ưu điểm: Cấu trúc cơ sở dữ liệu đáp ứng đầy đủ các nghiệp vụ khách sạn cơ bản; các câu truy vấn tập trung xử lý dữ liệu theo trục thời gian (ngày); kiểm soát dữ liệu chặt chẽ từ tầng DBMS nhờ trigger và stored procedure.
  • Hạn chế và ý tưởng cải tiến: Hệ thống mới chỉ tính toán thời gian thuê phòng và dịch vụ theo đơn vị ngày, chưa quản lý chi tiết theo giờ/phút/giây; chưa có phân hệ tự động xử lý các tình huống bảo trì phòng (đột xuất hoặc định kỳ).

Kết quả và đóng góp

Về kết quả kỹ thuật, đồ án đã hoàn thành:

  1. Thiết kế hoàn chỉnh cơ sở dữ liệu QLKS: Xây dựng 11 bảng quan hệ đạt chuẩn 3NF, loại bỏ hoàn toàn các thuộc tính đa trị và bất thường dư thừa dữ liệu.
  2. Cài đặt đầy đủ các ràng buộc nghiệp vụ bằng T-SQL:
    • 01 hàm người dùng (funcSDT).
    • 02 triggers kiểm soát việc tạo tài khoản và tự động khởi tạo trạng thái phòng.
    • 28 stored procedures xử lý trọn vẹn chu trình nghiệp vụ từ quản lý danh mục, xử lý đặt/hẹn phòng, tính toán hóa đơn đa dịch vụ đến kết xuất báo cáo doanh thu và thống kê danh sách top 3.
  3. Phát triển giao diện ứng dụng Java: Xây dựng thành công 10 biểu mẫu giao diện tương tác, đồng bộ chính xác với cơ sở dữ liệu SQL Server thông qua các lệnh gọi thủ tục lưu trữ.

Về giải pháp và đóng góp của đề tài:

  • Đồ án đã giải quyết được bài toán quản lý trạng thái phòng biến đổi theo thời gian bằng cách tách riêng bảng tbl_trangthaiphong theo cặp khóa (maPhong, ngay).
  • Xây dựng thuật toán kiểm tra tính khả dụng của phòng trong thủ tục datphong, cho phép hệ thống phân biệt rõ ràng giữa hành động "đặt phòng" (áp dụng cho ngày hiện tại) và "hẹn phòng" (áp dụng cho ngày trong tương lai), đồng thời kiểm tra khoảng trống thời gian giữa các lần thuê để tránh tình trạng trùng lặp lịch đặt.
  • Đóng gói toàn bộ logic kiểm tra và xử lý tính toán tiền phòng, tiền đồ ăn, tiền đồ uống vào các stored procedure trên hệ quản trị cơ sở dữ liệu, giúp giảm tải xử lý tính toán cho ứng dụng giao diện phía client.

Hạn chế và hướng nghiên cứu tiếp

Dựa trên các hạn chế được nhóm tác giả tự đánh giá trong văn bản, đồ án còn tồn tại hai vấn đề nghiệp vụ chính cùng hướng phát triển đề xuất:

  1. Đơn vị quản lý thời gian lưu trú:

    • Hạn chế: Toàn bộ hệ thống quản lý đặt phòng, hẹn phòng và sử dụng dịch vụ ăn uống hiện mới chỉ tính toán theo đơn vị ngày (DATE). Hệ thống chưa hỗ trợ phân chia khung giờ thuê linh hoạt.
    • Hướng cải tiến: Nâng cấp hệ thống để tiếp nhận và xử lý dữ liệu thời gian chi tiết theo giờ, phút, giây (DATETIME). Điều này giúp khách sạn triển khai được nghiệp vụ cho thuê phòng theo giờ (ví dụ: khách thuê trong 3 tiếng, sau đó cộng thêm thời gian dọn dẹp phòng là có thể tiếp tục cho lượt khách tiếp theo thuê), tối ưu hóa công suất khai thác phòng và gia tăng nguồn thu.
  2. Quản lý quy trình bảo trì phòng:

    • Hạn chế: Cơ sở dữ liệu chưa có bảng và trường dữ liệu để theo dõi các trường hợp phòng cần bảo trì đột xuất hoặc bảo trì định kỳ.
    • Hướng cải tiến: Bổ sung cơ chế xử lý phòng bảo trì:
      • Nếu phòng đang trống: chuyển trạng thái sang bảo trì bình thường.
      • Nếu phòng đang có khách đặt: hệ thống tự động cập nhật ngày trả phòng về ngày hiện tại thực hiện bảo trì.
      • Nếu phòng đã có khách hẹn đặt trước: kích hoạt quy trình điều chuyển sang phòng khác cùng loại hoặc hủy/cập nhật lại ngày đặt nếu không còn phòng thay thế.
      • Tính toán thời gian dự kiến hoàn thành bảo trì để tự động khôi phục trạng thái phòng trống sớm nhất.

Giá trị tham khảo

Đồ án là tài liệu học thuật và kỹ thuật phù hợp cho:

  • Sinh viên chuyên ngành Công nghệ thông tin, Kỹ thuật phần mềm và Hệ thống thông tin đang học tập hoặc làm đồ án môn học Cơ sở dữ liệu, Hệ quản trị cơ sở dữ liệu hoặc Lập trình ứng dụng Java kết nối cơ sở dữ liệu.
  • Người học cần tài liệu tham khảo thực tế về quy trình thiết kế cơ sở dữ liệu hoàn chỉnh từ khâu khảo sát thực tế, lập mô hình ER, chuẩn hóa dữ liệu 3NF đến việc viết mã lệnh SQL Server (Trigger, Stored Procedure, Function).

Các nội dung có giá trị tham khảo chuyên sâu trong văn bản gồm:

  • Cách thức phân rã thuộc tính đa trị trạng thái phòng theo ngày để đưa bảng dữ liệu về dạng chuẩn 3 (3NF).
  • Kỹ thuật viết Stored Procedure phức tạp có kiểm tra đa điều kiện đầu vào, trả về mã lỗi (ketqua) dưới dạng số nguyên để ứng dụng client dễ dàng bắt lỗi và hiển thị thông báo.
  • Thuật toán kết hợp lồng ghép giữa Stored Procedure in hóa đơn tổng hợp (hoaDonTheoPhong) vào bên trong Stored Procedure tính hóa đơn cho từng khách hàng (hoaDonTheoKhachHang) thông qua con trỏ vòng lặp WHILE.

Câu hỏi thường gặp

1. Hệ thống xử lý như thế nào đối với ràng buộc độ tuổi của nhân viên và khách hàng trong cơ sở dữ liệu?
Trong bảng tbl_nhanvien và tbl_khachhang, tác giả thiết lập ràng buộc kiểm tra CHECK sử dụng hàm tính khoảng cách năm: CHECK(DATEDIFF(YEAR, ngaySinh, CAST(GETDATE() AS DATE)) >= 18). Đồng thời, tại các Stored Procedure addNhanVien, updateNhanVien, addKhachHang, updateKhachHang, hệ thống đều kiểm tra điều kiện này và trả về mã kết quả -2 nếu nhân viên hoặc khách hàng chưa đủ 18 tuổi.

2. Làm thế nào để hệ thống ngăn chặn một nhân viên sở hữu nhiều hơn một tài khoản đăng nhập?
Hệ thống xử lý ràng buộc này ở hai tầng:

  • Tầng cấu trúc: Khóa chính của bảng tbl_taikhoan chính là maNV và đồng thời là khóa ngoại tham chiếu đến tbl_nhanvien.maNV, thiết lập quan hệ 1-1.
  • Tầng logic: Trigger addAccount kiểm tra bảng tbl_taikhoan, nếu mã nhân viên (maNV) đã tồn tại trong bảng tài khoản thì câu lệnh chèn sẽ bị chặn lại và trả về mã lỗi -1.

3. Quy tắc nghiệp vụ khi khách hàng thực hiện đặt phòng hoặc hẹn phòng trong Stored Procedure datphong được quy định ra sao?
Thủ tục datphong quy định: Ngày đặt phải từ ngày hiện tại trở đi, ngày trả phải sau ngày đặt ít nhất 1 ngày (ngayTra > ngayDat). Nếu ngày đặt trùng với ngày hiện tại (GETDATE()), giao dịch được lưu với trạng thái 'dat' và cập nhật trạng thái phòng thành 'dat'. Nếu ngày đặt lớn hơn ngày hiện tại, giao dịch được lưu với trạng thái 'hen' và cập nhật trạng thái phòng thành 'hen'. Đối với phòng đang có khách đặt hoặc hẹn, hệ thống kiểm tra mốc thời gian trả phòng gần nhất (timedatmax) và mốc thời gian hẹn nhỏ nhất (timehenmin), nếu khoảng thời gian khách muốn đặt nằm gọn trước lịch hẹn hoặc sau lịch trả hiện tại thì mới cho phép thực hiện.

4. Dịch vụ ăn uống được tính toán và lưu vết như thế nào khi một phòng gọi cùng một món ăn nhiều lần trong cùng một ngày?
Trong Stored Procedure datDoAn (và tương tự với datDoUong), hệ thống kiểm tra sự tồn tại của bản ghi trong bảng tbl_dangkyDoAn theo bộ ba (ngay, maPhong, maDA). Nếu trong cùng một ngày, cùng một phòng đã đăng ký món ăn đó, hệ thống không tạo dòng mới mà thực hiện lệnh UPDATE cộng dồn số lượng: SET soLuong = soLuong + @soluong.

5. Tổng chi phí một phòng phải thanh toán được tính toán dựa trên các khoản mục nào trong Stored Procedure hoaDonTheoPhong?
Thủ tục hoaDonTheoPhong tính tổng số tiền bao gồm ba thành phần:

  • Tiền phòng: Tính bằng đơn giá loại phòng nhân với số ngày lưu trú c.gia * datediff(day, a.ngayDat, a.ngayTra).
  • Tiền đồ ăn: Tính bằng tổng số lượng món ăn đã gọi trong khoảng thời gian từ ngayDat đến ngayTra nhân với đơn giá món ăn.
  • Tiền đồ uống: Tính bằng tổng số lượng đồ uống đã gọi trong khoảng thời gian từ ngayDat đến ngayTra nhân với đơn giá đồ uống.
    Hàm trả về tổng giá trị @tienPhong + @tienDoAn + @tienDoUong.

Kết luận

Báo cáo đồ án "Chương trình quản lý khách sạn" của nhóm sinh viên Trường Đại học Xây dựng đã giải quyết hoàn chỉnh bài toán thiết kế cơ sở dữ liệu quan hệ đạt dạng chuẩn 3 cho hệ thống quản lý lưu trú và dịch vụ ăn uống. Đề tài thể hiện khối lượng công việc kỹ thuật đáng kể thông qua việc cài đặt 11 bảng dữ liệu, 02 trigger và 28 stored procedure trên hệ quản trị SQL Server, kết hợp giao diện đồ họa Java đáp ứng đầy đủ các chức năng nghiệp vụ thực tế. Các giải pháp kiểm soát toàn vẹn dữ liệu từ tầng cơ sở dữ liệu cùng các định hướng mở rộng quản lý theo giờ và quy trình bảo trì phòng là nguồn tài liệu tham khảo hữu ích cho sinh viên chuyên ngành Công nghệ thông tin.