当前位置: 首页 > news >正文

python高级4

练习:

使用已学习的所有知识,加上文件等操作,实现一个名片管理系统。具体功能要是实现(菜单): **************名片管理系统************* 1.增加一个名片 2.删除一个名片 3.修改一个名片 4.查找一个名片 5.显示所有名片 ******************************************* 【一个名片里的信息有:姓名、联系方式、QQ、住址】

import json
import os


class CardManager:
    FILE_PATH = "cards.json"

    def __init__(self):
        """初始化:如果文件不存在,则创建一个空 JSON 文件"""
        if not os.path.exists(self.FILE_PATH):
            with open(self.FILE_PATH, "w", encoding="utf-8") as f:
                json.dump([], f, ensure_ascii=False)

    def load_data(self):
        """读取 JSON 文件数据"""
        with open(self.FILE_PATH, "r", encoding="utf-8") as f:
            return json.load(f)

    def save_data(self, data):
        """保存数据到 JSON 文件"""
        with open(self.FILE_PATH, "w", encoding="utf-8") as f:
            json.dump(data, f, ensure_ascii=False, indent=4)

    def add_card(self, name, phone, qq, address):
        """添加名片"""
        data = self.load_data()
        card = {"name": name, "phone": phone, "qq": qq, "address": address}
        data.append(card)
        self.save_data(data)
        print(f"名片添加成功:{card}")

    def delete_card(self, name):
        """删除名片"""
        data = self.load_data()
        new_data = [card for card in data if card["name"] != name]
        if len(new_data) == len(data):
            print(f"未找到名片:{name}")
        else:
            self.save_data(new_data)
            print(f"名片已删除:{name}")

    def update_card(self, name, phone=None, qq=None, address=None):
        """修改名片"""
        data = self.load_data()
        for card in data:
            if card["name"] == name:
                if phone:
                    card["phone"] = phone
                if qq:
                    card["qq"] = qq
                if address:
                    card["address"] = address
                self.save_data(data)
                print(f"名片已更新:{card}")
                return
        print(f"未找到名片:{name}")

    def search_card(self, name):
        """查找名片"""
        data = self.load_data()
        results = [card for card in data if name in card["name"]]
        if results:
            print("查询结果:")
            for card in results:
                print(card)
        else:
            print(f"没有找到名片:{name}")

    def show_all(self):
        """显示所有名片"""
        data = self.load_data()
        if data:
            print("名片列表:")
            for card in data:
                print(card)
        else:
            print("没有任何名片信息")


# ========== 主菜单 ==========
def main():
    manager = CardManager()

    while True:
        print("\n************** 名片管理系统 **************")
        print("1. 增加一个名片")
        print("2. 删除一个名片")
        print("3. 修改一个名片")
        print("4. 查找一个名片")
        print("5. 显示所有名片")
        print("0. 退出系统")
        print("*******************************************")

        choice = input("请选择操作(0-5):")

        if choice == "1":
            name = input("请输入姓名:")
            phone = input("请输入联系方式:")
            qq = input("请输入 QQ 号码:")
            address = input("请输入住址:")
            manager.add_card(name, phone, qq, address)

        elif choice == "2":
            name = input("请输入要删除的名片姓名:")
            manager.delete_card(name)

        elif choice == "3":
            name = input("请输入要修改的名片姓名:")
            phone = input("新联系方式(按回车跳过):") or None
            qq = input("新 QQ(按回车跳过):") or None
            address = input("新住址(按回车跳过):") or None
            manager.update_card(name, phone, qq, address)

        elif choice == "4":
            name = input("请输入要查找的名片姓名:")
            manager.search_card(name)

        elif choice == "5":
            manager.show_all()

        elif choice == "0":
            print("退出系统")
            break

        else:
            print("请输入正确的选项!")


# 运行程序
if __name__ == "__main__":
    main()

 cards.json:

[
    {
        "name": "张三",
        "phone": "10001",
        "qq": "10002",
        "address": "10003"
    }
]

相关文章:

  • Mysql从入门到精通day3————记一次连接查询的武装渗透
  • 【二分查找 树状数组 差分数组 离散化 】P6172 [USACO16FEB] Load Balancing P|省选-
  • 牛顿-拉夫逊迭代法原理与除法器的软件与硬件实现
  • 六十天Linux从0到项目搭建第四天(通配符命令、其他命令、压缩解压工具、shell的感性理解、linux权限解析)
  • 从零实现本地文生图部署(Stable Diffusion)
  • 常见框架漏洞攻略-ThinkPHP篇
  • 人工智能AI术语
  • 排序--快排--Hoare法
  • BSides Vancouver 2018靶机通关教学
  • Wireshark网络抓包分析使用详解
  • 【从零实现Json-Rpc框架】- 入门准备篇
  • java项目之校园美食交流系统(源码+文档)
  • python --face_recognition(人脸识别,检测,标题,特征提取)
  • C++指针基础与应用详解
  • JAVA 中的 ArrayList 工作原理
  • 鸿蒙开发新利器(二):媒体查询方法封装全解析
  • RabbitMQ 详细原理解析
  • 蓝桥杯备考:学会使用方向向量
  • 计算机三级Linux应用与开发技术(最终版了)
  • 【线程安全的单例模式和STL是否是线程安全/智能指针是否是线程安全】
  • 中青旅:第一季度营业收入约20.54亿元,乌镇景区接待游客数量同比减少6.7%
  • 坚持科技创新引领,赢得未来发展新优势
  • 解放日报社论:只争朝夕、不负重托,加快建成具有全球影响力的科技创新高地
  • IMF前副总裁朱民捐赠1000万元,在复旦设立青云学子基金
  • 东风着陆场做好各项搜救准备,迎接神舟十九号航天员天外归来
  • 比熬夜更伤肝的事,你可能每天都在做