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

Bối cảnh thực tiễn và lý do chọn đề tài

Trong đời sống hiện đại, công nghệ đóng vai trò then chốt và ngày càng được tích hợp sâu rộng vào quy trình vận hành, quản trị của ngành khách sạn. Việc ứng dụng các giải pháp công nghệ giúp các đơn vị kinh doanh tinh gọn hóa quy trình, tối ưu hiệu suất làm việc và nâng cao chất lượng dịch vụ khách hàng. Qua đó, doanh nghiệp có thể cắt giảm chi phí vận hành, gia tăng doanh thu và đảm bảo tính bền vững trong kinh doanh.

Xuất phát từ thực tế đó, nhóm nghiên cứu tại Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh (Khoa Công nghệ Thông tin) đã thực hiện đề tài đồ án môn học: "Design Data Structures, Algorithms and Build a Hotel Management Software" (Thiết kế cấu trúc dữ liệu, giải thuật và xây dựng phần mềm quản lý khách sạn). Đề tài hướng tới việc giải quyết các nhược điểm của phương thức quản lý thủ công truyền thống trên sổ sách giấy tờ—vốn gây lãng phí nhiều thời gian, chiếm dụng không gian lưu trữ, tiềm ẩn nguy cơ thất lạc dữ liệu, đồng thời tiêu tốn nhiều nhân lực và chi phí.

Mục tiêu và nhiệm vụ của đề tài

Đề tài đặt ra các mục tiêu và nhiệm vụ trọng tâm sau:

  1. Nghiên cứu, thiết kế và hiện thực hóa các cấu trúc dữ liệu động (danh sách liên kết đơn, danh sách đa liên kết) cùng các thuật toán thao tác dữ liệu (thêm, xóa, tìm kiếm, sắp xếp) bằng ngôn ngữ lập trình C++.
  2. Xây dựng phần mềm quản lý khách sạn hoàn chỉnh trên giao diện console, đáp ứng đầy đủ quy trình quản lý con người và cơ sở vật chất phòng ốc.
  3. Hiện thực hóa các phân hệ chức năng theo phân quyền:
    • Đăng nhập hệ thống: Cho phép nhân viên và quản lý truy cập theo tài khoản.
    • Phân hệ Giám đốc (Manager): Quản lý danh sách tài khoản quản lý, quản lý toàn bộ hồ sơ nhân viên (thêm, sửa, xóa, sắp xếp), theo dõi tổng doanh thu khách sạn.
    • Phân hệ Lễ tân (Receptionist): Quản lý trạng thái phòng (phòng trống, phòng đã đặt, phòng đang thuê), thực hiện thủ tục nhận phòng (check-in), đặt phòng trước (reserve), trả phòng (check-out) và làm mới dữ liệu phòng (reset).
    • Phân hệ Nhân viên bảo vệ (Guard) và các nhân viên khác: Tra cứu thông tin cá nhân.
    • Phân hệ Nhân viên dịch vụ (Service Staff): Cung cấp và ghi nhận việc sử dụng các dịch vụ tiện ích của khách lưu trú để tính toán chi phí.
  4. Xây dựng cơ chế lưu trữ bền vững (persistent storage) thông qua việc đọc/ghi tập tin văn bản (text file), tích hợp trình kiểm tra xác nhận lưu file (save file checker) nhằm tránh mất mát dữ liệu.

Đối tượng, phạm vi và kế hoạch thực hiện

  • Đối tượng nghiên cứu: Các cấu trúc dữ liệu trừu tượng (Linked List, Multi-Linked List), các giải thuật xử lý dữ liệu và mô hình quản lý thông tin khách sạn (nhân viên, phòng ở, dịch vụ, doanh thu).
  • Phạm vi áp dụng: Hệ thống phần mềm quản lý khách sạn thử nghiệm dạng console, thực hiện trong khuôn khổ môn học Cấu trúc dữ liệu và Giải thuật, học kỳ 1 năm học 2023–2024 (tháng 12/2023) tại Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh.
  • Giảng viên hướng dẫn: PGS. Hoàng Văn Dũng.
  • Kế hoạch triển khai: Đồ án được thực hiện theo lịch trình 4 tuần trong tháng 11/2023:
    • Tuần 1 (06/11 - 12/11/2023): Thiết kế mức khung nhìn (view level), mức logic (logical level) và xây dựng sơ đồ hệ thống.
    • Tuần 2 (13/11 - 19/11/2023): Phân chia công việc, lập trình mã nguồn, tìm hiểu nghiệp vụ phần mềm trên Internet.
    • Tuần 3 (20/11 - 26/11/2023): Lập trình hoàn thiện, viết báo cáo, làm slide thuyết trình và sửa lỗi (fix bugs).
    • Tuần 4 (27/11/2023): Nộp đồ án hoàn chỉnh.

Bảng phân công nhiệm vụ và mức độ hoàn thành của các thành viên Nhóm 10:

STT Mã số sinh viên Họ và tên Nhiệm vụ đảm nhiệm Tỷ lệ hoàn thành
1 22110048 Nguyễn Hoàng Lâm Thiết kế view level, thiết kế logical level, viết mã nguồn, viết báo cáo 100%
2 22110060 Nguyễn Tấn Phát (Trưởng nhóm) Thiết kế view level, xây dựng sơ đồ hệ thống, viết mã nguồn, viết báo cáo 100%
3 22110080 Lý Đăng Triều Thiết kế logical level, viết mã nguồn, sửa lỗi (debug), làm bài thuyết trình 100%

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

Khung lý thuyết cấu trúc dữ liệu và giải thuật

Môn học Cấu trúc dữ liệu và Giải thuật cung cấp các khái niệm trừu tượng phục vụ việc tổ chức, lưu trữ và thao tác trên dữ liệu. Đề tài vận dụng các lý thuyết nền tảng bao gồm:

  • Các cấu trúc dữ liệu cơ bản: Danh sách (Lists), Ngăn xếp (Stacks), Hàng đợi (Queues), Cây (Trees), Bảng băm (Hash tables).
  • Cấu trúc dữ liệu Danh sách liên kết (Linked List): Là cấu trúc cho phép lưu trữ các phần tử tuần tự thông qua các nút (Node). Mỗi nút bao gồm thành phần dữ liệu (element/data) và con trỏ liên kết (Next) trỏ tới phần tử kế tiếp. Danh sách được quản lý thông qua con trỏ đầu danh sách (Head). Các hàm cơ bản gồm:
    • Chèn (Insertion): Chèn vào đầu danh sách, chèn vào cuối danh sách, chèn sau một nút xác định.
    • Xóa (Removing): Xóa nút đầu, xóa nút cuối, xóa nút sau một vị trí xác định.
    • Tìm kiếm (Searching): Duyệt và tìm kiếm nút thỏa mãn điều kiện.
  • Cấu trúc Danh sách đa liên kết (Multi-Linked List): Là cấu trúc mở rộng trong đó một phần tử có thể tham gia vào nhiều danh sách liên kết khác nhau hoặc chứa nhiều con trỏ liên kết (như con trỏ ngược - back-pointers) nhằm mô hình hóa mối quan hệ đa chiều giữa các thực thể (ví dụ: liên kết giữa phòng ở và các dịch vụ đi kèm).

Phương pháp nghiên cứu và công nghệ sử dụng

  • Phương pháp thiết kế hệ thống: Phân tích yêu cầu nghiệp vụ khách sạn, mô hình hóa dữ liệu thành các cấu trúc struct trong C++, phân cấp quyền hạn theo mô hình chức năng.
  • Ngôn ngữ lập trình: C++.
  • Thư viện chuẩn sử dụng: <iostream>, <string>, <fstream>, <sstream> phục vụ nhập xuất console và xử lý tập tin văn bản.
  • Nguồn tài liệu tham khảo chính:
    1. Bài giảng môn học Cấu trúc dữ liệu và Giải thuật (Chương 2, Chương 3).
    2. Mô hình giao diện và quy trình nghiệp vụ phần mềm quản lý khách sạn EzCloudhotel.

Thiết kế và triển khai hệ thống

Thiết kế cấu trúc dữ liệu (Data Structures)

Hệ thống sử dụng 3 cấu trúc dữ liệu node cơ bản để quản lý các thực thể:

// 1. Node lưu thông tin tài khoản Giám đốc (NodeGD)
struct NodeGD {
    string username;
    string password;
    NodeGD* next;
};

// 2. Node lưu thông tin hồ sơ nhân viên (NodeNV)
struct NodeNV {
    string ID;
    string name;
    string password;
    string address;
    int age;
    string gender;
    string dayJoined;
    NodeNV* next;
};

// 3. Node lưu thông tin phòng khách sạn (NodeRoom)
struct NodeRoom {
    string roomID;
    string roomType;
    string status; // "0": empty, "1": rented, "2": booked
    string dayBegin;
    string dayEnd;
    float money;
    NodeRoom* next;
};

Bảng mô tả ý nghĩa các trường dữ liệu:

Cấu trúc Tên trường Kiểu dữ liệu Ý nghĩa
NodeGD username string Tên đăng nhập của tài khoản quản lý/giám đốc
password string Mật khẩu tài khoản quản lý
next NodeGD* Con trỏ liên kết đến node quản lý kế tiếp
NodeNV ID string Mã định danh nhân viên
name string Họ và tên nhân viên
password string Mật khẩu truy cập hệ thống
address string Địa chỉ cư trú
age int Tuổi của nhân viên
gender string Giới tính
dayJoined string Ngày bắt đầu vào làm việc
next NodeNV* Con trỏ liên kết đến node nhân viên kế tiếp
NodeRoom roomID string Mã số phòng
roomType string Loại phòng (phòng đơn / phòng đôi)
status string Trạng thái phòng: 0 (trống), 1 (đang thuê), 2 (đã đặt)
dayBegin string Ngày bắt đầu nhận phòng / đặt phòng
dayEnd string Ngày kết thúc lưu trú / trả phòng
money float Tổng số tiền tích lũy của phòng (tiền phòng + tiền dịch vụ)
next NodeRoom* Con trỏ liên kết đến node phòng kế tiếp

Hiện thực hóa các thuật toán thao tác danh sách liên kết

Các thuật toán cốt lõi được cài đặt trực tiếp trên danh sách liên kết quản lý (LinkedListGD):

// Thêm quản lý vào đầu danh sách
void addFirst(string username, string password) {
    NodeGD* temp = new NodeGD{ username, password, head };
    head = temp;
    total++;
}

// Thêm quản lý vào cuối danh sách
void addLast(string username, string password) {
    NodeGD* temp = new NodeGD{ username, password, nullptr };
    if (head == nullptr) {
        head = temp;
    } else {
        NodeGD* move = head;
        while (move->next != nullptr) {
            move = move->next;
        }
        move->next = temp;
    }
    total++;
}

// Thêm quản lý vào vị trí pos bất kỳ trong danh sách
void addItem(int pos, const string& username, const string& password) {
    if (pos <= 0) {
        addFirst(username, password);
    } else if (pos >= total) {
        addLast(username, password);
    } else {
        NodeGD* temp = new NodeGD{ username, password, nullptr };
        NodeGD* move = head;
        for (int i = 0; i < pos - 1; i++) {
            move = move->next;
        }
        temp->next = move->next;
        move->next = temp;
        total++;
    }
}

// Xóa quản lý tại vị trí pos
void deleteItem(int pos) {
    if (pos < 0 || pos >= total) {
        cout << "Invalid position for deletion" << endl;
        return;
    }
    if (pos == 0) {
        NodeGD* temp = head;
        head = head->next;
        delete temp;
        total--;
    } else {
        NodeGD* current = head;
        for (int i = 0; i < pos - 1; i++) {
            current = current->next;
        }
        NodeGD* temp = current->next;
        current->next = temp->next;
        delete temp;
        total--;
    }
}

// Giải phóng toàn bộ bộ nhớ danh sách liên kết
void FreeMemory() {
    NodeGD* current = head;
    NodeGD* next;
    while (current != nullptr) {
        next = current->next;
        delete current;
        current = next;
    }
    head = nullptr;
    total = 0;
}

// Đọc dữ liệu từ file text vào danh sách liên kết
bool ReadFileToLinkedList(LinkedListGD& GiamDocList) {
    ifstream ifs("manager.txt");
    if (!ifs) {
        cerr << "Can't open file!\n";
        return false;
    }
    string line;
    while (getline(ifs, line)) {
        istringstream iss(line);
        string username, password;
        if (iss >> username >> password) {
            // Nạp dữ liệu vào node
        }
    }
    return true;
}

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

Phần A: Lý do chọn đề tài và giao diện dự kiến (Reason for choosing topic & Expected interface)

Phần mở đầu xác định tầm quan trọng của việc tin học hóa hoạt động quản lý khách sạn nhằm tiết kiệm thời gian, nhân lực và chi phí. Nhóm tác giả định hình các tính năng cốt lõi và giao diện dự kiến của phần mềm:

  • Màn hình menu chính cho phép lựa chọn chức năng đăng nhập theo vai trò (Giám đốc, Nhân viên kế toán, Lễ tân, Bảo vệ, Nhân viên dịch vụ).
  • Khung đăng nhập yêu cầu nhập định danh (ID/Username) và mật khẩu (Password).
  • Phân định không gian làm việc của từng vai trò: Giám đốc quản lý tuyển dụng/sa thải và tra cứu thông tin; Lễ tân theo dõi tình trạng phòng trống/đặt/thuê; Kế toán tính toán thu chi; Nhân viên dịch vụ hỗ trợ khách dùng dịch vụ để gia tăng doanh thu.

Phần B: Mô tả bài toán và phương pháp lập trình (Project descriptions & Programming method)

Chương này chuẩn hóa các yêu cầu quản lý thực thể trong khách sạn:

  • Quản lý danh sách nhân sự và tài khoản đăng nhập (tài khoản, mật khẩu, thông tin cá nhân, lương).
  • Phân định các tập nghiệp vụ: Giám đốc sửa đổi danh sách quản lý, cập nhật danh sách nhân viên và xem doanh thu; Lễ tân thực hiện thuê phòng, đặt phòng, trả phòng; Nhân viên dịch vụ ghi nhận dịch vụ; Thực thể phòng lưu trữ mã phòng, loại phòng, trạng thái, ngày bắt đầu, ngày kết thúc và giá tiền.
  • Trình bày cơ sở lý thuyết về danh sách liên kết đơn và danh sách đa liên kết, cùng các thuật toán thêm/xóa/tìm kiếm/sắp xếp tương ứng.

Phần C: Cấu trúc dữ liệu và kết quả thực nghiệm (Struct, Experimental results and discussions)

Chương này trình bày chi tiết việc hiện thực hóa các struct (NodeGD, NodeNV, NodeRoom), mã nguồn C++ các hàm giải thuật và chi tiết hoạt động của từng phân hệ qua màn hình console:

1. Phân hệ Quản lý / Giám đốc (Manager)

  • Quản lý danh sách Giám đốc: Hỗ trợ chức năng thêm mới tài khoản (nhập tên và mật khẩu), xóa tài khoản (nhập tên và xác nhận), hiển thị danh sách toàn bộ quản lý, ghi đè dữ liệu ra file văn bản có kèm bộ kiểm tra xác nhận lưu file (Save file checker).
  • Quản lý nhân viên (Staff): Hỗ trợ thêm mới nhân viên với đầy đủ 7 trường thông tin (ID, Name, Password, Address, Age, Gender, Day Joined), xóa nhân viên (yêu cầu nhập đúng ID và Name), sửa thông tin nhân viên, đọc/lưu file nhân viên có bộ kiểm tra xác nhận.
  • Sắp xếp nhân viên: Tích hợp thuật toán sắp xếp danh sách nhân viên theo mã định danh ID (Sort list by ID), kèm thông báo nếu danh sách đã được sắp xếp trước đó.
  • Xem doanh thu khách sạn (Hotel income): Tính toán và hiển thị tổng số tiền thu được từ toàn bộ các phòng đã thanh toán.

2. Phân hệ Nhân viên bảo vệ (Guard)

  • Cung cấp chức năng xem thông tin cá nhân của chính nhân viên sau khi đăng nhập thành công.

3. Phân hệ Lễ tân (Receptionist)

Cung cấp 2 lựa chọn chính: Xem thông tin cá nhân và Quản lý phòng (Room management). Menu quản lý phòng bao gồm 7 chức năng:

  • Xem danh sách tất cả các phòng (View all rooms).
  • Xem danh sách phòng đã đặt trước (View all booked rooms).
  • Xem danh sách phòng đang được thuê (View all rented rooms).
  • Nhận phòng (Check-in a customer): Hiển thị danh sách phòng trống, yêu cầu nhập mã phòng (roomID). Sau khi chọn, trạng thái phòng chuyển sang 1 (rented), ngày bắt đầu chuyển thành ngày hiện tại, và giá tiền phòng được cập nhật tự động: 5 USD đối với phòng đơn (single room) và 7 USD đối với phòng đôi (double room).
  • Đặt phòng trước (Reserve a room): Hiển thị danh sách phòng trống, yêu cầu nhập mã phòng, ngày đặt phòng và số ngày lưu trú dự kiến. Hệ thống tích hợp kiểm tra logic: nếu ngày đặt nằm trong quá khứ, hệ thống bắt buộc người dùng phải nhập lại.
  • Trả phòng (Check-out a customer): Hiển thị danh sách các phòng đang được thuê, chọn mã phòng cần trả; hệ thống tính toán tổng tiền thanh toán và hiển thị hóa đơn.
  • Làm mới phòng (Reset the room): Xóa sạch toàn bộ dữ liệu lưu trữ tạm thời của phòng để chuyển về trạng thái ban đầu.

4. Phân hệ Nhân viên dịch vụ (Service Staff)

Cung cấp 2 lựa chọn chính: Xem thông tin cá nhân và Tạo dịch vụ cho khách hàng (Create service for customer). Menu dịch vụ bao gồm 6 nhóm dịch vụ chính:

  1. Room service (Dịch vụ phòng)
  2. Special occasion services (Dịch vụ cho các dịp đặc biệt)
  3. Tech support (Hỗ trợ kỹ thuật)
  4. Culinary experiences (Trải nghiệm ẩm thực)
  5. Communication services (Dịch vụ liên lạc)
  6. Personal shopping services (Dịch vụ mua sắm cá nhân)

Khi nhân viên chọn một dịch vụ từ các menu con, chi phí dịch vụ tương ứng sẽ được tự động cộng dồn vào tổng tiền thanh toán (money) của phòng mà khách hàng đang lưu trú.

Phần D: Kết luận và hướng phát triển (Conclusions & Future development)

Tổng kết việc hoàn thành các yêu cầu đặt ra, đánh giá ưu điểm, nhược điểm thực tế của phần mềm và đề xuất các hướng nâng cấp trong tương lai.


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

Kết quả triển khai thực tế

Đồ án đã xây dựng thành công phần mềm quản lý khách sạn dạng dòng lệnh bằng ngôn ngữ C++ với các kết quả cụ thể:

  1. Thiết kế và cài đặt hoàn chỉnh 3 cấu trúc dữ liệu danh sách liên kết đơn: NodeGD (quản lý tài khoản), NodeNV (hồ sơ nhân sự), NodeRoom (thông tin phòng và tài chính).
  2. Xây dựng đầy đủ các thao tác giải thuật danh sách liên kết: addFirst, addLast, addItem (chèn theo vị trí pos), deleteItem (xóa theo vị trí pos), FreeMemory (thu hồi toàn bộ bộ nhớ động) và Sort list by ID (sắp xếp nhân viên theo mã).
  3. Hiện thực hóa hệ thống phân quyền 4 vai trò rõ rệt với chuỗi menu điều hướng logic: Giám đốc, Bảo vệ, Lễ tân và Nhân viên dịch vụ.
  4. Cài đặt đơn giá phòng mặc định cố định: 5 USD/phòng đơn và 7 USD/phòng đôi; thiết lập hệ thống 6 danh mục dịch vụ cộng dồn trực tiếp vào hóa đơn phòng.
  5. Xây dựng cơ chế lưu trữ tập tin văn bản (manager.txt và file nhân viên) có tích hợp chức năng cảnh báo xác nhận (Save file checker) giúp bảo toàn dữ liệu.

Đánh giá ưu điểm và hạn chế tự nhận xét

Theo báo cáo của nhóm tác giả:

  • Ưu điểm (Pros):
    • Giao diện console trực quan, rõ ràng, giúp người dùng dễ dàng tiếp cận và thao tác.
    • Cấu trúc dữ liệu được tổ chức tốt, giúp việc tra cứu và tìm kiếm thông tin diễn ra nhanh chóng.
    • Mã nguồn chạy ổn định, thực thi chính xác các chức năng và trả về kết quả đúng yêu cầu.
  • Nhược điểm (Cons):
    • Một vài tính năng xử lý luồng nghiệp vụ chưa thật sự chặt chẽ về mặt logic.
    • Một số hàm chức năng chưa đạt mức độ tự động hóa hoàn toàn.

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

Hạn chế của đề tài

  • Chưa lưu trữ lại lịch sử thuê phòng chi tiết của từng phòng qua các mốc thời gian khác nhau.
  • Cơ chế tính toán tiền phòng (calculator) còn đơn giản, chưa xử lý được các trường hợp phát sinh phức tạp (như phụ phí thời gian, điều kiện thời tiết hoặc chính sách khuyến mãi đặc thù).
  • Kiểm tra tính hợp lệ của dữ liệu đầu vào (input validation) ở một số phân hệ chưa triệt để, còn phụ thuộc vào thao tác của người dùng.

Hướng phát triển trong tương lai

Nhóm tác giả đề xuất 3 định hướng hoàn thiện:

  1. Tối ưu hóa dữ liệu: Tối ưu hóa việc sử dụng bộ nhớ và cấu trúc dữ liệu trong quá trình phần mềm thực thi runtime.
  2. Nâng cấp tính năng quản lý và tính cước: Bổ sung tính năng lưu lịch sử thuê phòng cho từng phòng (rented history for every room); nâng cấp bộ máy tính toán chi phí để xử lý linh hoạt giá phòng trong nhiều điều kiện phức tạp khác nhau.
  3. Cải tiến logic nhập liệu: Bổ sung thêm các ràng buộc kiểm tra điều kiện đầu vào để các chức năng hoạt động thông minh và logic hơn.

Giá trị tham khảo

Tài liệu đồ án này mang lại giá trị tham khảo thực tế cho:

  • Sinh viên ngành Công nghệ Thông tin, Kỹ thuật Phần mềm: Là tài liệu tham khảo chi tiết cho đồ án môn học Cấu trúc dữ liệu và Giải thuật, minh họa cách ứng dụng cụ thể của Danh sách liên kết đơn (Singly Linked List) và Danh sách đa liên kết (Multi-Linked List) vào bài toán quản lý thực tế bằng C++.
  • Lập trình viên C++ cơ bản: Cung cấp mẫu cài đặt chuẩn mực cho các thao tác quản lý con trỏ động, cấp phát và giải phóng bộ nhớ (FreeMemory), xử lý chuỗi và nhập xuất tập tin qua thư viện <fstream>, <sstream>.
  • Người nghiên cứu thiết kế hệ thống phân quyền console: Tham khảo cách tổ chức luồng điều hướng menu theo vai trò người dùng (Manager, Receptionist, Service Staff, Guard).

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

1. Phần mềm sử dụng cấu trúc dữ liệu nào để lưu trữ thông tin tài khoản quản lý và thông tin phòng?

Hệ thống sử dụng các danh sách liên kết đơn với hai cấu trúc node chính:

  • NodeGD để lưu tài khoản quản lý, gồm: username, password và con trỏ next.
  • NodeRoom để lưu thông tin phòng, gồm: roomID, roomType, status (0: trống, 1: đang thuê, 2: đã đặt), dayBegin, dayEnd, money và con trỏ next.

2. Mức giá thuê phòng mặc định được quy định trong phần mềm là bao nhiêu?

Khi lễ tân thực hiện thủ tục nhận phòng (check-in), tiền phòng được cập nhật tự động theo loại phòng:

  • Phòng đơn (single room): 5 USD.
  • Phòng đôi (double room): 7 USD.

3. Phân hệ Nhân viên dịch vụ (Service Staff) cung cấp những nhóm dịch vụ nào cho khách hàng?

Phân hệ dịch vụ cung cấp 6 danh mục dịch vụ bao gồm:

  1. Dịch vụ phòng (Room service).
  2. Dịch vụ dịp đặc biệt (Special occasion services).
  3. Hỗ trợ kỹ thuật (Tech support).
  4. Trải nghiệm ẩm thực (Culinary experiences).
  5. Dịch vụ liên lạc (Communication services).
  6. Dịch vụ mua sắm cá nhân (Personal shopping services).

Khi khách hàng chọn dịch vụ, số tiền tương ứng sẽ được cộng dồn trực tiếp vào trường money của phòng lưu trú.

4. Hệ thống xử lý như thế nào khi người dùng đặt phòng với ngày đặt nằm trong quá khứ?

Trong chức năng đặt phòng trước (Reserve a room) của phân hệ Lễ tân, hệ thống tích hợp sẵn bộ kiểm tra logic: nếu ngày đặt phòng được nhập là một ngày trong quá khứ, phần mềm sẽ từ chối và bắt buộc người dùng phải nhập lại ngày hợp lệ.

5. Cơ chế nào được sử dụng để đảm bảo an toàn dữ liệu khi chỉnh sửa danh sách nhân sự và quản lý?

Hệ thống sử dụng cơ chế ghi dữ liệu ra file văn bản (text file) kèm theo một phân hệ kiểm tra xác nhận lưu file (Save file checker), nhắc nhở và yêu cầu người dùng xác nhận thao tác trước khi ghi đè nhằm tránh tình trạng mất dữ liệu do quên lưu.


Kết luận

Đồ án môn học "Design Data Structures, Algorithms and Build a Hotel Management Software" của nhóm sinh viên Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh đã giải quyết trọn vẹn yêu cầu vận dụng cấu trúc dữ liệu và giải thuật vào bài toán quản lý khách sạn thực tế. Hệ thống được lập trình bằng C++, tổ chức dữ liệu chặt chẽ thông qua các cấu trúc danh sách liên kết đơn và danh sách đa liên kết để quản lý toàn diện các phân hệ Giám đốc, Lễ tân, Bảo vệ và Dịch vụ. Mặc dù còn một số điểm cần tiếp tục tối ưu hóa về khả năng tự động hóa và thuật toán tính cước phức tạp, đề tài là một tài liệu tham khảo thực hành có giá trị cao cho sinh viên ngành Công nghệ Thông tin trong việc nắm vững kỹ thuật lập trình C++ và cấu trúc dữ liệu động.