项目描述
在这个项目中,我们将开发一个酒店管理系统。这个系统将允许用户查看当前酒店的客房状态(空闲、已预订、已入住),并可以进行客房预订操作。通过这个项目,我们将学习如何使用Python来管理简单的数据结构和实现基本的用户交互。
让我们先看看效果如何吧
项目使用到的技术栈
- Python 3.x:我们使用的是Python的最新版本,它提供了丰富的内置函数和库,使得编程更加高效。
- 命令行界面(CLI):我们将使用Python的内置input()和print()函数来实现一个简单的命令行界面,用于与用户进行交互。
- 数据结构:我们将使用Python的列表(list)和字典(dict)来存储和管理客房信息。
项目拆解
定义客房状态常量
# hotel_management.py
# 定义客房状态常量
ROOM_STATUS_FREE = "空闲"
ROOM_STATUS_BOOKED = "已预订"
ROOM_STATUS_OCCUPIED = "已入住"
描述
- 定义三个字符串常量来表示客房的不同状态。
初始化客房数据
# 接着上面的代码
# 初始化客房列表,每个客房用一个字典表示,包含房间号和状态
rooms = [
{"number": 101, "status": ROOM_STATUS_FREE},
{"number": 102, "status": ROOM_STATUS_FREE},
# 可以继续添加更多客房
]
描述
- 创建一个列表rooms,其中每个元素都是一个字典,代表一个客房。
- 每个字典包含两个键:number(房间号)和status(房间状态)。
编写显示客房状态的函数
# 接着上面的代码
def display_rooms():
"""显示当前所有客房的状态"""
print("当前客房状态:")
for room in rooms:
# 使用格式化字符串来打印每个客房的信息
print(f"房间号: {room['number']}, 状态: {room['status']}")
描述
定义了一个函数display_rooms,它遍历rooms列表并打印每个客房的房间号和状态。
编写预订房间的函数
# 接着上面的代码
def book_room(room_number):
"""根据房间号预订房间,如果房间是空闲的则预订成功,否则显示错误信息"""
for room in rooms:
if room['number'] == room_number: # 找到对应的房间
if room['status'] == ROOM_STATUS_FREE: # 检查房间状态是否为空闲
room['status'] = ROOM_STATUS_BOOKED # 预订房间,更新状态为已预订
print(f"房间 {room_number} 预订成功!")
return True # 预订成功,返回True
print(f"房间 {room_number} 不可用或已被预订。") # 房间号不匹配或房间已被预订
return False # 预订失败,返回False
描述
- 定义了一个函数book_room,它接受一个房间号作为参数。
- 函数遍历rooms列表,查找对应的房间。
- 如果找到了房间且房间状态为空闲,则更新房间状态为已预订,并打印预订成功的信息,返回True。
- 如果房间号不匹配或房间已被预订,则打印相应的错误信息,并返回False。
编写主程序逻辑
# 接着上面的代码
if __name__ == "__main__":
while True:
# 显示用户可以选择的操作
print("\n--- 酒店管理系统 ---")
print("1. 显示客房状态")
print("2. 预订房间(输入房间号)")
print("3. 退出系统")
# 获取用户输入的选择
choice = input("请选择操作: ")
# 根据用户的选择执行相应的操作
if choice == "1":
display_rooms() # 显示客房状态
elif choice == "2":
room_number = input("请输入要预订的房间号: ") # 获取用户输入的房间号
# 尝试将房间号转换为整数,并调用预订函数
if room_number.isdigit():
room_number = int(room_number)
book_room(room_number) # 预订房间
else:
print("请输入有效的房间号(数字)。") # 处理用户输入非数字的情况
elif choice == "3":
print("退出系统。") # 打印退出信息
break # 退出循环,结束程序
else:
print("无效选择,请重新输入。") # 处理用户输入无效选择的情况
描述
- if name == “main”: 确保了这段代码只在直接运行脚本时执行,而不是在作为模块导入时执行。
- 使用了一个无限循环来不断显示用户可以选择的操作,并获取用户的输入。
- 根据用户输入的选择,调用相应的函数来执行操作。
- 如果用户选择预订房间,则先检查输入的房间号是否为数字,然后调用book_room函数。
- 如果用户选择退出系统,则打印退出信息并退出循环,结束程序。
- 如果用户输入了无效的选择,则打印相应的错误信息,并提示用户重新输入。