python名片管理系统-函数&文件版-修复

各位小伙伴们,在上一个中,有一些漏洞! 如果名字相同的话,会出现一些相应的问题,我已经重新修改了一下,大家可以这个!感谢大家的阅读!
# 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()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值