zoukankan      html  css  js  c++  java
  • day 5 名片管理系统-文件版

    1.添加__name__ == '__main__'

    if __name__ == "__main__":       #添加__name__变量
        #调用主函数
        main()

    2.添加6功能,保存到文件

     def save_2_file():
         '''完成保存到文件的功能'''
         f = open("backup.data",'w')  
         f.write(str(card_infors))           #文件只能保存str字符串类型,    
                                                #TypeError: write() argument must be str, not list
         f.close()                                                                            

    3.保存文件的内容

    vim  backup.data 
    
    ####  第1种,直接把list转换成str存入 文件
    [{'qq': 'dfas', 'addr': 'ds', 'name': 'aa', 'age': 'adf'}, {'qq': 'dfas', 'addr': 'fd', 'name': 'b', 'age': 'dsfa'}]
    
    
    ##### 第2种,好看 不推荐
     aa,3434,3434,123
     bb,43,43,34
     c,2334,43,43
    
    
    
    #保存的数据文件,不是为了用户查看的,怎么简单怎么来

     4.程序执行开始,读取文件

      1)版本1:没有数据

     def load_infor():
         '''完成对文件内数据的加载'''
     
         f = open("backup.data","r")
         card_infor = list(f.read())          #字符串str转换成list列表格式
         f.close()
     def main():
         '''完成对整个程序的控制'''
         #恢复加载之前的文件内容到程序中
         load_infors()
     
         # 1.打印功能信息
         print_menu()
    ### 运行结果
       #####    python3 08-读取文件.py 
    **************************************************
        名片管理系统 V3    
    1:添加一个名片
    2:删除一个名片
    3:修改一个名片
    4:查询一个名片
    5:显示所有
    6:保存
    7:退出系统
    **************************************************
    请输入你要的功能:5
    姓名    年龄    qq号    地址
    
    请输入你要的功能:^Z

       

      2)版本2:global全局变量,eval()

    请输入你要的功能:5
    姓名    年龄    qq号    地址
    aa    sfd    dsaf    df
    bb    daf    fda    dfs
    def load_infor():
        '''完成对文件内数据的加载'''
        global card_infors                   #声明全局变量
        f = open("backup.data","r")
        card_infors = eval(f.read())         ## eval能将字符串变成之前的类型
        f.close()

     5.异常处理:没有数据文件创建,有文件读取

    ###  没有备份文件程序出错
    rm -rf backup.data 
    
    python3 08-读取文件.py 
    Traceback (most recent call last):
      File "08-读取文件.py", line 110, in <module>
        main()
      File "08-读取文件.py", line 74, in main
        load_infor()
      File "08-读取文件.py", line 66, in load_infor
        f = open("backup.data","r")
    FileNotFoundError: [Errno 2] No such file or directory: 'backup.data'
    def load_infor():
        '''完成对文件内数据的加载'''
        global card_infors
    
        try:
            f = open("backup.data","r")
            card_infors = eval(f.read())
            f.close()
        except Exception:       ###出现异常忽略
            pass

    6.完整版本

    #定义一个新的list列表,用来存储名片
    card_infors = []
    
    def print_menu():
        """完成打印功能"""
        print("*"*50)
        print("	名片管理系统 V3	")
        print("1:添加一个名片")
        print("2:删除一个名片")
        print("3:修改一个名片")
        print("4:查询一个名片")
        print("5:显示所有")
        print("6:保存")
        print("7:退出系统")
        print("*"*50)
    
    def add_new_card_infor():
        """完成添加新名片功能"""
        new_name = input("你要添加的姓名:")
        new_age = input("你要添加的年龄:")
        new_qq = input("你要添加的qq:")
        new_addr = input("你要添加的地址:")
        
        #定义1个新的字典dict,用来存储新的名片
        new_infor = {}
        new_infor["name"] = new_name
        new_infor["age"] = new_age
        new_infor["qq"] = new_qq
        new_infor["addr"] = new_addr
    
        #将1个字典dict添加到列表list
        global card_infors
        card_infors.append(new_infor)
        #print(card_infors)  #for test  测试用的  
    
    def find_card_infor():
        """完成查询1个名片的功能"""
        global card_infors
        find_name = input("请输入你要查询的名字:")
        flag = 0 #默认 没有查到此人
        for tmp in card_infors:
            if find_name in tmp["name"]:
                print("%s	%s	%s	%s"%(tmp["name"],tmp["age"],tmp["qq"],tmp["addr"]))
                flag = 1   #表示查到此人了
                break
         #判断是否找到了   
        if flag == 0:
            print("查无此人")
    
    def show_card_infor():
        """完成显示名片"""
        global card_infors
        print("姓名	年龄	qq号	地址")
        for tmp in card_infors:
            print("%s	%s	%s	%s"%(tmp["name"],tmp["age"],tmp["qq"],tmp["addr"]))
    
    def save_2_file():
        '''完成保存到文件的功能'''
        f = open("backup.data",'w')
        f.write(str(card_infors))
        f.close()
    
    def load_infor():
        '''完成对文件内数据的加载'''
        global card_infors
        try:
            f = open("backup.data","r")
            card_infors = eval(f.read())
            f.close()
        except Exception:
            pass
    
    def main():
        '''完成对整个程序的控制'''
        
        #恢复加载之前的文件内容到程序中
        load_infor()
    
    
        # 1.打印功能信息
        print_menu()
    
        while True:
            #2.获取用户的输入
            num = int(input("请输入你要的功能:"))
    
            #3.根据用户的输入,执行相应的功能
            if num == 1:
                add_new_card_infor()
    
            elif num == 2:
                pass
            elif num == 3:
                pass
            elif num == 4:
                find_card_infor()
    
            elif num == 5:
                show_card_infor()
    
            elif num == 6:
                save_2_file()
    
            elif num == 7:
                break
            else:
                print("你输入的有误,请重新输入")
    
            print("")
    
    if __name__ == "__main__":
        #调用主函数
        main()
  • 相关阅读:
    POJ3159 Candies —— 差分约束 spfa
    POJ1511 Invitation Cards —— 最短路spfa
    POJ1860 Currency Exchange —— spfa求正环
    POJ3259 Wormholes —— spfa求负环
    POJ3660 Cow Contest —— Floyd 传递闭包
    POJ3268 Silver Cow Party —— 最短路
    POJ1797 Heavy Transportation —— 最短路变形
    POJ2253 Frogger —— 最短路变形
    POJ1759 Garland —— 二分
    POJ3685 Matrix —— 二分
  • 原文地址:https://www.cnblogs.com/venicid/p/7898875.html
Copyright © 2011-2022 走看看