当前位置: 首页 > news >正文

python(13)客户信息管理系统

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

    • 需求说明
      • 主菜单
      • 添加客户
      • 删除客户
      • 修改客户
      • 查询客户
      • 显示客户
      • 退出
    • 代码实现
      • 客户管理系统类

需求说明

主菜单

添加客户

1)添加id
输入纯数字则正常添加。

否则提示id必须为纯数字,并再次输入。

第三次输入时有额外提醒。

三次输入失败后终止添加客户。

id若已存在则终止添加。

2)添加姓名
输入字母或汉字则正常添加。

否则提示姓名必须为字符,并再次输入。

第三次输入时有额外提醒。

三次输入失败后终止添加客户。

3)添加年龄
输入纯数字则正常添加。

否则会有提示,并跳过添加年龄。

4)添加电话
输入符合手机号码格式则正常添加。

不常见的电话号码也可以添加。

不是电话号码则提示,并跳过添加电话。

5)添加邮箱
输入大致符合邮箱格式则正常添加。

若不符合邮箱格式则提示,并跳过添加邮箱。

删除客户

输入要删除的客户的id,不存在则终止,存在则删除。

修改客户

输入要修改的客户的id,只能修改年龄、电话、邮箱。

未设置的属性保持历史数据不变。

查询客户

可以按id或姓名查询,之前未设置的年龄、电话、邮箱显示 None。


显示客户

系统内若没有客户则提示暂无客户信息。

若有客户则显示所有客户信息,之前未设置的年龄、电话、邮箱显示 None。

退出

输入6,或按下 Ctrl + D / Ctrl + C 退出。

代码实现

importreclassCustomer:"""客户类"""def__init__(self,c_id,name,age="None",phone="None",email="None"):"""初始化客户信息"""self.id=c_id# 客户编号self.name=name# 客户姓名self.age=age# 客户年龄self.phone=phone# 客户电话self.email=email# 客户邮箱@staticmethoddefcheck_id(c_id):"""检查id格式"""# 检查客户id是否为纯数字returnc_id.isdigit()@staticmethoddefcheck_name(name):"""检查name格式"""# 检查客户姓名是否为字符returnname.isalpha()@staticmethoddefcheck_age(age):"""检查age格式"""# 检查客户年龄是否为整数returnage.isdigit()@staticmethoddefcheck_phone(phone):"""检查phone格式"""# 检查客户电话是否合法returnTrueifre.match(r"^1[345789]\d{9}$",phone)elseFalse@staticmethoddefcheck_email(email):"""检查email格式"""# 检查客户邮箱是否合法pattern=r"[\w!#$%&'*+-/=?^`{|}~.]+@[\w!#$%&'*+-/=?^`{|}~.]+\.[a-zA-Z]{2,}$"returnTrueifre.match(pattern,email)elseFalsedef__str__(self):"""打印客户信息"""return(f"Id:{self.id:<5}, Name:{self.name:<10}, Age:{self.age:<5}, Phone:{self.phone:<15}"f", Email:{self.email:<25}")

客户管理系统类

importreimporttimefromcustomerimportCustomerclassCMS:"""客户管理系统类"""def__init__(self):"""初始化客户管理系统"""self.customer_id_dict={}# 客户id字典self.customer_name_dict={}# 客户姓名字典defdisplay_menu(self):"""显示菜单"""print(""" ----------客户管理系统---------- 1. 添加客户 2. 删除客户 3. 修改客户 4. 查询客户 5. 显示客户 6. 退出 """)defadd_customer_id(self):"""添加客户id"""# 输入客户id,没问题则返回客户id,有问题则返回Falsecustomer_id="None"foriinrange(3):ifi<2:# 前2次输入,输入错误则重新输入customer_id=input("请输入客户id:")# 检查客户id是否合法ifCustomer.check_id(customer_id):breakelse:print("客户id必须为纯数字")else:# 第3次输入,输入错误则终止添加customer_id=input("最后一次机会,请输入客户id:")# 检查客户id是否合法ifCustomer.check_id(customer_id):breakelse:print("终止添加客户")returnFalse# 检查客户id是否已存在ifcustomer_idinself.customer_id_dict:# 之前存在则终止添加print("客户id已存在,终止添加客户")returnFalseelse:# 之前不存在则返回客户idreturncustomer_iddefadd_customer_name(self):"""添加客户姓名"""# 输入客户姓名,没问题则返回客户姓名,有问题则返回Falsecustomer_name="None"foriinrange(3):ifi<2:# 前2次输入,输入错误则重新输入customer_name=input("请输入客户姓名:")# 检查客户姓名是否合法ifCustomer.check_name(customer_name):breakelse:print("客户姓名必须为字符")else:# 第3次输入,输入错误则终止添加customer_name=input("最后一次机会,请输入客户姓名:")# 检查客户姓名是否合法ifCustomer.check_name(customer_name):breakelse:print("终止添加客户")returnFalsereturncustomer_namedefset_customer_age(self):"""添加或修改客户年龄"""# 输入客户年龄,没问题则返回客户年龄,有问题则返回Falsecustomer_age=input("请输入客户年龄:")# 检查客户年龄是否合法ifCustomer.check_age(customer_age):returncustomer_ageelse:print("好吧,暂时不添加年龄也可以")return"None"defset_customer_phone(self):"""添加或修改客户电话"""# 输入客户电话,没问题则返回客户电话,有问题则返回Falsecustomer_phone=input("请输入客户电话:")# 检查客户电话是否合法ifCustomer.check_phone(customer_phone):returncustomer_phoneelifre.search(r"^[\d-]+$",customer_phone):print("这个电话号码不太常见,但是可以添加")returncustomer_phoneelse:print("好吧,暂时不添加电话号码也可以")return"None"defset_customer_email(self):"""添加或修改客户邮箱"""# 输入客户邮箱,没问题则返回客户邮箱,有问题则返回Falsecustomer_email=input("请输入客户邮箱:")# 检查客户邮箱是否合法ifCustomer.check_email(customer_email):print("邮箱似乎合法")returncustomer_emailelse:print("好吧,暂时不添加邮箱也可以")return"None"defadd_customer(self):"""添加客户"""# 添加客户idifnot(customer_id:=self.add_customer_id()):return# 添加客户姓名ifnot(customer_name:=self.add_customer_name()):return# 添加客户年龄customer_age=self.set_customer_age()# 添加客户电话customer_phone=self.set_customer_phone()# 添加客户邮箱customer_email=self.set_customer_email()# 创建客户对象customer=Customer(customer_id,customer_name,customer_age,customer_phone,customer_email)# 将客户对象添加到客户id字典中self.customer_id_dict[customer_id]=customer# 将客户对象添加到客户姓名字典中,每个姓名key对应一个字典value# 每个字典value包含此姓名的所有客户,字典value的key为客户id,value为客户对象customer_inner_dict=self.customer_name_dict.get(customer_name)ifcustomer_inner_dictisNone:self.customer_name_dict[customer_name]={customer_id:customer}else:customer_inner_dict[customer_id]=customerprint(f"添加客户{customer_id}成功")defdelete_customer(self):"""删除客户"""# 获取输入的客户idcustomer_id=input("请输入要删除的客户id:")# 检查客户id是否合法ifnotCustomer.check_id(customer_id):print("客户id必须为纯数字")print("终止删除客户")return# 检查客户id是否存在ifcustomer_idnotinself.customer_id_dict:print("客户id不存在")print("终止删除客户")returnelse:customer_name=self.customer_id_dict[customer_id].name# 将客户id从客户id字典中删除delself.customer_id_dict[customer_id]# 将客户id从客户姓名字典中删除customer_inner_dict=self.customer_name_dict.get(customer_name)delcustomer_inner_dict[customer_id]iflen(customer_inner_dict)==0:delself.customer_name_dict[customer_name]print(f"客户{customer_id}删除完毕")defupdate_customer(self):"""修改客户"""# 获取输入的客户idcustomer_id=input("请输入要修改的客户id:")# 检查客户id是否合法ifnotCustomer.check_id(customer_id):print("客户id必须为纯数字")print("终止修改客户")return# 检查客户id是否存在ifcustomer_idnotinself.customer_id_dict:print("客户id不存在")print("终止修改客户")return# 修改客户年龄print(f"客户{customer_id}的历史年龄:",self.customer_id_dict[customer_id].age)if(customer_age:=self.set_customer_age())!="None":self.customer_id_dict[customer_id].age=customer_age# 修改客户电话print(f"客户{customer_id}的历史电话:",self.customer_id_dict[customer_id].phone)if(customer_phone:=self.set_customer_phone())!="None":self.customer_id_dict[customer_id].phone=customer_phone# 修改客户邮箱print(f"客户{customer_id}的历史邮箱:",self.customer_id_dict[customer_id].email)if(customer_email:=self.set_customer_email())!="None":self.customer_id_dict[customer_id].email=customer_emailprint(f"客户{customer_id}修改完毕")defsearch_customer(self):"""查询客户"""customer_info=input("请输入要查询的客户id或姓名:")ifCustomer.check_id(customer_info):# 如果输入的是id# 检查客户id是否存在ifcustomer_infoinself.customer_id_dict:print(self.customer_id_dict[customer_info])else:print("客户id不存在")elifCustomer.check_name(customer_info):# 如果输入的是姓名# 检查客户姓名是否存在ifcustomer_infoinself.customer_name_dict:forcustomer_idinself.customer_name_dict[customer_info]:print(self.customer_name_dict[customer_info][customer_id])else:print("客户姓名不存在")else:print("输入的好像不是客户id或姓名")defdisplay_customer(self):"""打印所有客户信息"""iflen(self.customer_id_dict)==0:print("暂无客户信息")foriinself.customer_id_dict:print(self.customer_id_dict[i])defstart(self):"""启动客户管理系统"""try:whileTrue:self.display_menu()choice=input("<< ")matchchoice:case"1":self.add_customer()case"2":self.delete_customer()case"3":self.update_customer()case"4":self.search_customer()case"5":self.display_customer()case"6":print(f"{"\b \b"*100}退出客户管理系统")breakcase_:print(">> ???")time.sleep(1)except(EOFError,KeyboardInterrupt):print(f"{"\b \b"*100}退出客户管理系统")if__name__=="__main__":cms=CMS()cms.start()
http://www.cnnetsun.cn/news/1773279.html

相关文章:

  • 揭秘.NET 9低代码编译管道:如何将Blazor + Source Generators响应式编译速度提升5.8倍?
  • C++内存管理 C++模板
  • 告别 redis-cli 敲断手!实测 gmssh Redis 管理器:一次线上 OOM 救场的极限复盘
  • ATCODER ABC C题解米
  • 可视掏耳勺是智商税吗?西圣、蜂鸟两大爆品掏耳勺对比,避坑必看
  • 分布式系统中枢:ZooKeeper 原理、选举与应用
  • 独家披露:Mojo官方未公开的插件签名验证机制(含Python extension loader源码级逆向分析)
  • Nikto Web 服务器扫描工具详解
  • 容器内.NET 9异常堆栈丢失?教你用dotnet-dump + lldb精准捕获托管/非托管混合崩溃现场(附GDB脚本模板)
  • 一文了解Prompt类型、设计和实战例子
  • 2026年你真正需要的10个Claude插件(以及它们是什么)
  • TrollInstallerX:iOS 14.0-16.6.1系统的TrollStore安装工具
  • OpenClaw+Qwen3-14B镜像测评:Token消耗与任务成功率实测
  • OpenClaw节日营销:Phi-3-mini-128k-instruct自动化祝福系统
  • OpenClaw+千问3.5-9B浏览器自动化:定时抓取指定网页
  • 拆穿名词诈骗!用大白话理解晦涩难懂的AI概念寥
  • OpenClaw个人健康助手:千问3.5-35B-A3B-FP8分析运动手环截图生成周报
  • 【应用案例】电价“先知”!IoTDB 结合 AI 能力,实现电价精准预测
  • 【4月最新】降AI率不花一分钱!10款主流工具极限脱水测评,附纯免费通关攻略
  • Shapley 值清晰解释
  • 手把手教你用C#和VISA库控制Keysight 34461A万用表(VS2022环境)
  • 基于CBLOF算法的用电异常用户识别:原理、实践与工程落地(上篇)
  • 一人带多个数字帮手干活的新方式,人+智能体协同工作
  • 深入浅出Linux ftrace:从内核配置到实战分析(附debugfs挂载全流程)
  • 24|MCP 入门:让 Agent 以标准方式接入外部系统
  • [具身智能-296]:什么是语音识别,其输入、处理、输出
  • Python 爬虫实战:从入门到精通,爬取某站数据
  • OAuth2.0令牌安全指南:在Postman中模拟令牌泄露与防御实验
  • OpenClaw浏览器自动化:Qwen3-4B操控Chrome完成数据采集
  • 激活符文的最小水晶数量(python、贪心算法)