#显示菜单
def display_menu():
print("-" * 30)
print(" 名片管理系统 v9")
print("1. 添加名片")
print("2. 删除名片")
print("3. 修改名片")
print("4. 查询指定名片")
print("5. 显示所有名片信息")
print("6. 退出系统")
print("-" * 30)
# 获取用户输入的信息
def get_choice():
selected_key = input("请输入选择的序号:")
return selected_key
# 添加名片
def add_info():
global id
id += 1
new_name = input("请输入姓名:")
new_age = input("请输入年龄:")
new_job = input("请输入工作:")
new_phone = input("请输入联系电话:")
#将每个人的信息存入一个字典
card = {}
card['编号'] = id
card['姓名'] = new_name
card['年龄'] = new_age
card['工作'] = new_job
card['联系电话'] = new_phone
#将所有字典存入列表
list.append(card)
print("您新存入的信息为:")
print(card)
print("*请记住自己的编号")
#方便用户看到自己刚才输入的信息,所以用输入信息的方式在此界面停留
re = input("请输入回车键返回菜单列表...")
#删除指定名片
def del_card(del_list):
#需要把输入的字符串类型转换成整型,不然下面的k==id无法进行判断
id = int(input("请输入需要删除的名片编号:"))
#定义一个计数器,如果查询玩整个列表都没有找到匹配项,那么就退回到菜单界面
count = 0
#定义个标记,否则必定会输出”查无此编号!“。因为无法用break跳出两层循环
flag_1 = 0
#遍历列表内的每个字典,按照指定的编号删除名片
#网上查的reversed方法,如果不用这种方式遍历,则会因为列表长度的改变而报错
for i in reversed(range(len(del_list))):
count += 1
k = del_list[i].get("编号","none")
if k == id :
#显示将要删除的信息
print("您即将删除的信息为:\n",del_list[i])
#确认删除
j = 1
while (j):
in_content = input("是否确认删除(Y/N)?")
if in_content == "Y" or in_content == "y":
del del_list[i]
print("执行成功!")
flag_1 = 1
j = 0
elif in_content == "N" or in_content == "n":
flag_1 = 1
j = 0
else:
print("你输入的内容有误,请重输入!")
if count == len(del_list) and flag_1 == 0:
print("查无此编号!")
break
#方便用户看到提示信息
re = input("请输入回车键返回菜单列表...")
#修改指定名片
def modify_card(mod_list):
#需要把输入的字符串类型转换成整型,不然下面的k==id无法进行判断
id = int(input("请输入需要修改的名片编号:"))
#定义一个计数器,如果查询玩整个列表都没有找到匹配项,那么就退回到菜单界面
count = 0
#按照指定的编号修改名片信息
for i in range(len(mod_list)):
count += 1
k = mod_list[i].get("编号", "none")
if k == id:
new_name = input("请输入姓名:")
new_age = input("请输入年龄:")
new_job = input("请输入工作:")
new_phone = input("请输入联系电话:")
#将每个人的信息存入一个字典
card = {}
card['编号'] = id
card['姓名'] = new_name
card['年龄'] = new_age
card['工作'] = new_job
card['联系电话'] = new_phone
#替换列表元素
mod_list[i] = card
print("您修改后的信息为:")
print(card)
break
if count == len(mod_list):
print("查无此编号!")
break
#方便用户看到提示信息
re = input("请输入回车键返回菜单列表...")
#查询指定名片
def query_card(query_list):
#需要把输入的字符串类型转换成整型,不然下面的k==id无法进行判断
id = int(input("请输入想要查询的名片编号:"))
#定义一个计数器,如果查询玩整个列表都没有找到匹配项,那么就退回到菜单界面
count = 0
# 按照指定的编号修改名片信息
for i in range(len(query_list)):
count += 1
k = query_list[i].get("编号", "none")
if k == id:
print(query_list[i])
break
if count == len(query_list):
print("查无此编号!")
break
#方便用户看提示信息
re = input("请输入回车键返回菜单列表...")
# 查看所有名片的信息
def print_all_info(temp_list):
print("=" * 30)
for info in temp_list:
print(info)
print("=" * 30)
re = input("请输入回车键返回菜单列表...")
i = 1
id = 0
list = []
while i == 1:
# 打印菜单
display_menu()
# 等待用户选择
key = get_choice()
if key == "1":
add_info()
elif key == "2":
del_card(list)
elif key == "3":
modify_card(list)
elif key == "4":
query_card(list)
elif key == "5":
print_all_info(list)
elif key == "6":
#退出系统
exit(0)
#没有这个判断的话,在菜单界面直接输入回车会出错误
elif key == "\n":
pass
else:
print("输入有误,请重新输入...")
有些限制还没有加上,比如姓名只接收字符串、手机号必须为11位、输入空需要重新输入等等
不过经过测试,还没有发现bug,如果有的话希望大家告知
- 初次学习python,还有很多不足,希望大家能够指出。