此代码未实现输入是否合法的判断,统一使用字符串类型来存储输入的数据
主要功能有4个
1、新建名片
需要使用键盘输入姓名、年龄、电话
2、显示全部名片
判断名片库中是否有名片
如果有名片就输出所有名片信息
如果没有名片就引导用户新建名片
3、查询名片
通过姓名进行查询,如果名片库为空也会引导用户新建名片
名片库不为空就查询,将查询到的名片信息返回
如果没有查询到就打印查无此人提示信息,并返回上一层
4、退出
主程序为while死循环,当用户选择退出功能时就跳出循环结束程序。
程序分为主程序模块cards_main.py和功能程序模块cards_tolols.py
import cards_tools
"""主程序,只负责调用模块"""
while True:
cards_tools.huanying()
temp = input("请输入功能序号:")
if temp == "1":
cards_tools.create_card()
elif temp == "2":
cards_tools.show_all_cards()
elif temp == "3":
cards_tools.search_card()
elif temp == "0":
print("感谢您的本次使用,欢迎下次光临!")
print("*" * 50)
break
else:
print("*" * 50)
print("输入有误,请重新输入")
# 欢迎界面
def huanying():
print("*" * 50)
print("欢迎使用名片管理系统 V1.0")
print("1.新建名片")
print("2.显示全部")
print("3.查询名片")
print("")
print("0.退出系统")
print("*" * 50)
# 使用列表嵌套字典来存储名片
cards_list = []
def create_card():
"""增加名片"""
print("=" * 50)
# TODO 没用实现数据的校验
# 使用input获取键盘的输入,全部存储为字符串类型
name_str = input("请输入姓名:")
age_int = input("请输入年龄:")
phone_int = input("请输入手机号:")
# 将值传出字典
card_dict = {"name": name_str, "age": age_int, "phone": phone_int}
# 将字典添加到列表中
cards_list.append(card_dict)
print("%s的名片添加成功!!!" % card_dict["name"])
def show_all_cards():
"""显示所有名片"""
# 判断名片库是否为空
if len(cards_list) <= 0:
print("名片库为空")
# 新增还是返回,输入错误自动返回
temp = input("【1】新增/【2】返回")
if temp == "1":
create_card()
elif temp == 2:
return
else:
print("输入有误,自动返回")
return
# 因为有return的存在,名片库不为空是才执行下面的代码
# 将所有的名片列出
# 输出表头
for i in ["姓名", "年龄", "电话"]:
print(i, end="\t\t\t")
print("")
print("=" * 50)
# 输出名片数据
for card in cards_list:
print("%s\t\t\t%s\t\t\t%s" % (card["name"], card["age"], card["phone"]))
def search_card():
"""查询名片"""
# 判断名片库是否为空
if len(cards_list) <= 0:
print("名片库为空")
# 新增还是返回,输入错误自动返回
temp = input("【1】新增/【2】返回")
if temp == "1":
create_card()
elif temp == 2:
return
else:
print("输入有误,自动返回")
return
# 名片库不为空时允许查询
name = input("请输入要查询的姓名:")
# 遍历列表查询
for find_card in cards_list:
# 将名片库中的姓名与输入内容对比,存在输出,并选择操作修改、删除、返回
if find_card["name"] == name:
print("姓名\t\t\t年龄\t\t\t电话")
print("=" * 50)
print("%s\t\t\t%s\t\t\t%s" % (find_card["name"], find_card["age"], find_card["phone"]))
while True:
# 查询到数据后是否进行操作
temp_select = input("请选择您的操作:【1】修改【2】删除【0】返回")
if temp_select == '1':
# 修改操作
find_card["name"] = select_card(find_card["name"], input("姓名:(回车不修改)"))
find_card["age"] = select_card(find_card["age"], input("年龄:(回车不修改)"))
find_card["phone"] = select_card(find_card["phone"], input("电话:(回车不修改)"))
print("名片修改成功!!!")
elif temp_select == '2':
# 删除操作
cards_list.remove(find_card)
print("名片删除成功!!!")
return
elif temp_select == '0':
# 返回操作
return
else:
print("输入有误!!!")
# 没有查询到输出提示信息并返回上一层
else:
print("查无此人!!!")
return
def select_card(value, tip_message):
"""对查询后的操作扩展"""
# 如果不输入内容,继续使用之前的值
if len(tip_message) <= 0:
return value
# 如果有内容输入就,将会修改之前的值
else:
return tip_message
?
import cards_tools
"""主程序,只负责调用模块"""
while True:
cards_tools.huanying()
temp = input("请输入功能序号:")
try:
if temp == "1":
cards_tools.create_card()
elif temp == "2":
cards_tools.show_all_cards()
elif temp == "3":
cards_tools.search_card()
elif temp == "0":
print("感谢您的本次使用,欢迎下次光临!")
print("*" * 50)
break
else:
print("*" * 50)
print("输入有误,请重新输入")
except ValueError:
print("数据类型错误,修改失败")
except Exception as result:
print(result)
def huanying():
"""欢迎界面"""
print("*" * 50)
print("欢迎使用名片管理系统 V2.0")
print("1.新建名片")
print("2.显示全部")
print("3.查询名片")
print("")
print("0.退出系统")
print("*" * 50)
# 使用列表嵌套字典来存储名片
cards_list = []
def len_check(len_num, num):
"""检测数据长度方法"""
# 需要传入一个规定长度,和数据
# 如果数据长度超过规定长度,就会抛出异常,提示用户数据超长
# 如果符合长度就返回数据
num = str(num)
if len(num) > len_num:
ex = Exception("数据超出规定长度,修改失败")
raise ex
return num
def create_card():
"""增加名片"""
print("=" * 50)
# 使用input获取键盘的输入,全部存储为字符串类型
name_str = input("请输入姓名:")
# 先调用len_check方法检查数据长度
"""长度合法后将数据转换为符合的数据类型
如果类型转换时出现错误就说明,用户传入的数据类型违规
利用异常的传递性,将异常信息传递到调用的函数处
终止本次创建名片,并提示用户"""
age_int = int(len_check(2, input("请输入年龄:")))
phone_int = int(len_check(11, input("请输入手机号:")))
# 将值传出字典
card_dict = {"name": name_str, "age": age_int, "phone": phone_int}
# 将字典添加到列表中
cards_list.append(card_dict)
print("%s的名片添加成功!!!" % card_dict["name"])
def show_all_cards():
"""显示所有名片"""
# 判断名片库是否为空
if len(cards_list) <= 0:
print("名片库为空")
# 新增还是返回,输入错误自动返回
temp = input("【1】新增/【2】返回")
if temp == "1":
create_card()
elif temp == "2":
return
else:
print("输入有误,自动返回")
return
# 因为有return的存在,名片库不为空是才执行下面的代码
# 将所有的名片列出
# 输出表头
for i in ["姓名", "年龄", "电话"]:
print(i, end="\t\t\t")
print("")
print("=" * 50)
# 输出名片数据
for card in cards_list:
print("%s\t\t\t%s\t\t\t%s" % (card["name"], card["age"], card["phone"]))
def search_card():
"""查询名片"""
# 判断名片库是否为空
if len(cards_list) <= 0:
print("名片库为空")
# 新增还是返回,输入错误自动返回
temp = input("【1】新增/【2】返回")
if temp == "1":
create_card()
elif temp == 2:
return
else:
print("输入有误,自动返回")
return
# 名片库不为空时允许查询
name = input("请输入要查询的姓名:")
# 遍历列表查询
for find_card in cards_list:
# 将名片库中的姓名与输入内容对比,存在输出,并选择操作修改、删除、返回
if find_card["name"] == name:
print("姓名\t\t\t年龄\t\t\t电话")
print("=" * 50)
print("%s\t\t\t%s\t\t\t%s" % (find_card["name"], find_card["age"], find_card["phone"]))
while True:
# 查询到数据后是否进行操作
temp_select = input("请选择您的操作:【1】修改【2】删除【0】返回")
if temp_select == '1':
# 修改操作
find_card["name"] = select_card(find_card["name"], input("姓名:(回车不修改)"))
# 使用异常来检测数据
find_card["age"] = int(len_check(2, select_card(find_card["age"], input("年龄:(回车不修改)"))))
find_card["phone"] = int(len_check(11, select_card(find_card["phone"], input("电话:(回车不修改)"))))
print("名片修改成功!!!")
elif temp_select == '2':
# 删除操作
cards_list.remove(find_card)
print("名片删除成功!!!")
return
elif temp_select == '0':
# 返回操作
return
else:
print("输入有误!!!")
# 没有查询到输出提示信息并返回上一层
else:
print("查无此人!!!")
return
def select_card(value, tip_message):
"""对查询后的操作扩展"""
# 如果不输入内容,继续使用之前的值
if len(tip_message) <= 0:
return value
# 如果有内容输入就,将会修改之前的值
else:
return tip_message