提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档文章目录需求说明主菜单添加客户删除客户修改客户查询客户显示客户退出代码实现客户管理系统类需求说明主菜单添加客户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,ageNone,phoneNone,emailNone):初始化客户信息self.idc_id# 客户编号self.namename# 客户姓名self.ageage# 客户年龄self.phonephone# 客户电话self.emailemail# 客户邮箱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)elseFalsestaticmethoddefcheck_email(email):检查email格式# 检查客户邮箱是否合法patternr[\w!#$%*-/?^{|}~.][\w!#$%*-/?^{|}~.]\.[a-zA-Z]{2,}$returnTrueifre.match(pattern,email)elseFalsedef__str__(self):打印客户信息return(fId:{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_idNoneforiinrange(3):ifi2:# 前2次输入输入错误则重新输入customer_idinput(请输入客户id:)# 检查客户id是否合法ifCustomer.check_id(customer_id):breakelse:print(客户id必须为纯数字)else:# 第3次输入输入错误则终止添加customer_idinput(最后一次机会请输入客户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_nameNoneforiinrange(3):ifi2:# 前2次输入输入错误则重新输入customer_nameinput(请输入客户姓名:)# 检查客户姓名是否合法ifCustomer.check_name(customer_name):breakelse:print(客户姓名必须为字符)else:# 第3次输入输入错误则终止添加customer_nameinput(最后一次机会请输入客户姓名:)# 检查客户姓名是否合法ifCustomer.check_name(customer_name):breakelse:print(终止添加客户)returnFalsereturncustomer_namedefset_customer_age(self):添加或修改客户年龄# 输入客户年龄没问题则返回客户年龄有问题则返回Falsecustomer_ageinput(请输入客户年龄:)# 检查客户年龄是否合法ifCustomer.check_age(customer_age):returncustomer_ageelse:print(好吧暂时不添加年龄也可以)returnNonedefset_customer_phone(self):添加或修改客户电话# 输入客户电话没问题则返回客户电话有问题则返回Falsecustomer_phoneinput(请输入客户电话:)# 检查客户电话是否合法ifCustomer.check_phone(customer_phone):returncustomer_phoneelifre.search(r^[\d-]$,customer_phone):print(这个电话号码不太常见但是可以添加)returncustomer_phoneelse:print(好吧暂时不添加电话号码也可以)returnNonedefset_customer_email(self):添加或修改客户邮箱# 输入客户邮箱没问题则返回客户邮箱有问题则返回Falsecustomer_emailinput(请输入客户邮箱:)# 检查客户邮箱是否合法ifCustomer.check_email(customer_email):print(邮箱似乎合法)returncustomer_emailelse:print(好吧暂时不添加邮箱也可以)returnNonedefadd_customer(self):添加客户# 添加客户idifnot(customer_id:self.add_customer_id()):return# 添加客户姓名ifnot(customer_name:self.add_customer_name()):return# 添加客户年龄customer_ageself.set_customer_age()# 添加客户电话customer_phoneself.set_customer_phone()# 添加客户邮箱customer_emailself.set_customer_email()# 创建客户对象customerCustomer(customer_id,customer_name,customer_age,customer_phone,customer_email)# 将客户对象添加到客户id字典中self.customer_id_dict[customer_id]customer# 将客户对象添加到客户姓名字典中每个姓名key对应一个字典value# 每个字典value包含此姓名的所有客户字典value的key为客户idvalue为客户对象customer_inner_dictself.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_idinput(请输入要删除的客户id:)# 检查客户id是否合法ifnotCustomer.check_id(customer_id):print(客户id必须为纯数字)print(终止删除客户)return# 检查客户id是否存在ifcustomer_idnotinself.customer_id_dict:print(客户id不存在)print(终止删除客户)returnelse:customer_nameself.customer_id_dict[customer_id].name# 将客户id从客户id字典中删除delself.customer_id_dict[customer_id]# 将客户id从客户姓名字典中删除customer_inner_dictself.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_idinput(请输入要修改的客户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].agecustomer_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].phonecustomer_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].emailcustomer_emailprint(f客户{customer_id}修改完毕)defsearch_customer(self):查询客户customer_infoinput(请输入要查询的客户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()choiceinput( )matchchoice:case1:self.add_customer()case2:self.delete_customer()case3:self.update_customer()case4:self.search_customer()case5:self.display_customer()case6:print(f{\b \b*100}退出客户管理系统)breakcase_:print( ???)time.sleep(1)except(EOFError,KeyboardInterrupt):print(f{\b \b*100}退出客户管理系统)if__name____main__:cmsCMS()cms.start()