第14章 客户管理系统
14.1 需求说明
https://zjqzxy.top/doc/综合案例—客户管理系统.pdf
14.2 代码实现
14.2.1 客户类
"""
客户类
"""
import re
class Customer:
"""客户类"""
def __init__(self, id, name, age, phone, email):
"""
初始化客户信息
:param id: 客户编号
:param name: 客户姓名
:param age: 客户年龄
:param phone: 客户手机号
:param email: 客户邮箱
"""
self.id = id
self.name = name
self.age = age
self.phone = phone
self.email = email
@staticmethod
def check_id(c_id):
"""
检查编号是否为正整数
:param id: 客户编号
:return: True/False
"""
return c_id.isdigit() and int(c_id) > 0
@staticmethod
def check_name(c_name):
"""
检查姓名是否为字符
:param name: 客户姓名
:return: True/False
"""
return c_name.isalpha()
@staticmethod
def check_age(c_age):
"""
检查年龄是否为合法年龄值
:param age: 客户年龄
:return: True/False
"""
return c_age.isdigit() and 0 < int(c_age) < 120
@staticmethod
def check_phone(c_phone):
"""
检查手机号是否合法
:param phone: 客户手机号
:return: True/False
"""
return re.match(r"^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])d{8}$", c_phone) is not None
@staticmethod
def check_email(c_email):
"""
检查邮箱是否合法
:param email: 客户邮箱
:return: True/False
"""
return re.match(r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$", c_email) is not None
def __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}")
14.2.2 客户管理类
"""
客户管理类
"""
from Customer import Customer
class CustomerManager:
"""客户管理类"""
def __init__(self):
"""初始化客户管理系统"""
self.customer_id_dict = {} # 客户id字典
self.customer_name_dict = {} # 客户姓名字典
def menu(self):
"""显示菜单"""
print("-" * 50)
print("欢迎使用客户管理系统")
print("1. 添加客户")
print("2. 显示所有客户")
print("3. 查询客户")
print("4. 删除客户")
print("5. 修改客户")
print("6. 退出系统")
print("-" * 50)
def start(self):
"""启动系统"""
try:
while True:
self.menu()
choice = input("请选择操作:")
if choice == "1":
self.add_customer()
elif choice == "2":
self.list_all_customers()
elif choice == "3":
self.search_customer()
elif choice == "4":
self.delete_customer()
elif choice == "5":
self.update_customer()
elif choice == "6":
print("感谢使用客户管理系统")
break
else:
print("输入错误,请重新输入")
continue
except (EOFError, KeyboardInterrupt, ValueError):
print(f"退出客户管理系统")
def input_customer_id(self):
"""
输入客户编号
:return: 客户编号
"""
for i in range(3):
c_id = input("请输入客户编号:")
if Customer.check_id(c_id):
if c_id in self.customer_id_dict:
print(f"编号已存在,请重新输入,你还有{2-i}次机会")
else:
return c_id
else:
print(f"编号格式错误,请重新输入,你还有{2-i}次机会")
raise ValueError("输入错误次数过多")
def input_customer_name(self):
"""
输入客户姓名
:return: 客户姓名
"""
for i in range(3):
c_name = input("请输入客户姓名:")
if Customer.check_name(c_name):
if c_name in self.customer_name_dict:
print(f"姓名已存在,请重新输入,你还有{2-i}次机会")
else:
return c_name
else:
print(f"姓名格式错误,请重新输入,你还有{2-i}次机会")
raise ValueError("输入错误次数过多")
def input_customer_age(self):
"""
输入客户年龄
:return: 客户年龄
"""
for i in range(3):
c_age = input("请输入客户年龄:")
if Customer.check_age(c_age):
return c_age
else:
print(f"年龄格式错误,请重新输入,你还有{2-i}次机会")
raise ValueError("年龄输入错误次数过多")
def input_customer_phone(self):
"""
输入客户电话
:return: 客户电话
"""
for i in range(3):
c_phone = input("请输入客户手机号:")
if Customer.check_phone(c_phone):
return c_phone
else:
print(f"手机号格式错误,请重新输入,你还有{2-i}次机会")
raise ValueError("手机号输入错误次数过多")
def input_customer_email(self):
"""
输入客户邮箱
:return: 客户邮箱
"""
for i in range(3):
c_email = input("请输入客户邮箱:")
if Customer.check_email(c_email):
return c_email
else:
print(f"邮箱格式错误,请重新输入,你还有{2-i}次机会")
raise ValueError("邮箱输入错误次数过多")
def add_customer(self):
"""
添加客户
:return:客户对象
"""
try:
c_id=self.input_customer_id()
c_name=self.input_customer_name()
c_age=self.input_customer_age()
c_phone=self.input_customer_phone()
c_email=self.input_customer_email()
cus= Customer(c_id,c_name,c_age,c_phone,c_email)
self.customer_id_dict[c_id]=cus
self.customer_name_dict[c_name]=cus
except ValueError as e:
print(e)
return None
def list_all_customers(self):
"""
列出所有客户信息
:return: None
"""
for cus in self.customer_id_dict.values():
print(cus)
print()
def search_customer(self):
"""
根据编号查询客户信息
:return: None
"""
c_id = input("请输入要删除的客户编号:")
cus = self.customer_id_dict.get(c_id)
if cus is not None:
print(cus)
else:
print("未找到该客户")
def delete_customer(self):
"""
删除客户信息
:return: None
"""
c_id = input("请输入要删除的客户编号:")
cus = self.customer_id_dict.get(c_id)
if cus is not None:
del self.customer_id_dict[c_id]
del self.customer_name_dict[cus.name]
print(f"删除客户信息成功:{cus}")
else:
print("未找到该客户")
def update_customer_id(self,c_id):
"""
输入客户的新编号
:return: 客户的新编号
"""
for i in range(3):
new_c_id = input(f"请输入客户的新编号({c_id}):")
if new_c_id == "":
return c_id
if Customer.check_id(new_c_id):
if new_c_id in self.customer_id_dict and new_c_id != c_id:
print(f"编号已存在,请重新输入,你还有{2-i}次机会")
else:
return new_c_id
else:
print(f"编号格式错误,请重新输入,你还有{2-i}次机会")
raise ValueError("输入错误次数过多")
def update_customer_name(self,c_name):
"""
输入客户的新姓名
:return: 客户的新姓名
"""
for i in range(3):
new_c_name = input(f"请输入客户的新姓名({c_name}):")
if new_c_name == "":
return c_name
if Customer.check_id(new_c_name):
if new_c_name in self.customer_name_dict and new_c_name != c_name:
print(f"客户姓名已存在,请重新输入,你还有{2-i}次机会")
else:
return new_c_name
else:
print(f"编号格式错误,请重新输入,你还有{2-i}次机会")
raise ValueError("输入错误次数过多")
def update_customer_age(self,c_age):
"""
输入客户年龄
:return: 客户年龄
"""
for i in range(3):
new_c_age = input(f"请输入客户的新年龄({c_age}):")
if new_c_age == "":
return c_age
if Customer.check_age(new_c_age):
return new_c_age
else:
print(f"年龄格式错误,请重新输入,你还有{2-i}次机会")
raise ValueError("年龄输入错误次数过多")
def update_customer_phone(self,c_phone):
"""
输入客户电话
:return: 客户电话
"""
for i in range(3):
new_c_phone = input(f"请输入客户的新手机号({c_phone}):")
if new_c_phone == "":
return c_phone
if Customer.check_phone(new_c_phone):
return new_c_phone
else:
print(f"手机号格式错误,请重新输入,你还有{2-i}次机会")
raise ValueError("手机号输入错误次数过多")
def update_customer_email(self,c_email):
"""
输入客户邮箱
:return: 客户邮箱
"""
for i in range(3):
new_c_email = input(f"请输入客户的新邮箱({c_email}):")
if new_c_email == "":
return c_email
if Customer.check_email(new_c_email):
return new_c_email
else:
print(f"邮箱格式错误,请重新输入,你还有{2-i}次机会")
raise ValueError("邮箱输入错误次数过多")
def update_customer(self):
"""
修改客户信息
:return: None
"""
for i in range(3):
c_id_name = input("请输入要修改的客户编号或姓名:")
cus = self.customer_id_dict.get(c_id_name)
if cus is None:
cus = self.customer_name_dict.get(c_id_name)
if cus is not None:
print(cus)
print("新输入客户的新信息,直接回车表示不修改")
try:
c_id = self.update_customer_id(cus.id)
c_name = self.update_customer_name(cus.name)
c_age = self.update_customer_age(cus.age)
c_phone = self.update_customer_phone(cus.phone)
c_email = self.update_customer_email(cus.email)
cus = Customer(c_id, c_name, c_age, c_phone, c_email)
self.customer_id_dict[c_id] = cus
self.customer_name_dict[c_name] = cus
print("更新成功!")
return None
except ValueError as e:
print(e)
return None
else:
print(f"客户不存在,请重新输入,你还有{2-i}次输入机会")
raise ValueError("输入错误次数过多")
if __name__ == "__main__":
cms = CustomerManager()
cms.start()