面向对象实现电话簿
"""
使用面型对象思想实现电话簿
采用封装,继承等手段实现。
题目分析:
电话簿中一般实现都是{人名:电话},但是人名出现重复怎们做
删除电话:根据人名删除还是电话删除
修改电话:修改人名还是修改电话
查询:人名查电话还是电话查人名,是准确查找还是模糊查找呢
================================================
针对上述问题实现一个电话簿
"""
class base_check(object):
"""
实现一个检测输入的类:因为电话簿中存在大量的输入操作,因此对于输入的人名或者是电话都需要一个检测
"""
def check_name_phone(self, name=None, phone=None):
# 检测人名的合法性
if name is not None:
# 判断名字是不是字符串
if isinstance(name, str):
# 名字长度大于0小于等于30,并且由字符组成
if 0 < len(name) <= 30 and name.isalpha():
return True
else:
return False
else:
return False
if phone is not None:
# 电话是字符串
if isinstance(phone, str):
# 电话大于等于3并且小于等于11,并且电话是由数字组成的
if 3 <= len(phone) <= 11 and phone.isdigit():
return True
else:
return False
else:
return False
# 获取人名
def get_name(self):
name = input("【输入联系人】: ").strip() # 去点多余的前后空格
while True:
if self.check_name_phone(name=name):
return name
else:
name = input("【姓名格式有误,请重新输入联系人】: ").strip() # 去点多余的前后空格
# 获取电话
def get_phone(self):
phone = input("【输入电话号】: ").strip() # 去点多余的前后空格
while True:
if self.check_name_phone(phone=phone):
return phone
else:
phone = input("【电话格式有误,请重新输入电话号】: ").strip() # 去点多余的前后空格
class phonedir(base_check):
"""
这个类用于实现电话簿的增删改操作
"""
def __init__(self):
self.__dir = {} # 私有的字典存储{电话:姓名}
# 添加
def add(self):
name = self.get_name()
phone = self.get_phone()
self.__dir[phone] = name
print("添加成功!\n",
{name : phone})
# 删除
def rem(self):
while True:
tmp = input("【选择删除方式:1-根据人名删除 2-根据电话删除 3-退出本次删除操作】:")
if tmp == "1":
name = self.get_name()
if name in self.__dir.values():
for i in self.__dir.items(): # items方法返回键值对
if i[1] == name:
self.__dir.pop(i[0])
break
print("删除成功!")
else:
print("待删除姓名不存在!")
break
elif tmp == "2":
phone = self.get_phone()
if phone in self.__dir.keys():
self.__dir.pop(phone)
print("删除成功!")
else:
print("待删除的电话不存在!")
break
elif tmp == "3":
break
else:
print("标签有误重新输入!")
# 修改姓名或者电话
def edit(self):
while True:
tmp = input("【选择删除方式:1-修改人名 2-修改电话 3-结束本次修改操作】:")
if tmp == "1":
name = self.get_name()
if name in self.__dir.values():
for i in self.__dir.items():
if i[1] == name:
print("下面输入新姓名!")
new_name = self.get_name()
self.__dir[i[0]] = new_name
print("修改成功!")
break
else:
print("带修改得人名不存在!")
break
elif tmp == "2":
phone = self.get_phone()
if phone in self.__dir.keys():
name = self.__dir[phone] # 保存姓名,因为电话是key,姓名是value
self.__dir.pop(phone)
print("下面输入新电话!")
new_phone = self.get_phone()
self.__dir[new_phone] = name
print("修改成功!")
elif tmp == "3":
break
else:
print("标签有误重新输入!")
# 明确查询
def find_nameorphone(self):
while True:
tmp = input("【选择查询方式:1-通过姓名查询 2-通过电话查询 3-结束本次查询】:")
if tmp == "1":
name = self.get_name()
if name in self.__dir.values():
for i in self.__dir.items():
if i[1] == name:
print({name:i[0]})
print("查询成功!")
break
else:
print("查询的姓名不存在!")
elif tmp == "2":
phone = self.get_phone()
if phone in self.__dir.keys():
print({self.__dir[phone]:phone})
else:
print("查询的电话不存在!")
elif tmp == "3":
break
else:
print("标签有误重新输入!")
# 模糊查询,根据姓名或者电话的前缀查询
def find_nameorphone_pos(self):
while True:
tmp = input("【选择查询方式:1-通过姓名前缀查询 2-通过电话前缀查询(最少三位数字) 3-结束本次查询】:")
if tmp == "1":
name_pos = self.get_name()
for i in self.__dir.items():
if str(i[1]).find(name_pos,0) != -1:
print({str(i[1]):str(i[0])})
else:
print("未找到相关联系人!")
elif tmp == "2":
phone_pos = self.get_phone()
for i in self.__dir.keys():
if str(i).find(phone_pos,0):
print({self.__dir[i]:i})
else:
print("未找到相关联系人!")
elif tmp == "3":
break
else:
print("标签有误重新输入!")
def showall(self):
print("------电话簿------人数%d"%(len(self.__dir)))
for i in self.__dir.items():
print({str(i[1]):str(i[0])})
print("-----------------------")
class Main():
"""
这个类是最后的封装类,给用户使用的类
"""
def __init__(self):
self.__phonedir = phonedir()
# 打印一个提示目录
def __Print(self):
while True:
opt = input("==============================\n"
"= ******欢迎使用我的电话簿******=\n"
"= 1-------添加联系人 =\n"
"= 2-------删除联系人 =\n"
"= 3-------修改联系人 =\n"
"= 4-------精准查询联系人 =\n"
"= 5-------模糊查询联系人 =\n"
"= 6-------显示所有联系人 =\n"
"= 7-------退出电话簿 =\n"
"===============================\n"
"请输入:")
if opt.isdigit() and int(opt) > 0 and int(opt) < 8:
return opt
else:
print("输入标签有误重新输入!")
def main(self):
while True:
opt = self.__Print()
if opt == "1":
self.__phonedir.add()
elif opt == "2":
self.__phonedir.rem()
elif opt == "3":
self.__phonedir.edit()
elif opt == "4":
self.__phonedir.find_nameorphone()
elif opt == "5":
self.__phonedir.find_nameorphone_pos()
elif opt == "6":
self.__phonedir.showall()
else:
print("欢迎下次使用!")
break
main = Main()
main.main()
一个正在努力学习python的小白!