import tkinter as tk from tkinter import messagebox from tkinter import simpledialog from Car import Car from ParkManage import ParkManage # 确保你的模块路径正确 from User import User # 初始化停车场管理 park_manage_instance = ParkManage() park = ParkManage() # 创建一个用户实例 user1 = User('Alice', 'P@ssw0rd') # 打印用户信息 print(user1) # 修改用户密码 user1.change_password('NewP@ssw0rd') # 提升用户为管理员 user1.promote_to_admin() # 再次打印用户信息,查看角色是否变化 print(user1) # 降级用户为普通用户 user1.demote_to_user() # 最后一次打印用户信息 print(user1) isAdmin = False def on_park_click(): """处理停车操作的回调函数""" # 弹出对话框让用户输入车牌号 license_plate = simpledialog.askstring("停车", "请输入车牌号:") if license_plate: # 调用park对象的park方法,传入用户输入的车牌号 success = park.park(license_plate) if success: messagebox.showinfo("停车成功", f"车牌号{license_plate}的车辆已成功停放。") else: messagebox.showerror("停车失败", "停车过程中出现问题,请重试。") else: messagebox.showwarning("警告", "车牌号不能为空,请重新输入。") def on_pickup_click(): """处理取车操作的回调函数""" # 弹出对话框让用户输入车牌号 license_plate = simpledialog.askstring("取车", "请输入车牌号:") if license_plate: # 调用park对象的pickup方法,传入用户输入的车牌号尝试取车 success = park.pickup(license_plate) if success: messagebox.showinfo("取车成功", f"车牌号为{license_plate}的车辆已成功取走。") else: messagebox.showerror("取车失败", f"车牌号为{license_plate}的车辆取车失败。请检查车牌号是否正确或车辆是否已取走。") else: messagebox.showwarning("警告", "车牌号不能为空,请重新输入。") def on_inquire_click(): """处理查询车辆信息操作的回调函数""" # 弹出对话框让用户输入车牌号 license_plate = simpledialog.askstring("查询车辆信息", "请输入车牌号:") if license_plate: try: # 调用park对象的query_car_info方法,传入用户输入的车牌号查询车辆信息 car_info = park.query_car_info(license_plate) if car_info: # 假设query_car_info返回车辆信息的字典,展示相关信息 message = ( f"车牌号: {car_info['license_plate']}\n" f"车型: {car_info['model']}\n" f"颜色: {car_info['color']}\n" f"停放时间: {car_info['parked_time'].strftime('%Y-%m-%d %H:%M:%S')}\n" f"取车时间: {car_info['picked_up_time'].strftime('%Y-%m-%d %H:%M:%S') if car_info['picked_up_time'] else '未取车'}" ) messagebox.showinfo("车辆信息", message) else: messagebox.showerror("查询结果", "未找到该车牌号的车辆信息。") except Exception as e: messagebox.showerror("查询错误", f"查询过程中发生错误: {e}") else: messagebox.showwarning("警告", "车牌号不能为空,请重新输入。") def on_display_info_click(): try: # 调用ParkManage类中的方法来获取所有车辆信息 car_info = park.display_all_cars_info() if cars_info: # 假设cars_info是一个包含车辆信息的列表,每个元素是车辆的字典表示 info_text = "\n".join( [f"车牌号: {car['license_plate']}, 停放时间: {car['parked_time'].strftime('%Y-%m-%d %H:%M:%S')}" f"{', 取车时间: ' + car['picked_up_time'].strftime('%Y-%m-%d %H:%M:%S') if car['picked_up_time'] else ''}" for car in cars_info]) messagebox.showinfo("车辆信息", info_text) else: messagebox.showinfo("信息提示", "当前没有车辆信息可显示。") except Exception as e: messagebox.showerror("错误", f"显示车辆信息时发生错误: {e}") def on_edit_info_click(): # 从界面获取车牌号、车型和颜色 license_plate = license_plate_entry.get().strip() new_model = model_entry.get().strip() new_color = color_entry.get().strip() if not license_plate: messagebox.showerror("错误", "请输入车牌号进行编辑!") return try: # 假设ParkManage类有一个edit_car_info方法用于更新车辆信息 success = park_manage_instance.edit_car_info(license_plate, new_model=new_model, new_color=new_color) if success: messagebox.showinfo("成功", "车辆信息已成功更新。") else: messagebox.showinfo("失败", "未能找到或更新车辆信息,请检查车牌号是否正确。") except Exception as e: messagebox.showerror("错误", f"编辑车辆信息时发生错误: {e}") def on_statistics_click(): try: # 假设ParkManage类中包含以下统计方法 parked_cars_count = park_manage_instance.count_parked_cars() empty_slots = park_manage_instance.count_empty_slots(total_slots=100) # 假设总车位数为100,根据实际情况调整 most_frequent_time = park_manage_instance.most_frequent_parking_time() # 构建统计信息字符串 stats_message = ( f"当前停车数量: {parked_cars_count}\n" f"空闲车位数: {empty_slots}\n" f"最频繁的停车时段: {most_frequent_time}\n" ) messagebox.showinfo("统计信息", stats_message) except Exception as e: messagebox.showerror("错误", f"统计车辆信息时发生错误: {e}") def on_switch_mode(): """处理模式切换的回调函数""" global isAdmin isAdmin = not isAdmin refresh_ui() def on_exit_click(): """处理退出操作的回调函数""" if messagebox.askyesno("退出", "确定要退出吗?"): window.destroy() # 关闭窗口 def refresh_ui(): """根据当前模式刷新界面""" for widget in window.winfo_children(): widget.destroy() tk.Label(window, text=f"欢迎使用停车场管理系统 - {'管理员' if isAdmin else '用户'}模式").pack() buttons = [ ("停车", on_park_click), ("取车", on_pickup_click), ("查询车辆信息", on_inquire_click), ] if isAdmin: additional_buttons = [ ("显示车辆信息", on_display_info_click), ("编辑车辆信息", on_edit_info_click), ("统计信息", on_statistics_click), ("切换至用户模式", on_switch_mode), ] buttons.extend(additional_buttons) else: buttons.append(("切换至管理员模式", on_switch_mode)) buttons.append(("退出", on_exit_click)) for idx, (text, cmd) in enumerate(buttons): tk.Button(window, text=text, command=cmd).pack(fill=tk.X, pady=5) def main_gui(): global window window = tk.Tk() window.title("停车场管理系统") refresh_ui() # 初始化界面 window.mainloop() if __name__ == "__main__": main_gui()