python小练习—名片管理系统(增、删、改、查、数据本地保存)

名片管理系统

系统需求

  • 程序启动,显示名片管理系统欢迎界面,并显示功能菜单
**************************************************
欢迎使用【名片管理系统】V1.0

1. 新建名片
2. 显示全部
3. 查询名片

0. 退出系统
**************************************************
  • 用户用数字选择不同的功能
  • 根据功能选择,执行不同的功能
  • 用户名片需要记录用户的 姓名、电话、QQ、邮件
  • 如果查询到指定的名片,用户可以选择 修改 或者 删除 名片
  • 信息保存本地

需求分析

  • 采用分文件的方式进行开发,主文件cards_main.py复杂业务逻辑,cards_tool.py文件负责具体的功能实现。
  • 新建名片、显示全部、查询名片 对应相应的功能函数。如果代码过长,再进行拆分。
  • 数据结构的选择?一条名片包含多个键值对采用字典数据类型,所有名片信息 采用列表数据结构。
  • 保证名片信息的本地保存和读取使用python的文件操作,进入名片系统先对名信息文件进行读取,在退出名片系统时,将所有名片信息重新写入到名片文件中。

代码实现

代码很简洁,注释太多 容易凌乱。

cards_main.py

import cards_tool
# 主业务逻辑
cards_tool.read_card()


# 1.显示用户主界面
while True:
    cards_tool.show_menu()
    menu_str = input("请选择执行的操作:")
    print("您选择的功能:%s" % menu_str)
    if menu_str == "1":
        cards_tool.create_card()
    elif menu_str == "2":
        cards_tool.show_card_all()
    elif menu_str == "3":
        cards_tool.search_card()
    elif menu_str == "0":
        cards_tool.write_card()
        break
    else:
        print("输入有误,请重新输入")

cards_tool.py

import os
card_info_all = [] # 所有名片信息
# 名片管理 具体功能
def write_card():
    """退出系统时,将名片信息保存到文件夹中"""
    f = open("E:\\workspace_python\\FirstDemo\\名片管理系统.txt", "w")
    f.write(str(card_info_all))
    f.close()


def read_card():
    """进入系统时,将名片信息加载到内存中"""
    is_exist = os.path.exists("E:\\workspace_python\\FirstDemo\\名片管理系统.txt")
    if is_exist:
        # 文件存在将信息加载到内存中
        f = open("E:\\workspace_python\\FirstDemo\\名片管理系统.txt","r")
        global card_info_all
        card_info_all = eval(f.read())
        # print(card_info_all)
        f.close()
    else:
        # 没有文件创建空文件
        f = open("E:\\workspace_python\\FirstDemo\\名片管理系统.txt", "w")
        f.close()
    print(is_exist)


def show_menu():
    """主菜单页面展示"""
    print("*"*30)
    print("欢迎使用[命名管理系统] v1.0")
    print()
    print("1.新建名片")
    print("2.显示全部")
    print("3.查询名片")
    print()
    print("0.退出系统")
    print("*"*30)


def create_card():
    """新建名片"""
    print("功能:新建名片")
    name = input("请输入姓名:")
    phone = input("请输入电话:")
    qq = input("请输入qq号:")
    email = input("请输入邮箱:")
    card_info = {"name":name,"phone":phone, "qq":qq, "email":email}
    card_info_all.append(card_info)
    print("添加%s的名片成功" % name)


def show_card_all():
    """显示所有名片"""
    print("功能:显示全部")
    if not len(card_info_all):
        print("没有任何名片")
        return
    print("name".ljust(14),"phone".ljust(14),"qq".ljust(14),"email".ljust(14),sep="")
    print("-"*56)
    for card in card_info_all:
        print(card["name"].ljust(14),card["phone"].ljust(14),card["qq"].ljust(14),card["email"].ljust(14),sep="")
        print("-"*56)


def search_card():
    """查询名片"""
    print("功能:查询名片")
    name = input("请输入查询的姓名:")
    for card in card_info_all:
        if name == card["name"]:
            print("name".ljust(14), "phone".ljust(14), "qq".ljust(14), "email".ljust(14), sep="")
            print("-" * 56)
            print(card["name"].ljust(14), card["phone"].ljust(14), card["qq"].ljust(14), card["email"].ljust(14),sep="")
            # 名片高级处理
            set_card(card)
            break;
    else:
        print("没有找到%s" % name)


def set_card(card):
    """名片的高级设置"""
    while True:
        menu = input("请输入对名片的操作:1.修改/ 2.删除/ 0.返回上一级")
        if menu == "1":
            name = input("请输入姓名:")
            phone = input("请输入电话:")
            qq = input("请输入qq号:")
            email = input("请输入邮箱:")
            card["name"] = name
            card["phone"] = phone
            card["qq"] = qq
            card["email"] = email
            print("%s 的名片修改成功" % name)
            return
        elif menu == "2":
            card_info_all.remove(card)
            print("删除名片成功")
            return
        elif menu == "0":
            return
        else:
            print("输入有误,请重新输入")

代码运行结果



练习总结

这个小练习主要是对python基础知识的综合运用,入手python 这些基本知识一定要掌握,有过其他编程语言经验的小伙伴是不是感觉很简单。





已标记关键词 清除标记
相关推荐
代码如下,但是存在一个问题,就是如果userinfo.data中已经有内容了,在执行main()函数时,调用了load_to_list()函数加载了文件中的内容,如果再使用新名片信息的功能,调用save_to_file()函数,不能将新的内容保存至userinfo.data文件中,该文件中依旧是以前的信息,请问是哪里写错了吗? ``` card_manager.py 文件 import card_func def main(): while True: # 加载文件 card_func.load_to_list() # 调用函数,打印功能选择菜单 card_func.show_menu() # 提示用户进行输入 choice_str = input("请选择操作序号:") # 判断用户输入是否为有效操作序列 if choice_str in ["1", "2", "3", "4", "5", "6"]: # 新名片 if choice_str == "1": card_func.add_card() # 显示名片 elif choice_str == "2": card_func.show_all_card() # 搜索名片 elif choice_str == "3": print("搜索名片") # 修名片 elif choice_str == "4": print("修名片") # 名片 elif choice_str == "5": print("名片") # 保存名片 elif choice_str == "6": card_func.save_to_file() # 用户输入0,则退出系统 elif choice_str == "0": print("欢迎再次使用【名片管理系统】") break # 用户输入为非对应操作序列,则提示用用户重新输入 else: print("您的输入有误,请重新输入!") # 启动主函数 if __name__ == "__main__": main() ``` card_func.py 文件 ``` # 定义空列表保存用户信息 user_list = [] # 打印欢迎界面的函数 def show_menu(): print("*" * 50) print("【1】. 新名片") print("【2】. 显示名片") print("【3】. 搜索名片") print("【4】. 修名片") print("【5】. 名片") print("【6】. 保存名片") print("【0】. 退出系统") print("*" * 50) # 新名片功能 def add_card(): global user_list # 1. 提示用户输入名片的详细信息 name_str = input("请输入姓名:") phone_str = input("请输入电话号码:") qq_str = input("请输入QQ号码:") email_str = input("请输入邮箱:") # 2. 将上述输入信息,封装为字典 user_dict = {"name": name_str, "phone": phone_str, "QQ": qq_str, "email": email_str } # 3. 将上述字典追加到全局变量user_list中 user_list.append(user_dict) print(user_list) # 4. 提示用户添加完成 print("%s 的用户信息添加成功" % name_str) # 保存名片至文件的函数 def save_to_file(): # global user_list try: # 1. 打开文件 save_file = open("userinfo.data", "w+") # 2. 文件写入操作 save_file.write(str(user_list)) # 3. 关闭文件操作 save_file.close() # 进行提示保存成功 print("名片保存成功") except Exception: print("名片保存失败!") # 加载文件中名片信息至列表的函数 def load_to_list(): global user_list try: # 1. 打开文件 load_file = open("userinfo.data", "r") # 2. 读取操作 user_list = eval(load_file.read()) # 3. 关闭文件 load_file.close() except Exception: print("文件加载失败!") # 显示所有名片信息函数 def show_all_card(): global user_list print(user_list) ```
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页