Python工单系统开发疑问:如何实现工单存储、查看与编号查询?
工单系统实现思路与代码修改方案
核心问题梳理
- 未持久化存储工单:创建Ticket对象后未存入容器,导致后续无法查询
- 工单编号固定无区分:所有工单编号都是2000,无法识别不同工单
- 菜单无循环逻辑:用户操作一次后程序直接结束,无法进行后续操作
- 缺少查看、搜索功能的实现函数
分步修改方案
1. 修复工单存储与编号自增
修改Ticket类,用类属性存储所有工单,同时实现工单编号自增:
class Ticket(object): # 类属性:存储所有工单对象 all_tickets = [] # 类属性:工单起始编号 next_ticket_num = 2000 def __init__(self, staffid, staffname, staffemail, issue): self.staffid = staffid self.staffname = staffname self.staffemail = staffemail self.issue = issue self.status = 'open' self.answer = 'None' # 分配唯一编号并自增 self.ticketnum = Ticket.next_ticket_num Ticket.next_ticket_num += 1 # 将当前工单存入全局列表 Ticket.all_tickets.append(self) def __str__(self): # 定义工单打印格式,提升可读性 return (f"工单编号: {self.ticketnum}\n" f"员工ID: {self.staffid}\n" f"员工姓名: {self.staffname}\n" f"员工邮箱: {self.staffemail}\n" f"问题描述: {self.issue}\n" f"工单状态: {self.status}\n" f"回复内容: {self.answer}\n" "------------------------")
2. 实现菜单循环与功能函数
添加查看所有工单、按编号搜索的函数,同时实现菜单循环逻辑:
class MenuList(object): menu_options = { 0: '退出', 1: '提交工单', 2: '查看所有工单', 3: '按工单编号搜索', 4: '重新打开已解决工单', 5: '显示工单统计' } @classmethod def show_menu(cls): print("\n=== 工单系统菜单 ===") for key, value in cls.menu_options.items(): print(f"{key}: {value}") def submit(): staffname = input('请输入员工姓名: ') staffid = input('请输入员工ID: ') staffemail = input('请输入邮箱地址: ') issue = input('请描述问题: ') if issue == 'Password change': newpass = staffid[:2] + staffname[:3] print(f"你的新密码是: {newpass}") # 创建工单对象,自动存入全局列表 Ticket(staffid, staffname, staffemail, issue) print("工单提交成功!") new_ticket = input('是否还有其他问题要提交?(Y/N)') if new_ticket.upper() == 'Y': submit() def show_all_tickets(): if not Ticket.all_tickets: print("暂无工单记录") return print("\n=== 所有工单列表 ===") for ticket in Ticket.all_tickets: print(ticket) def search_ticket_by_num(): if not Ticket.all_tickets: print("暂无工单记录") return try: ticket_num = int(input('请输入要搜索的工单编号: ')) # 遍历查找对应编号的工单 found_ticket = None for ticket in Ticket.all_tickets: if ticket.ticketnum == ticket_num: found_ticket = ticket break if found_ticket: print("\n=== 搜索到的工单 ===") print(found_ticket) else: print(f"未找到编号为{ticket_num}的工单") except ValueError: print("输入无效,请输入数字类型的工单编号") # 主循环:持续显示菜单直到用户退出 def main(): while True: MenuList.show_menu() try: option = int(input('请输入你的选择: ')) if option == 0: print("退出系统") break elif option == 1: submit() elif option == 2: show_all_tickets() elif option == 3: search_ticket_by_num() elif option == 4: print("该功能暂未实现") elif option == 5: print("该功能暂未实现") else: print("输入错误,请选择菜单中的选项") except ValueError: print("输入无效,请输入数字") if __name__ == "__main__": main()
3. 关键修改说明
- 工单存储:用Ticket类的
all_tickets列表保存所有工单对象,为后续查询提供数据来源 - 编号自增:通过类属性
next_ticket_num实现编号自动递增,保证每个工单编号唯一 - 菜单循环:main函数的while循环让菜单持续显示,支持用户多次操作
- 查看与搜索:遍历
all_tickets列表,分别实现全部打印和按编号精准匹配 - 格式化输出:重写
__str__方法,让工单打印格式更清晰易读
内容的提问来源于stack exchange,提问作者FlyGirll
相关产品推荐
相关产品推荐

