You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 09:05:21