各位小伙伴们,在上一个中,有一些漏洞! 如果名字相同的话,会出现一些相应的问题,我已经重新修改了一下,大家可以这个!感谢大家的阅读!
# coding = utf-8
card_infor = [] #定义来存储名片信息的列表
def print_menu():
"""打印提示信息"""
print("="*20)
print(" 名片管理系统")
print("1.添加一个新的信息")
print("2.删除一个信息")
print("3.修改一个信息")
print("4.查询一个信息")
print("5.查看所有信息")
print("6.保存信息")
print("0.退出信息")
print("=" * 20)
def choose_num():
"""让用户进行选择"""
try: #防止错误
while True:
num = int(input("请输入功能序号"))
if num == 1: #增加信息
add_infor()
elif num == 2: #删除信息
del_infor()
elif num == 3: #修改信息
modify_infor()
elif num == 4: #查询信息
find_infor()
elif num == 5: #输出所有信息
print_infor()
elif num == 6: #保存信息
save_infor()
elif num == 0: #退出系统
exit_sys()
print("退出系统")
break
else:
print("您输入%d,输入错误,请重新输入数字范围为0-6"%num)
except Exception:
print("输入格式错误,请重新输入数字范围为0-6")
choose_num()
def add_infor():
"""增加信息"""
global card_infor #全局变量
new_infor = {} #定义字典
new_infor["name"] = input("请输入新的名字")
new_infor["QQ"] = input("请输入QQ号")
new_infor["weixin"] = input("请输入微信号")
new_infor["addr"] = input("请输入地址")
card_infor.append(new_infor) #将字典添加到列表中
print(card_infor) #for test
def del_infor():
"""删除信息"""
global card_infor
del_name = input("请输入要删除的名字")
del_num = -1 #找到要删除人的名字的下标
del_judge = 0 #来查看有多少名字相同的人
del_list = [] #来存储下标数
for i in card_infor:
del_num += 1 #第一次是下标为0
if del_name == i["name"]: #进行匹配
del_judge += 1 # 有一个人就加1
del_list.append(del_num) # 进行添加下标数
if del_judge == 1:
print("已找到")
print("姓名\tQQ号\t微信号\t地址")
print("%s\t%s\t%s\t%s"%(i["name"],i["QQ"],i["weixin"],i["addr"]))
else:
print("%s\t%s\t%s\t%s"%(i["name"],i["QQ"],i["weixin"],i["addr"]))
if del_judge == 1: #如果只查到了一个人
try:
del_flag = int(input("是否删除,是请输入1,否请输入0 :"))
if del_flag == 1:
del card_infor[del_list[0]]
print("已删除")
elif del_flag == 0:
print("已取消删除操作")
else:
print("您输入%d,输入错误,退出删除操作!" % del_flag)
except Exception:
print("输入格式错误,退出删除操作!")
if del_judge > 1: #如果有多个相同名字的人
del_num = 0 #初始化为0
del_QQ = input("请输入要删除的QQ号多少:") #按照QQ来查找
for j in del_list: #此时j为del_list 里的数
del_num += 1 #循环一次+1
if card_infor[j]["QQ"] == del_QQ:
print("姓名\tQQ号\t微信号\t地址")
print("%s\t%s\t%s\t%s"%(card_infor[j]["name"],card_infor[j]["QQ"],\
card_infor[j]["weixin"],card_infor[j]["addr"]))
try:
del_flag = int(input("是否删除,是请输入1,否请输入0 :"))
if del_flag == 1:
del card_infor[j]
print("已删除")
elif del_flag == 0:
print("已取消删除操作")
else:
print("您输入%d,输入错误,退出删除操作!" % del_flag)
except Exception:
print("输入格式错误,退出删除操作!")
break
else:
if del_num >= len(del_list):
print("您输入%s,输入错误,没有这个QQ号码,退出删除操作!"%del_QQ)
break
if del_judge == 0:
print("未找到此人")
def modify_infor():
"""修改信息"""
global card_infor
modify_name = input("请输入要修改的名字")
modify_num = -1 # 所要删除的下标
modify_list = [] # 来存储下标数
modify_flag = 0 # 用来判断
def print_mo_infor(mm): #定义输出信息函数
print("姓名\tQQ号\t微信号\t地址")
print("%s\t%s\t%s\t%s" % (mm["name"], mm["QQ"], \
mm["weixin"], mm["addr"]))
for i in card_infor:
modify_num += 1 #每次循环+1
if modify_name == i["name"]: # 进行匹配
modify_flag += 1 #每找到一次加1
if modify_flag == 1:
print("已找到")
print("姓名\tQQ号\t微信号\t地址")
print("%s\t%s\t%s\t%s" % (i["name"], i["QQ"], i["weixin"], i["addr"]))
modify_list.append(modify_num) #添加下标数
if modify_flag == 1:
try:
while True:
modify_choose = int(input("修改名字请输入:1,修改QQ请输入:2,\
修改微信请输入:3,修改地址请输入:4,取消修改请输入0 :"))
if modify_choose == 1:
card_infor[modify_list[0]]["name"] = input("请输入新的名字")
print("已修改")
print_mo_infor(card_infor[modify_list[0]]) #调用信息函数
elif modify_choose == 2:
card_infor[modify_list[0]]["QQ"] = input("请输入新的QQ")
print("已修改")
print_mo_infor(card_infor[modify_list[0]])
elif modify_choose == 3:
card_infor[modify_list[0]]["weixin"] = input("请输入新的微信")
print("已修改")
print_mo_infor(card_infor[modify_list[0]])
elif modify_choose == 4:
card_infor[modify_list[0]]["addr"] = input("请输入新的地址")
print("已修改")
print_mo_infor(card_infor[modify_list[0]])
elif modify_choose == 0:
print_mo_infor(card_infor[modify_list[0]])
print("结束本次修改...")
break
else:
print("您输入%d,输入错误,请重新输入数字范围为0-4"%modify_choose)
except Exception:
print("输入格式错误,退出修改操作!")
if modify_flag > 1:
modify_num = 0 #初始化为0
modify_QQ = input("请输入要修改人对应的QQ")
for j in modify_list:
modify_num += 1
if card_infor[j]["QQ"] == modify_QQ:
print_mo_infor(card_infor[j])
try:
while True:
modify_choose = int(input("修改名字请输入:1,修改QQ请输入:2,\
修改微信请输入:3,修改地址请输入:4,取消修改请输入0 :"))
if modify_choose == 1:
card_infor[j]["name"] = input("请输入新的名字")
print("已修改")
print_mo_infor(card_infor[j])
elif modify_choose == 2:
card_infor[j]["QQ"] = input("请输入新的QQ")
print("已修改")
print_mo_infor(card_infor[j])
elif modify_choose == 3:
card_infor[j]["weixin"] = input("请输入新的微信")
print("已修改")
print_mo_infor(card_infor[j])
elif modify_choose == 4:
card_infor[j]["addr"] = input("请输入新的地址")
print("已修改")
print_mo_infor(card_infor[j])
elif modify_choose == 0:
print("结束本次修改...")
print_mo_infor(card_infor[j])
break
else:
print("您输入%d,输入错误,请重新输入数字范围为0-4" % modify_choose)
except Exception:
print("输入格式错误,退出修改操作!")
else:
if modify_num >= len(modify_list):
print("您输入%s,输入错误,没有这个QQ号码,退出删除操作!"%modify_QQ)
break
if modify_flag == 0:
print("未找到此人")
def find_infor():
"""查询信息"""
global card_infor
find_num = 0
find_name = input("请输入要查找的名字:")
find_flag = 0
for i in card_infor:
if find_name == i["name"]:
find_flag += 1
if find_flag == 1:
print("已找到")
print("姓名\tQQ\t微信\t地址")
print("%s\t%s\t%s\t%s"%(i["name"],i["QQ"],i["weixin"],i["addr"]))
else:
find_num += 1
if find_num >= len(card_infor):
print("未找到该人的信息")
break
def print_infor():
"""输出所有信息"""
global card_infor
print("姓名\tQQ号\t微信号\t地址\t")
for i in card_infor:
print("%s\t%s\t%s\t%s"%(i["name"],i["QQ"],i["weixin"],i["addr"]))
def save_infor():
"""保存信息"""
save_file = open("Backup.WP","w") #把信息读写后 保存在文件里
save_file.write(str(card_infor)) #进行读写
save_file.close() #关闭文件
print("已经保存程序信息")
def load_infor(): #加载信息
"""加载之前数据至程序中"""
global card_infor
try: #来进行判断 如果本地没有该文件的话 最后用save_infor()也就是6 来创建文件并保存信息
load_file = open("Backup.WP") #读取文件数据
card_infor = eval(load_file.read()) #将文件读入程序中
load_file.close() #关闭文件
except Exception:
pass
def exit_sys():
while True:
yes_no = input("是否保存信息,是请输入Y,否请输入N :")
if yes_no == "Y":
save_infor()
break
elif yes_no == "N":
print("取消保存")
break
else:
print("您输入%s,输入错误,请重新输入Y或N"%yes_no)
def main():
"""执行函数"""
load_infor() #加载程序
print_menu() #打印信息
choose_num() #选择功能
if __name__ == "__main__": #自己调用
#执行
main()