lOMoARcPSD| 46342985
TRƯỜNG ĐẠI HỌC THƯƠNG MẠI
KHOA HTTT KINH TẾ & THƯƠNG MẠI ĐIỆN TỬ
*******
BÀI TẬP LỚN
Học phần: Lập trình với Python
ĐẶT PHÒNG CỦA KHÁCH SẠN APRICOT HÀ NỘI
Giáo viên hướng dẫn: Nguyễn Hưng Long
Lớp học phần : 241_INFO4511_01
Nhóm: : 06
Hà Nội, ngày 05 tháng 01 năm 2025
lOMoARcPSD| 46342985
1
MỤC LỤC
LỜI CẢM ƠN ......................................................................................................................... 1
LỜI MỞ ĐẦU ......................................................................................................................... 2
CHƯƠNG I. ĐẶT BÀI TOÁN VÀ MÔ TẢ BÀI TOÁN ..................................................... 3
1. Đặt bài toán ...................................................................................................................... 3
2. Mô tả bài toán .................................................................................................................. 3
CHƯƠNG 2. PHÂN TÍCH BÀI TOÁN BẰNG SƠ ĐỒ KHỐI .......................................... 5
1. Sơ đồ khối thực hiện của chức năng .............................................................................. 5
2. Mô tả chi tiết các chức năng của hệ thống .................................................................... 6
2.1. Quy trình thc hiện chức năng (Thuât toán) ........................................................... 6
2.2. Sơ đồ khối thc hiện của chức năng ........................................................................ 7
CHƯƠNG 3. CÀI ĐẶT CHƯƠNG TRÌNH ....................................................................... 12
1. Mô tả cấu trúc chương trình ........................................................................................ 12
2. Mô tả cấu trúc của các hàm chính trong chương trình ............................................. 13
2.1. Hàm add_booking(): ................................................................................................ 13
2.2. Hàm delete_booking() .............................................................................................. 16
2.3. Hàm update_booking() ............................................................................................ 18
2.4. Hàm search_booking() ............................................................................................ 21
3. Mô tả cấu trúc của các hàm phụ trong chương trình ................................................ 23
3.1. Hàm print_all_bookings() ....................................................................................... 23
3.2. Chương trình chính (main) ..................................................................................... 25
KẾT LUẬN ............................................................................................................................ 26
BẢNG ĐÁNH GIÁ THÀNH VIÊN ..................................................................................... 28
LỜI CẢM ƠN
Tớc khi bước vào bài tập lớn thì nhóm 6 chúng em xin phép được gửi lời cảm ơn
chân thành đến trường Đại học Thương mại đặc biệt giảng viên của bộ môn Lập trình
với Python, thầy Nguyễn Hưng Long vì công sức thầy bỏ ra để truyền đạt kiến thức cho chúng
lOMoARcPSD| 46342985
2
em trong suốt quá trình học tập. Những tri thức thầy giảng dạy chắc chắn sẽ những hành
trang quý báu trên con đường tích lũy tri thức của chúng em sau này.
Về môn Lập trình với Python, đó là một môn học lập trình có tính thực tế vô cùng cao,
cung cấp một lượng lớn kiến thức và gắn liền với nhu cầu thực tiễn của sinh viên. Tuy vậy do
vốn kiến thức còn nhiều hạn chế và còn bỡ ngỡ với phương thức học của môi trường mới nên
không thể tránh khỏi bài tập lớn vẫn còn nhiều điểm thiếu sót và chưa thực sự hoàn thiện một
cách chỉnh chu. Kính mong thầy sẽ xem xét góp ý để giúp cho bài tập lớn của nhóm 6
chúng em được hoàn thiện hơn.
Chúng em xin cam đoan rằng bài tập lớn với đề tài “Xây dựng chương trình quản
dịch vụ đặt phòng của Khách sạn Apricot Nội” công trình nghiên cứu của cả tập thể
nhóm 6 cũng n của mỗi thành viên trong nhóm. Trong dịch vụ đặt phòng khách sạn,
giúp đảm bảo thông tin về phòng tiện nghi của khách sạn chính xác đáng tin cậy.
Trong trường hợp bất cứ thông tin o chưa đúng, chúng em xin hoàn toàn chịu trách nhiệm
từ phía bộ môn và nhà trường đề ra.
Chúng em xin chân thành cảm ơn!
LỜI MỞ ĐẦU
Trong môi trường kinh doanh ngày càng cạnh tranh, việc cung cấp dịch vụ vượt trội là
yếu tố quyết định giúp doanh nghiệp nổi bật thu hút khách hàng. Dịch vụ yếu tố quyết
định trong tạo ra sự khác biệt ấn tượng với khách hàng. Việc quản dịch vụ hiệu quả có
thể tạo ra trải nghiệm tích cực, nâng cao hài lòng lòng trung thành của khách hàng. Đồng
thời, cũng thể giúp tối ưu hóa tài nguyên, giảm chi phí, tăng cường hiệu suất của nhân
viên trong việc cung cấp dịch vụ.
Với sự phát triển không ngừng của công nghệ và lập trình đã tạo ra một môi trường số
hóa rộng lớn. Đặc biệt hơn việc lập trình hiện đại không chỉ tập trung vào việc tạo ra sản
phẩm, mà còn vào trải nghiệm người dùng. Các doanh nghiệp hiện nay cũng đang chuyển đổi
từ hình truyền thống sang hình shóa. Vậy nên, việc xây dựng chương trình quản
dịch vụ giúp định hình lại hoặc tối ưu hóa quy trình, từ đó nâng cao chất lượng dịch vụ.
Cùng với xu thế đó việc đưa ứng dụng tin học vào quản lý dịch vụ đặt phòng khách sạn
một việc cần thiết để phục vụ cho việc quản thông tin đặt phòng, điều phối phòng kịp
thời, đảm bảo tính liên tục cho việc cung cấp từ đó đã mang lại nhiều lợi ích cho công tác quản
lý và đảm bảo tính chính xác cũng như sự bảo mật thông tin một cách chặt chẽ.
lOMoARcPSD| 46342985
3
Chính vậy cần tính đến việc xây dựng một sở lập trình Python cho việc quản
dịch vụ đặt phòng của hách sạn Apricot Hà Nội. Trên cơ sở nghiên cứu thực tế cùng với mong
muốn hoàn thiện hơn những kiến thức đã được học trường rèn luyện kỹ năng thực hành
của bản thân, nhóm chúng em mong muốn xây dựng lên sở lập trình giúp quản dịch vụ
đặt phòng trở nên hiệu quả và thuận tiện hơn.
CHƯƠNG I. ĐẶT BÀI TOÁN VÀ MÔ TẢ BÀI TOÁN
1. Đặt bài toán
1.1. Input
Quản lý dịch vụ đặt phòng của khách sạn Apricot Hà Nội là việc quản lý đến các thông
tin cho thuê và quản lý các phòng trọ hay những nơi cung cấp dịch vụ lưu trú cho khách hàng.
Hệ thông này cung cấp các tính năng cho phép khách hàng đặt phòng đồng thời ng cung cấp
cho chủ sở hữu các công cụ để quản lý thông tin phòng và thông tin khách hàng.
Để thuận lợi cho dịch vụ đặt phòng của khách sạn cần cung cấp các thông tin sau:
Thông tin khách hàng: họ và tên khách hàng đặt phòng, số điện thoại. Đây là thông
tin bắt buộc để xác nhận danh tính và ghi nhận khách hàng.
Thông tin loại phòng đặt (Standard, Deluxe, Suite).
Thông tin đặt phòng: ngày đặt phòng và ngày trả phòng.
1.2. Output
Hệ sở lập trình với Python giúp khai thác, quản lý, u trữ, nhập thông tin, xóa thông
tin, cập nhật thông tin tìm kiếm thông tin cho việc đặt phòng của khách sạn Apricot Nội.
2. Mô tả bài toán
- Quản lý dịch vụ đặt phòng của khách sạn Apricot Hà Nội đảm bảo các yêu cầu cho
phépđặt phòng, thay đổi và xóa thông tin khách hàng, đổi loại phòng, đổi ngày đặt phòng và
ngày trả phòng.
- Khi hoàn tất nhập thông tin đặt phòng, hệ thống sẽ lưu thông tin về lịch sử đặt phòng
củakhách hàng bao gồm thông tin về loại phòng, thông tin về khách hàng, thông tin đặt
phòng. Điều này giúp cho việc quản lý thông tin đặt phòng trở nên dễ dàng hơn.
- Khi muốn kiểm tra lại thông tin đặt phòng, khách hàng có thể tìm kiếm những thông
tin vềphòng thông qua tên hoặc số điện thoại đã đăng kí. Trong trường hợp khách hàng có
lOMoARcPSD| 46342985
4
nhu cầu thay đổi đặt phòng thì hệ thống sẽ xóa thông tin đặt phòng trước đó và cập nhật
thông tin đặt phòng mới để thỏa mãn nhu cầu đặt ra của khách hàng.
- Chủ sở hữu có thể xem thông tin đặt phòng của tất cả khách hàng bằng cách in danh
sáchtất cả các khách đặt phòng.
- Để xây dựng quản lý dịch vụ đặt phòng khách sạn Apricot Hà Nội ta sử dụng ngôn
ngữ lậptrình Python. Điều này giúp tạo ra một ứng dụng linh hoạt dễ thao tác và dễ triển
khai trên nền tảng máy chủ.
- Khi đó hệ cơ sở lập trình Python sẽ đáp ứng yêu cầu với mỗi chức năng chính tương
ứngvới các hàm như sau:
Nhập thông tin đặt phòng: cho phép thêm thông tin mới vào cơ sở dữ liệu. Các thông
tin cần được lưu trữ bao gồm các thông tin khách hàng, thông tin về phòng, ngày đặt
và trả phòng với khai báo hàm [def add_booking()].
Xóa thông tin đặt phòng: cho phép xóa thông tin đặt phòng không cần thiết hoặc
không hợp lệ khỏi cơ sở dữ liệu với khai báo hàm [def delete_booking()].
Cập nhật thông tin đặt phòng: cho phép cập nhật và chỉnh sửa thông tin đặt phòng với
khai báo hàm [def update_booking()].
Tìm kiếm thông tin đặt phòng: cung cấp khả năng tìm kiếm và lọc thông tin đặt
phòng theo tiêu chí tên khách hàng với khai báo hàm [def search_booking()].
lOMoARcPSD| 46342985
5
CHƯƠNG 2. PHÂN TÍCH BÀI TOÁN BẰNG SƠ ĐỒ KHỐI
1. Sơ đồ khối thực hiện của chức năng
lOMoARcPSD| 46342985
6
2. Mô tả chi tiết các chức năng của hệ thống
2.1. Quy trình thc hiện chức năng (Thuât toán)
a. Thuật toán nhập thông tin đặt phòng
Thuật toán nhập thông tin đặt phòng
Bước 1: Khởi tạo danh sách đặt phòng
Bước 2: In menu
Bước 3: Lựa chọn choice
Choice 1 -> Bước 4
Choice 2 -> In “Lựa chọn không hợp lệ”
Bước 4: Nhập name
Bước 5: Nhập phone
Đúng (Yes) -> Bước 6
Sai (No) -> In “Số điện thoại không phù hợp. Vui lòng nhập lại”
Bước 6: Nhập room_type
Đúng (Yes) -> Bước 7
Sai (No) -> In “Loại phòng không hợp lệ. Vui lòng nhập lại”
Bước 7: Nhập check_in
Đúng (Yes) -> Bước 8
Sai (No) -> In “Ngày nhận phòng không hợp lệ. Vui lòng nhập lại”
Bước 8: Nhập check_out
Đúng (Yes) -> Bước 9
Sai (No) -> In “Ngày trả phòng không hợp lệ trước ngày nhận phòng. Vui lòng nhập
lại”
Bước 9: Lưu thông tin đặt phòng
Bước 10: In thông báo “Đặt phòng thành công”
Bước 11: Kết thúc
b. Thuật toán xóa thông tin đặt phòng
Bước 1: Bắt đầu chức năng xoá thông tin đặt phòng
Bước 2: Nhập name
Bước 3: Kiểm tra name có tồn tại hay không?
No (Sai) → In thông báo “Thông tin không tồn tại”
Yes (Đúng) → Bước 4
Bước 4: Xóa thông tin đặt phòng
Bước 5: In thông báo “Xóa thông tin đặt phòng thành công”
lOMoARcPSD| 46342985
7
Bước 6: Kết thúc
c. Thuật toán cập nhật thông tin đặt phòng
Bước 1: Bắt đầu chức năng cập nhật thông tin đặt phòng
Bước 2: Nhập name
Bước 3: Kiểm tra name có tồn tại hay không?
No (Sai) →In thông báo “Thông tin không tồn tại”
Yes (Đúng) → Bước 4
Bước 4: Nhập room type
Bước 5: Nhập check-in
Bước 6: Nhập check-out
Bước 7: In thông báo “Sửa thông tin thành công”
Bước 8: Kết thúc
d. Thuật toán tìm kiếm thông tin đặt phòng
Bước 1: Bắt đầu chức năng tìm kiếm thông tin đặt phòng
Bước 2: Nhập name
Bước 3: Kiểm tra name có tồn tại hay không?
No (Sai) → In thông báo “Thông tin không tồn tại”
Yes (Đúng) → Bước 4
Bước 4: In thông tin đặt phòng
Bước 5: Kết thúc
2.2. Sơ đồ khối thc hiện của chức năng
a. Sơ đồ khối thực hiện chức năng nhập thông tin đặt phòng
* Phần đầu sơ đồ
lOMoARcPSD| 46342985
8
* Phần sau sơ đồ
lOMoARcPSD| 46342985
9
b. Sơ đồ khối thực hiện chức năng xóa thông tin đặt phòng
lOMoARcPSD| 46342985
10
c. Sơ đồ khối thực hiện chức năng cập nhật thông tin đặt phòng
lOMoARcPSD| 46342985
11
d. Sơ đồ khối thực hiện chức năng tìm kiếm thông tin đặt phòng
lOMoARcPSD| 46342985
12
CHƯƠNG 3. CÀI ĐẶT CHƯƠNG TRÌNH
1. Mô tả cấu trúc chương trình
- Đây là một chương trình quản lý đặt phòng khách sạn gồm các chức năng:
1.
Nhập thông tin đặt
phòng
lOMoARcPSD| 46342985
13
2.
Xóa thông tin đặt
phòng
3.
Cập nhật thông tin đặt
phòng
4.
Tìm kiếm thông tin đặt
phòng
5.
In danh sách tất cả đặt
phòng
6.
Thoát chương
trình
- Chương trình sử dụng 4 hàm chính trong việc quản lý và đặt phòng khách sạn, trong đó
còn một số hàm khác để kiểm tra tính hợp lệ.
- Chương trình lưu trữ dữ liệu được nhập vào tại đoạn bookings = []
2. Mô tả cấu trúc của các hàm chính trong chương trình
2.1. Hàm add_booking():
2.1.1. Cài đặt chương trình
import re from datetime
import datetime
# Khởi tạo danh sách đặt phòng
bookings = []
def validate_phone(phone):
"""Kiểm tra định dạng số điện thoại.""" return
re.match(r"^\d{10}$", phone) is not None
def validate_date(date_str):
"""Kiểm tra định dạng ngày."""
try:
datetime.strptime(date_str, "%d-%m-%Y")
return True except ValueError:
return False
def format_date(date_str): return datetime.strptime(date_str, "%Y-%m-
%d").strftime("%d-%m-%Y")
def add_booking():
lOMoARcPSD| 46342985
14
"""Nhập thông tin đặt phòng."""
name = input("Nhập tên khách hàng: ")
phone = input("Nhập số điện thoại: ")
while not validate_phone(phone):
print("Số điện thoại không hợp lệ. Vui lòng nhập lại.")
phone = input("Nhập số điện thoại: ")
room_type = input("Nhập loại phòng (Standard, Deluxe, Suite): ")
while room_type not in ["Standard", "Deluxe", "Suite"]:
print("Loại phòng không hợp lệ. Vui lòng nhập lại.") room_type =
input("Nhập loại phòng (Standard, Deluxe, Suite): ")
check_in = input("Nhập ngày nhận phòng (DD-MM-YYYY): ")
while not validate_date(check_in):
print("Ngày nhận phòng không hợp lệ. Vui lòng nhập lại.")
check_in = input("Nhập ngày nhận phòng (DD-MM-YYYY): ")
check_out = input("Nhập ngày trả phòng (DD-MM-YYYY): ") while not
validate_date(check_out) or datetime.strptime(check_out, "%d-%m-%Y") <=
datetime.strptime(check_in, "%d-%m-%Y"):
print("Ngày trả phòng không hợp lệ hoặc trước ngày nhận phòng. Vui lòng nhập lại.")
check_out = input("Nhập ngày trả phòng (DD-MM-YYYY): ")
booking = {
"name": name,
"phone": phone,
"room_type": room_type,
"check_in": check_in,
"check_out": check_out
}
bookings.append(booking)
print("\nĐặt phòng thành công!\n")
2.1.2. Kết quả chạy chương trình
- Dùng để bổ sung hoặc thêm thông tin đặt phòng.
- Cách thực hiện:
lOMoARcPSD| 46342985
15
+ Ban đầu, chương trình hiển thị danh sách các chức năng có thể thực hiện:
1. Nhập thông tin đặt phòng.
2. Xóa thông tin đặt phòng.
3. Cập nhật thông tin đặt phòng.
4. Tìm kiếm thông tin đặt phòng.
5. In danh sách tất cả đặt phòng.
6. Thoát chương trình.
Và người dùng được yêu cầu chọn một chức năng.
+ Khi người dùng nhập chọn chức năng là 1, chương trình sẽ đưa đến chức năng “Nhập
thông tin đặt phòng”.
+ Người dùng nhập các thông tin khách hàng mà chương trình yêu cầu bao gồm:
Tên khách hàng
Loại phòng (Standard, Deluxe, Suite)
Ngày nhận phòng (DD-MM-YYYY)
Ngày trả phòng (DD-MM-YYYY)
+ Sau khi người ng nhập đầy đủ thông tin, chương trình thông báo: "ĐẶT PHÒNG
THÀNH NG!". Điều này nghĩa thông tin đặt phòng của khách hàng đã được lưu trữ
thành công trong hệ thống.
+ Hàm validate được dùng để kiểm tra tính hợp lệ của thông tin mà người dùng đã nhập.
Nếu phát hiện ra sự sai lệch trong nhập thông tin, chương trình sẽ gửi ra một đoạn mã thông
báo thông tin không hợp lệ và đưa người dùng quay lại mục thông tin đó.
lOMoARcPSD| 46342985
16
2.2. Hàm delete_booking()
2.2.1. Cài đặt chương trình
def delete_booking():
"""Xóa thông tin đặt phòng.""" global bookings keyword =
input("Nhập từ khóa tìm thông tin phòng cần xóa: ").lower()
results = [b for b in bookings if (
keyword in b["name"].lower() or
keyword in b["phone"].lower() or
keyword in b["room_type"].lower() or
keyword in b["check_in"].lower() or
keyword in b["check_out"].lower()
)]
if results:
print(f"Tìm thấy {len(results)} kết quả:")
for i, booking in enumerate(results, 1):
print(f"{i}. {booking['name']} - {booking['phone']} - {booking['room_type']} -
{booking['check_in']} đến {booking['check_out']}")
while True:
choice = input(f"Chọn số (1-{len(results)}) để xóa, hoặc nhập 'q' để hủy: ")
if choice.lower() == 'q':
print("Hủy bỏ việc xóa thông tin đặt phòng.\n")
return
try:
index = int(choice) - 1
if 0 <= index < len(results):
booking_to_delete = results[index] confirm =
input(f"Bạn có chắc chắn muốn xóa đặt phòng của khách
lOMoARcPSD| 46342985
17
{booking_to_delete['name']}? (y/n): ")
if confirm.lower() == 'y':
bookings = [b for b in bookings if b != booking_to_delete]
print("Xóa thông tin đặt phòng thành công!\n") return
else:
print("Không xóa thông tin đặt phòng.\n")
return else:
print("Lựa chọn không hợp lệ. Vui lòng chọn lại!")
except ValueError:
print("Lựa chọn không hợp lệ. Vui lòng nhập lại!")
else:
print("Không tìm thấy thông tin đặt phòng phù hợp!\n")
2.2.2. Kết quả chạy chương trình
- Dùng để xóa thông tin đặt phòng được chọn
- Cách thực hiện:
+ Chương trình hiển thị danh sách các chức năng:
1. Nhập thông tin đặt phòng.
2. Xóa thông tin đặt phòng.
3. Cập nhật thông tin đặt phòng.
4. Tìm kiếm thông tin đặt phòng.
5. In danh sách tất cả đặt phòng.
6. Thoát chương trình.
Và người dùng được yêu cầu chọn một chức năng.
+ Khi người dùng nhập chọn chức năng là 2, chương trình sẽ đưa đến chức năng “a thông
tin đặt phòng”.
+ Tại đây người dùng có thể dựa vào các từ khóa như: Tên, Số điện thoại, Loại phòng, Ngày
nhận phòng/trả phòng để lọc và tìm kiếm thông tin cần xóa. Người dùng nhập tên khách hàng
đã đặt phòng trước đó, John”.
+ Sau khi người dùng nhập tên khách hàng, chương trình xác nhận thông tin đặt phòng của
khách hàng có tên John đã được xóa khỏi hệ thống. Hệ thống hiển thị thông báo: "XÓA
THÔNG TIN ĐẶT PHÒNG THÀNH CÔNG!".
lOMoARcPSD| 46342985
18
+ Bên cạnh đó, khi từ khóa được nhập vào được nhiều người sử dụng, chương trình sẽ hiển
thị những thông tin đặt phòng có liên quan đến từ khóa đó. Nếu muốn xóa, người dùng chọn
số thứ tự thông tin đặt phòng cần xóa (1-n) hoặc nhấn “q” để hủy chương trình.
2.3. Hàm update_booking()
2.3.1. Cài đặt chương trình
def update_booking():
"""Cập nhật thông tin đặt phòng.""" global
bookings keyword = input("Nhập từ khóa cần tìm:
").lower()
results = [b for b in bookings if (
keyword in b["name"].lower() or
keyword in b["phone"].lower() or
keyword in b["room_type"].lower() or
keyword in b["check_in"].lower() or
keyword in b["check_out"].lower()
)]
if results:
lOMoARcPSD| 46342985
19
print(f"Tìm thấy {len(results)} kết quả:")
for i, booking in enumerate(results, 1):
print(f"{i}. {booking['name']} - {booking['phone']} - {booking['room_type']} -
{booking['check_in']} đến {booking['check_out']}")
while True:
choice = input(f"Chọn số (1-{len(results)}) để cập nhật, hoặc nhập 'q' để hủy: ")
if choice.lower() == 'q':
print("Hủy bỏ việc cập nhật thông tin đặt phòng.\n")
return
try:
index = int(choice) - 1 if 0
<= index < len(results):
booking_to_update = results[index]
print("Thông tin cũ:")
print_booking(booking_to_update)
name = input(f"Nhập tên khách hàng mới (bỏ trống để giữ nguyên:
{booking_to_update['name']}): ") or booking_to_update["name"]
phone = input(f"Nhập số điện thoại mới (bỏ trống để giữ nguyên:
{booking_to_update['phone']}): ") or booking_to_update["phone"] while
phone != booking_to_update["phone"] and not validate_phone(phone):
print("Số điện thoại không hợp lệ. Vui lòng nhập lại.")
phone = input(f"Nhập số điện thoại mới (bỏ trống để giữ nguyên:
{booking_to_update['phone']}): ") or booking_to_update["phone"]
room_type = input(f"Nhập loại phòng mới (Standard, Deluxe, Suite, bỏ trống để
giữ nguyên: {booking_to_update['room_type']}): ") or booking_to_update["room_type"]
while room_type != booking_to_update["room_type"] and room_type not in ["Standard",
"Deluxe", "Suite"]:
print("Loại phòng không hợp lệ. Vui lòng nhập lại.")
room_type = input(f"Nhập loại phòng mới (Standard, Deluxe, Suite, bỏ trống để giữ
nguyên: {booking_to_update['room_type']}): ") or booking_to_update["room_type"]

Preview text:

lOMoAR cPSD| 46342985
TRƯỜNG ĐẠI HỌC THƯƠNG MẠI
KHOA HTTT KINH TẾ & THƯƠNG MẠI ĐIỆN TỬ ******* BÀI TẬP LỚN
Học phần: Lập trình với Python
ĐỀ TÀI 14: XÂY DỰNG CHƯƠNG TRÌNH QUẢN LÝ DỊCH VỤ
ĐẶT PHÒNG CỦA KHÁCH SẠN APRICOT HÀ NỘI
Giáo viên hướng dẫn: Nguyễn Hưng Long
Lớp học phần : 241_INFO4511_01 Nhóm: : 06
Hà Nội, ngày 05 tháng 01 năm 2025 lOMoAR cPSD| 46342985 MỤC LỤC
LỜI CẢM ƠN ......................................................................................................................... 1
LỜI MỞ ĐẦU ......................................................................................................................... 2
CHƯƠNG I. ĐẶT BÀI TOÁN VÀ MÔ TẢ BÀI TOÁN ..................................................... 3
1. Đặt bài toán ...................................................................................................................... 3
2. Mô tả bài toán .................................................................................................................. 3
CHƯƠNG 2. PHÂN TÍCH BÀI TOÁN BẰNG SƠ ĐỒ KHỐI .......................................... 5
1. Sơ đồ khối thực hiện của chức năng .............................................................................. 5
2. Mô tả chi tiết các chức năng của hệ thống .................................................................... 6
2.1. Quy trình thực hiện chức năng (Thuât toán)̣ ........................................................... 6
2.2. Sơ đồ khối thực hiện của chức năng ........................................................................ 7
CHƯƠNG 3. CÀI ĐẶT CHƯƠNG TRÌNH ....................................................................... 12
1. Mô tả cấu trúc chương trình ........................................................................................ 12
2. Mô tả cấu trúc của các hàm chính trong chương trình ............................................. 13
2.1. Hàm add_booking(): ................................................................................................ 13
2.2. Hàm delete_booking() .............................................................................................. 16
2.3. Hàm update_booking() ............................................................................................ 18
2.4. Hàm search_booking() ............................................................................................ 21
3. Mô tả cấu trúc của các hàm phụ trong chương trình ................................................ 23
3.1. Hàm print_all_bookings() ....................................................................................... 23
3.2. Chương trình chính (main) ..................................................................................... 25
KẾT LUẬN ............................................................................................................................ 26
BẢNG ĐÁNH GIÁ THÀNH VIÊN ..................................................................................... 28 LỜI CẢM ƠN
Trước khi bước vào bài tập lớn thì nhóm 6 chúng em xin phép được gửi lời cảm ơn
chân thành đến trường Đại học Thương mại và đặc biệt là giảng viên của bộ môn Lập trình
với Python, thầy Nguyễn Hưng Long vì công sức thầy bỏ ra để truyền đạt kiến thức cho chúng 1 lOMoAR cPSD| 46342985
em trong suốt quá trình học tập. Những tri thức mà thầy giảng dạy chắc chắn sẽ là những hành
trang quý báu trên con đường tích lũy tri thức của chúng em sau này.
Về môn Lập trình với Python, đó là một môn học lập trình có tính thực tế vô cùng cao,
cung cấp một lượng lớn kiến thức và gắn liền với nhu cầu thực tiễn của sinh viên. Tuy vậy do
vốn kiến thức còn nhiều hạn chế và còn bỡ ngỡ với phương thức học của môi trường mới nên
không thể tránh khỏi bài tập lớn vẫn còn nhiều điểm thiếu sót và chưa thực sự hoàn thiện một
cách chỉnh chu. Kính mong thầy sẽ xem xét và góp ý để giúp cho bài tập lớn của nhóm 6
chúng em được hoàn thiện hơn.
Chúng em xin cam đoan rằng bài tập lớn với đề tài “Xây dựng chương trình quản lý
dịch vụ đặt phòng của Khách sạn Apricot Hà Nội” là công trình nghiên cứu của cả tập thể
nhóm 6 và cũng như là của mỗi thành viên trong nhóm. Trong dịch vụ đặt phòng khách sạn,
giúp đảm bảo thông tin về phòng và tiện nghi của khách sạn là chính xác và đáng tin cậy.
Trong trường hợp có bất cứ thông tin nào chưa đúng, chúng em xin hoàn toàn chịu trách nhiệm
từ phía bộ môn và nhà trường đề ra.
Chúng em xin chân thành cảm ơn! LỜI MỞ ĐẦU
Trong môi trường kinh doanh ngày càng cạnh tranh, việc cung cấp dịch vụ vượt trội là
yếu tố quyết định giúp doanh nghiệp nổi bật và thu hút khách hàng. Dịch vụ là yếu tố quyết
định trong tạo ra sự khác biệt và ấn tượng với khách hàng. Việc quản lý dịch vụ hiệu quả có
thể tạo ra trải nghiệm tích cực, nâng cao hài lòng và lòng trung thành của khách hàng. Đồng
thời, cũng có thể giúp tối ưu hóa tài nguyên, giảm chi phí, và tăng cường hiệu suất của nhân
viên trong việc cung cấp dịch vụ.
Với sự phát triển không ngừng của công nghệ và lập trình đã tạo ra một môi trường số
hóa rộng lớn. Đặc biệt hơn là việc lập trình hiện đại không chỉ tập trung vào việc tạo ra sản
phẩm, mà còn vào trải nghiệm người dùng. Các doanh nghiệp hiện nay cũng đang chuyển đổi
từ mô hình truyền thống sang mô hình số hóa. Vậy nên, việc xây dựng chương trình quản lý
dịch vụ giúp định hình lại hoặc tối ưu hóa quy trình, từ đó nâng cao chất lượng dịch vụ.
Cùng với xu thế đó việc đưa ứng dụng tin học vào quản lý dịch vụ đặt phòng khách sạn
là một việc cần thiết để phục vụ cho việc quản lý thông tin đặt phòng, điều phối phòng kịp
thời, đảm bảo tính liên tục cho việc cung cấp từ đó đã mang lại nhiều lợi ích cho công tác quản
lý và đảm bảo tính chính xác cũng như sự bảo mật thông tin một cách chặt chẽ. 2 lOMoAR cPSD| 46342985
Chính vì vậy cần tính đến việc xây dựng một cơ sở lập trình Python cho việc quản lý
dịch vụ đặt phòng của hách sạn Apricot Hà Nội. Trên cơ sở nghiên cứu thực tế cùng với mong
muốn hoàn thiện hơn những kiến thức đã được học ở trường và rèn luyện kỹ năng thực hành
của bản thân, nhóm chúng em mong muốn xây dựng lên cơ sở lập trình giúp quản lý dịch vụ
đặt phòng trở nên hiệu quả và thuận tiện hơn.
CHƯƠNG I. ĐẶT BÀI TOÁN VÀ MÔ TẢ BÀI TOÁN 1. Đặt bài toán 1.1. Input
Quản lý dịch vụ đặt phòng của khách sạn Apricot Hà Nội là việc quản lý đến các thông
tin cho thuê và quản lý các phòng trọ hay những nơi cung cấp dịch vụ lưu trú cho khách hàng.
Hệ thông này cung cấp các tính năng cho phép khách hàng đặt phòng đồng thời cũng cung cấp
cho chủ sở hữu các công cụ để quản lý thông tin phòng và thông tin khách hàng.
Để thuận lợi cho dịch vụ đặt phòng của khách sạn cần cung cấp các thông tin sau:
Thông tin khách hàng: họ và tên khách hàng đặt phòng, số điện thoại. Đây là thông 
tin bắt buộc để xác nhận danh tính và ghi nhận khách hàng.
Thông tin loại phòng đặt (Standard, Deluxe, Suite). 
 Thông tin đặt phòng: ngày đặt phòng và ngày trả phòng. 1.2. Output
Hệ cơ sở lập trình với Python giúp khai thác, quản lý, lưu trữ, nhập thông tin, xóa thông
tin, cập nhật thông tin và tìm kiếm thông tin cho việc đặt phòng của khách sạn Apricot Hà Nội. 2. Mô tả bài toán -
Quản lý dịch vụ đặt phòng của khách sạn Apricot Hà Nội đảm bảo các yêu cầu cho
phépđặt phòng, thay đổi và xóa thông tin khách hàng, đổi loại phòng, đổi ngày đặt phòng và ngày trả phòng. -
Khi hoàn tất nhập thông tin đặt phòng, hệ thống sẽ lưu thông tin về lịch sử đặt phòng
củakhách hàng bao gồm thông tin về loại phòng, thông tin về khách hàng, thông tin đặt
phòng. Điều này giúp cho việc quản lý thông tin đặt phòng trở nên dễ dàng hơn. -
Khi muốn kiểm tra lại thông tin đặt phòng, khách hàng có thể tìm kiếm những thông
tin vềphòng thông qua tên hoặc số điện thoại đã đăng kí. Trong trường hợp khách hàng có 3 lOMoAR cPSD| 46342985
nhu cầu thay đổi đặt phòng thì hệ thống sẽ xóa thông tin đặt phòng trước đó và cập nhật
thông tin đặt phòng mới để thỏa mãn nhu cầu đặt ra của khách hàng. -
Chủ sở hữu có thể xem thông tin đặt phòng của tất cả khách hàng bằng cách in danh
sáchtất cả các khách đặt phòng. -
Để xây dựng quản lý dịch vụ đặt phòng khách sạn Apricot Hà Nội ta sử dụng ngôn
ngữ lậptrình Python. Điều này giúp tạo ra một ứng dụng linh hoạt dễ thao tác và dễ triển
khai trên nền tảng máy chủ. -
Khi đó hệ cơ sở lập trình Python sẽ đáp ứng yêu cầu với mỗi chức năng chính tương
ứngvới các hàm như sau:
• Nhập thông tin đặt phòng: cho phép thêm thông tin mới vào cơ sở dữ liệu. Các thông
tin cần được lưu trữ bao gồm các thông tin khách hàng, thông tin về phòng, ngày đặt
và trả phòng với khai báo hàm [def add_booking()].
• Xóa thông tin đặt phòng: cho phép xóa thông tin đặt phòng không cần thiết hoặc
không hợp lệ khỏi cơ sở dữ liệu với khai báo hàm [def delete_booking()].
• Cập nhật thông tin đặt phòng: cho phép cập nhật và chỉnh sửa thông tin đặt phòng với
khai báo hàm [def update_booking()].
• Tìm kiếm thông tin đặt phòng: cung cấp khả năng tìm kiếm và lọc thông tin đặt
phòng theo tiêu chí tên khách hàng với khai báo hàm [def search_booking()]. 4 lOMoAR cPSD| 46342985
CHƯƠNG 2. PHÂN TÍCH BÀI TOÁN BẰNG SƠ ĐỒ KHỐI
1. Sơ đồ khối thực hiện của chức năng 5 lOMoAR cPSD| 46342985
2. Mô tả chi tiết các chức năng của hệ thống
2.1. Quy trình thực hiện chức năng (Thuât toán)̣
a. Thuật toán nhập thông tin đặt phòng
Thuật toán nhập thông tin đặt phòng
Bước 1: Khởi tạo danh sách đặt phòng Bước 2: In menu
Bước 3: Lựa chọn choice Choice 1 -> Bước 4
Choice 2 -> In “Lựa chọn không hợp lệ” Bước 4: Nhập name Bước 5: Nhập phone Đúng (Yes) -> Bước 6
Sai (No) -> In “Số điện thoại không phù hợp. Vui lòng nhập lại” Bước 6: Nhập room_type Đúng (Yes) -> Bước 7
Sai (No) -> In “Loại phòng không hợp lệ. Vui lòng nhập lại” Bước 7: Nhập check_in Đúng (Yes) -> Bước 8
Sai (No) -> In “Ngày nhận phòng không hợp lệ. Vui lòng nhập lại” Bước 8: Nhập check_out Đúng (Yes) -> Bước 9
Sai (No) -> In “Ngày trả phòng không hợp lệ trước ngày nhận phòng. Vui lòng nhập lại”
Bước 9: Lưu thông tin đặt phòng
Bước 10: In thông báo “Đặt phòng thành công” Bước 11: Kết thúc
b. Thuật toán xóa thông tin đặt phòng
Bước 1: Bắt đầu chức năng xoá thông tin đặt phòng Bước 2: Nhập name
Bước 3: Kiểm tra name có tồn tại hay không?
No (Sai) → In thông báo “Thông tin không tồn tại” Yes (Đúng) → Bước 4
Bước 4: Xóa thông tin đặt phòng
Bước 5: In thông báo “Xóa thông tin đặt phòng thành công” 6 lOMoAR cPSD| 46342985 Bước 6: Kết thúc
c. Thuật toán cập nhật thông tin đặt phòng
Bước 1: Bắt đầu chức năng cập nhật thông tin đặt phòng Bước 2: Nhập name
Bước 3: Kiểm tra name có tồn tại hay không?
No (Sai) →In thông báo “Thông tin không tồn tại” Yes (Đúng) → Bước 4 Bước 4: Nhập room type Bước 5: Nhập check-in Bước 6: Nhập check-out
Bước 7: In thông báo “Sửa thông tin thành công” Bước 8: Kết thúc
d. Thuật toán tìm kiếm thông tin đặt phòng
Bước 1: Bắt đầu chức năng tìm kiếm thông tin đặt phòng Bước 2: Nhập name
Bước 3: Kiểm tra name có tồn tại hay không?
No (Sai) → In thông báo “Thông tin không tồn tại” Yes (Đúng) → Bước 4
Bước 4: In thông tin đặt phòng Bước 5: Kết thúc
2.2. Sơ đồ khối thực hiện của chức năng
a. Sơ đồ khối thực hiện chức năng nhập thông tin đặt phòng
* Phần đầu sơ đồ 7 lOMoAR cPSD| 46342985 * Phần sau sơ đồ 8 lOMoAR cPSD| 46342985
b. Sơ đồ khối thực hiện chức năng xóa thông tin đặt phòng 9 lOMoAR cPSD| 46342985
c. Sơ đồ khối thực hiện chức năng cập nhật thông tin đặt phòng 10 lOMoAR cPSD| 46342985
d. Sơ đồ khối thực hiện chức năng tìm kiếm thông tin đặt phòng 11 lOMoAR cPSD| 46342985
CHƯƠNG 3. CÀI ĐẶT CHƯƠNG TRÌNH
1. Mô tả cấu trúc chương trình
- Đây là một chương trình quản lý đặt phòng khách sạn gồm các chức năng: 1. Nhập thông tin đặt phòng 12 lOMoAR cPSD| 46342985 2. Xóa thông tin đặt phòng
3. Cập nhật thông tin đặt phòng
4. Tìm kiếm thông tin đặt phòng
5. In danh sách tất cả đặt phòng 6. Thoát chương trình
- Chương trình sử dụng 4 hàm chính trong việc quản lý và đặt phòng khách sạn, trong đó
còn một số hàm khác để kiểm tra tính hợp lệ.
- Chương trình lưu trữ dữ liệu được nhập vào tại đoạn bookings = []
2. Mô tả cấu trúc của các hàm chính trong chương trình 2.1. Hàm add_booking():
2.1.1. Cài đặt chương trình import re from datetime import datetime
# Khởi tạo danh sách đặt phòng bookings = [] def validate_phone(phone):
"""Kiểm tra định dạng số điện thoại.""" return
re.match(r"^\d{10}$", phone) is not None def validate_date(date_str):
"""Kiểm tra định dạng ngày.""" try:
datetime.strptime(date_str, "%d-%m-%Y")
return True except ValueError: return False
def format_date(date_str): return datetime.strptime(date_str, "%Y-%m- %d").strftime("%d-%m-%Y") def add_booking(): 13 lOMoAR cPSD| 46342985
"""Nhập thông tin đặt phòng."""
name = input("Nhập tên khách hàng: ")
phone = input("Nhập số điện thoại: ")
while not validate_phone(phone):
print("Số điện thoại không hợp lệ. Vui lòng nhập lại.")
phone = input("Nhập số điện thoại: ")
room_type = input("Nhập loại phòng (Standard, Deluxe, Suite): ")
while room_type not in ["Standard", "Deluxe", "Suite"]:
print("Loại phòng không hợp lệ. Vui lòng nhập lại.") room_type =
input("Nhập loại phòng (Standard, Deluxe, Suite): ")
check_in = input("Nhập ngày nhận phòng (DD-MM-YYYY): ")
while not validate_date(check_in):
print("Ngày nhận phòng không hợp lệ. Vui lòng nhập lại.")
check_in = input("Nhập ngày nhận phòng (DD-MM-YYYY): ")
check_out = input("Nhập ngày trả phòng (DD-MM-YYYY): ") while not
validate_date(check_out) or datetime.strptime(check_out, "%d-%m-%Y") <=
datetime.strptime(check_in, "%d-%m-%Y"):
print("Ngày trả phòng không hợp lệ hoặc trước ngày nhận phòng. Vui lòng nhập lại.")
check_out = input("Nhập ngày trả phòng (DD-MM-YYYY): ") booking = { "name": name, "phone": phone, "room_type": room_type, "check_in": check_in, "check_out": check_out } bookings.append(booking)
print("\nĐặt phòng thành công!\n")
2.1.2. Kết quả chạy chương trình
- Dùng để bổ sung hoặc thêm thông tin đặt phòng.
- Cách thực hiện: 14 lOMoAR cPSD| 46342985
+ Ban đầu, chương trình hiển thị danh sách các chức năng có thể thực hiện:
1. Nhập thông tin đặt phòng.
2. Xóa thông tin đặt phòng.
3. Cập nhật thông tin đặt phòng.
4. Tìm kiếm thông tin đặt phòng.
5. In danh sách tất cả đặt phòng. 6. Thoát chương trình.
Và người dùng được yêu cầu chọn một chức năng.
+ Khi người dùng nhập chọn chức năng là 1, chương trình sẽ đưa đến chức năng “Nhập
thông tin đặt phòng”.
+ Người dùng nhập các thông tin khách hàng mà chương trình yêu cầu bao gồm: • Tên khách hàng
• Loại phòng (Standard, Deluxe, Suite)
• Ngày nhận phòng (DD-MM-YYYY)
• Ngày trả phòng (DD-MM-YYYY)
+ Sau khi người dùng nhập đầy đủ thông tin, chương trình thông báo: "ĐẶT PHÒNG
THÀNH CÔNG!"
. Điều này nghĩa là thông tin đặt phòng của khách hàng đã được lưu trữ
thành công trong hệ thống.
+ Hàm validate được dùng để kiểm tra tính hợp lệ của thông tin mà người dùng đã nhập.
Nếu phát hiện ra sự sai lệch trong nhập thông tin, chương trình sẽ gửi ra một đoạn mã thông
báo thông tin không hợp lệ và đưa người dùng quay lại mục thông tin đó. 15 lOMoAR cPSD| 46342985
2.2. Hàm delete_booking()
2.2.1. Cài đặt chương trình
def delete_booking():
"""Xóa thông tin đặt phòng.""" global bookings keyword =
input("Nhập từ khóa tìm thông tin phòng cần xóa: ").lower()
results = [b for b in bookings if (
keyword in b["name"].lower() or
keyword in b["phone"].lower() or
keyword in b["room_type"].lower() or
keyword in b["check_in"].lower() or
keyword in b["check_out"].lower() )] if results:
print(f"Tìm thấy {len(results)} kết quả:")
for i, booking in enumerate(results, 1):
print(f"{i}. {booking['name']} - {booking['phone']} - {booking['room_type']} -
{booking['check_in']} đến {booking['check_out']}") while True:
choice = input(f"Chọn số (1-{len(results)}) để xóa, hoặc nhập 'q' để hủy: ") if choice.lower() == 'q':
print("Hủy bỏ việc xóa thông tin đặt phòng.\n") return try: index = int(choice) - 1
if 0 <= index < len(results):
booking_to_delete = results[index] confirm =
input(f"Bạn có chắc chắn muốn xóa đặt phòng của khách 16 lOMoAR cPSD| 46342985
{booking_to_delete['name']}? (y/n): ") if confirm.lower() == 'y':
bookings = [b for b in bookings if b != booking_to_delete]
print("Xóa thông tin đặt phòng thành công!\n") return else:
print("Không xóa thông tin đặt phòng.\n") return else:
print("Lựa chọn không hợp lệ. Vui lòng chọn lại!") except ValueError:
print("Lựa chọn không hợp lệ. Vui lòng nhập lại!") else:
print("Không tìm thấy thông tin đặt phòng phù hợp!\n")
2.2.2. Kết quả chạy chương trình
- Dùng để xóa thông tin đặt phòng được chọn - Cách thực hiện:
+ Chương trình hiển thị danh sách các chức năng:
1. Nhập thông tin đặt phòng.
2. Xóa thông tin đặt phòng.
3. Cập nhật thông tin đặt phòng.
4. Tìm kiếm thông tin đặt phòng.
5. In danh sách tất cả đặt phòng. 6. Thoát chương trình.
Và người dùng được yêu cầu chọn một chức năng.
+ Khi người dùng nhập chọn chức năng là 2, chương trình sẽ đưa đến chức năng “Xóa thông tin đặt phòng”.
+ Tại đây người dùng có thể dựa vào các từ khóa như: Tên, Số điện thoại, Loại phòng, Ngày
nhận phòng/trả phòng để lọc và tìm kiếm thông tin cần xóa. Người dùng nhập tên khách hàng
đã đặt phòng trước đó, “John”.
+ Sau khi người dùng nhập tên khách hàng, chương trình xác nhận thông tin đặt phòng của
khách hàng có tên John đã được xóa khỏi hệ thống. Hệ thống hiển thị thông báo: "XÓA
THÔNG TIN ĐẶT PHÒNG THÀNH CÔNG!". 17 lOMoAR cPSD| 46342985
+ Bên cạnh đó, khi từ khóa được nhập vào được nhiều người sử dụng, chương trình sẽ hiển
thị những thông tin đặt phòng có liên quan đến từ khóa đó. Nếu muốn xóa, người dùng chọn
số thứ tự thông tin đặt phòng cần xóa (1-n) hoặc nhấn “q” để hủy chương trình.
2.3. Hàm update_booking()
2.3.1. Cài đặt chương trình
def update_booking():
"""Cập nhật thông tin đặt phòng.""" global
bookings keyword = input("Nhập từ khóa cần tìm: ").lower()
results = [b for b in bookings if (
keyword in b["name"].lower() or
keyword in b["phone"].lower() or
keyword in b["room_type"].lower() or
keyword in b["check_in"].lower() or
keyword in b["check_out"].lower() )] if results: 18 lOMoAR cPSD| 46342985
print(f"Tìm thấy {len(results)} kết quả:")
for i, booking in enumerate(results, 1):
print(f"{i}. {booking['name']} - {booking['phone']} - {booking['room_type']} -
{booking['check_in']} đến {booking['check_out']}") while True:
choice = input(f"Chọn số (1-{len(results)}) để cập nhật, hoặc nhập 'q' để hủy: ") if choice.lower() == 'q':
print("Hủy bỏ việc cập nhật thông tin đặt phòng.\n") return try: index = int(choice) - 1 if 0
<= index < len(results):
booking_to_update = results[index] print("Thông tin cũ:")
print_booking(booking_to_update)
name = input(f"Nhập tên khách hàng mới (bỏ trống để giữ nguyên:
{booking_to_update['name']}): ") or booking_to_update["name"]
phone = input(f"Nhập số điện thoại mới (bỏ trống để giữ nguyên:
{booking_to_update['phone']}): ") or booking_to_update["phone"] while
phone != booking_to_update["phone"] and not validate_phone(phone):
print("Số điện thoại không hợp lệ. Vui lòng nhập lại.")
phone = input(f"Nhập số điện thoại mới (bỏ trống để giữ nguyên:
{booking_to_update['phone']}): ") or booking_to_update["phone"]
room_type = input(f"Nhập loại phòng mới (Standard, Deluxe, Suite, bỏ trống để
giữ nguyên: {booking_to_update['room_type']}): ") or booking_to_update["room_type"]
while room_type != booking_to_update["room_type"] and room_type not in ["Standard", "Deluxe", "Suite"]:
print("Loại phòng không hợp lệ. Vui lòng nhập lại.")
room_type = input(f"Nhập loại phòng mới (Standard, Deluxe, Suite, bỏ trống để giữ
nguyên: {booking_to_update['room_type']}): ") or booking_to_update["room_type"] 19