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()