功能需求
1 房间管理
- 查看房间:展示所有房间的详细信息,包括楼层、房间号、房价、状态和类型。
- 房间预订:允许用户根据房间号进行预订,并记录预订时间。
- 房间退订:提供退订功能,将房间状态更新为空闲。
2 价格管理
- 价格修改:允许管理员根据房间类型修改房价,并更新所有相应房间的价格。
3 数据管理
- 数据加载与保存:系统能够从JSON文件加载房间数据,并在操作后保存更改。
4 用户界面
- 命令行界面:提供简洁的命令行界面供用户进行操作。
5 历史记录
- 查看预订历史:允许用户查看房间的预订历史记录。
6 系统退出
- 安全退出:用户完成操作后,可以安全退出系统,并保存所有数据。
代码实现思路
1.数据持久化
- 使用Python的
json
模块进行数据的加载和保存,确保系统能够正确读取和写入房间数据。
2.用户交互
- 通过命令行输入接收用户指令,实现与用户的交互。
3.功能实现
- 查看房间:遍历房间列表并打印每个房间的详细信息。
- 预订房间:检查房间状态,若为空闲则记录预订信息和时间。
- 退订房间:更新房间状态为空闲,并记录退订操作。
- 修改价格:更新指定类型房间的价格,并反映在所有该类型房间上。
- 查看预订历史:展示指定房间的所有预订记录。
4.程序结构
- 主函数循环提供菜单选项,根据用户输入执行相应功能。
代码实现
由于需要保持数据持久化,我们事先将需要用到的数据保存到json文件中
1.设计一个Hotle类来管理房间集合,提供加载、保存房间数据,以及搜索、预订、退订和修改价格等方法。
- 初始化
def __init__(self):
self.rooms = []
- 显示所有房间信息
def show_rooms(self):
"""
显示所有房间信息
:return:
"""
for room in self.rooms:
print(room)
- 保存房间信息
def save_rooms(self):
"""
保存房间信息
:return:
"""
try:
with open('rooms.json', 'w', encoding='utf-8') as f:
json.dump(self.rooms, f, ensure_ascii=False, indent=4)
except Exception as e:
print(f"保存房间信息失败:{e}")
- 加载房间信息
def load_rooms(self):
"""
加载房间信息
:return:
"""
try:
with open('rooms.json', 'r', encoding='utf-8') as f:
self.rooms = json.load(f)
except Exception as e:
print(f"加载房间信息失败:{e}")
- 搜索房间
def search_rooms(self, number):
"""
搜索房间
:param number:
:return:
"""
for room in self.rooms:
if room['number'] == number:
return room
return f"房间{number}不存在"
- 预订房间
def reserve_room(self, number):
"""
预订房间
:param number:
:return:
"""
room = self.search_rooms(number)
if room:
if room['status'] == '空闲':
room['status'] = '预订'
self.save_booking_history(number)
return f"房间{number}已成功预订于{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
else:
return f"房间{number}当前状态为{room['status']},无法预订"
- 取消预订房间
def cancel_room(self, number):
"""
取消预订房间
:param number:
:return:
"""
room = self.search_rooms(number)
if room:
if room['status'] == '预订':
room['status'] = '空闲'
return f"房间{number}已成功取消预订"
else:
return f"房间{number}当前状态为{room['status']},无法取消预订"
- 更新房间价格
def update_room_price(self, room_type, price):
"""
更新房间价格
:param number:
:param price:
:return:
"""
if not room_type.strip():
return "修改房间类型不能为空"
if price.strip():
return "修改价格不能为空"
for room in self.rooms:
if room['room_type'] == room_type:
room['price'] = int(price)
return f"房间类型{room_type}的价格已成功更新为{price}"
- 查看房间预订历史
def show_room_history(self, number):
"""
查看房间预订历史
:param number:
:return:
"""
for room in self.rooms:
if room['number'] == number:
if room['booking_history']:
return f"房间{number}的预定历史如下:\n{room['booking_history']}"
else:
return f"房间{number}的预定历史为空"
return f"房间{number}不存在"
- 保存预订历史
def save_booking_history(self, number):
"""
保存预订历史
:param number:
:return:
"""
room = self.search_rooms(number)
if room:
if room['status'] == '预订':
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
room['booking_history'].append(now)
return f"房间{number}的预定历史已成功保存"
else:
return f"房间{number}不存在"
2.main类主函数循环提供菜单选项,根据用户输入执行相应功能。
hotel = Hotel()
#加载json文件数据
hotel.load_rooms()
while True:
print("--欢迎使用酒店管理系统V1.0--")
print("1. 查看所有房间")
print("2. 预订房间")
print("3. 退订房间")
print("4. 修改价格")
print("5. 查看房间历史记录")
print("0. 退出系统")
choice = input("请输入您的选择:")
if choice == "1":
print(hotel.show_rooms())
elif choice == "2":
print("--预订房间--")
no = int(input("请输入房间号:"))
print(hotel.reserve_room(no))
hotel.save_rooms()
elif choice == "3":
print("--退订房间--")
no = int(input("请输入房间号:"))
print(hotel.cancel_room(no))
hotel.save_rooms()
elif choice == "4":
print("--修改价格--")
room_type = input("请输入房间类型以修改价格:")
price = input("请输入新的价格:")
print(hotel.update_room_price(room_type, price))
hotel.save_rooms()
elif choice == "5":
print("--查看房间历史记录--")
no = int(input("请输入房间号:"))
print(hotel.show_room_history(no))
elif choice == "0":
break
else:
print("输入错误,请重新输入!")
实现结果