具体介绍见 通讯录管理系统设计与实现(C++)-CSDN博客

class Person:def __init__(self, name="", sex=0, age=0, phone="", addr=""):self.m_name = name    # 姓名self.m_Sex = sex      # 性别(1-男,2-女)self.m_Age = age      # 年龄self.m_Phone = phone  # 电话self.m_Addr = addr    # 地址class AddressBook:def __init__(self, max_size=1000):self.person_list = []  # 联系人列表self.m_Size = 0        # 当前联系人数量self.MAX = max_size   # 最大容量def show_menu():"""显示菜单界面"""print("\n" + "*" * 24)print("***** 1、添加联系人 *****")print("***** 2、显示联系人 *****")print("***** 3、删除联系人 *****")print("***** 4、查找联系人 *****")print("***** 5、修改联系人 *****")print("***** 6、清空联系人 *****")print("***** 0、退出通讯录 *****")print("*" * 24 + "\n")def add_person(book):"""添加联系人"""if book.m_Size >= book.MAX:print("通讯录已满,无法添加!")returnprint("\n=== 添加联系人 ===")name = input("请输入姓名:")# 验证性别输入while True:sex = input("请输入性别(1-男, 2-女):")if sex in ('1', '2'):breakprint("输入错误,请重新输入!")# 验证年龄输入while True:age = input("请输入年龄:")if age.isdigit():breakprint("年龄必须为数字,请重新输入!")phone = input("请输入联系电话:")addr = input("请输入家庭地址:")# 创建新联系人并添加到通讯录new_person = Person(name, int(sex), int(age), phone, addr)book.person_list.append(new_person)book.m_Size += 1print(f"成功添加联系人:{name}")def show_person(book):"""显示所有联系人"""print("\n=== 通讯录列表 ===")if book.m_Size == 0:print("通讯录为空")returnfor idx, person in enumerate(book.person_list, 1):print(f"{idx}. 姓名:{person.m_name}\t", end="")print(f"性别:{'男' if person.m_Sex == 1 else '女'}\t", end="")print(f"年龄:{person.m_Age}\t", end="")print(f"电话:{person.m_Phone}\t", end="")print(f"地址:{person.m_Addr}")def find_person(book, name):"""查找联系人,返回索引位置,找不到返回-1"""for idx, person in enumerate(book.person_list):if person.m_name == name:return idxreturn -1def delete_person(book):"""删除联系人"""print("\n=== 删除联系人 ===")if book.m_Size == 0:print("通讯录为空,无法删除!")returnname = input("请输入要删除的联系人姓名:")index = find_person(book, name)if index != -1:deleted_name = book.person_list[index].m_namedel book.person_list[index]book.m_Size -= 1print(f"已成功删除联系人:{deleted_name}")else:print("找不到该联系人!")def search_person(book):"""查找并显示联系人信息"""print("\n=== 查找联系人 ===")name = input("请输入要查找的联系人姓名:")index = find_person(book, name)if index != -1:person = book.person_list[index]print("\n找到联系人:")print(f"姓名:{person.m_name}")print(f"性别:{'男' if person.m_Sex == 1 else '女'}")print(f"年龄:{person.m_Age}")print(f"电话:{person.m_Phone}")print(f"地址:{person.m_Addr}")else:print("找不到该联系人!")def modify_person(book):"""修改联系人信息"""print("\n=== 修改联系人 ===")name = input("请输入要修改的联系人姓名:")index = find_person(book, name)if index == -1:print("找不到该联系人!")returnperson = book.person_list[index]print("\n当前联系人信息:")print(f"1. 姓名:{person.m_name}")print(f"2. 性别:{'男' if person.m_Sex == 1 else '女'}")print(f"3. 年龄:{person.m_Age}")print(f"4. 电话:{person.m_Phone}")print(f"5. 地址:{person.m_Addr}")print("\n请选择要修改的项目(输入对应数字,0保存退出):")while True:choice = input("请选择(0-5):")if choice == '0':breakelif choice == '1':person.m_name = input("请输入新姓名:")elif choice == '2':while True:sex = input("请输入新性别(1-男, 2-女):")if sex in ('1', '2'):person.m_Sex = int(sex)breakprint("输入错误,请重新输入!")elif choice == '3':while True:age = input("请输入新年龄:")if age.isdigit():person.m_Age = int(age)breakprint("年龄必须为数字,请重新输入!")elif choice == '4':person.m_Phone = input("请输入新电话:")elif choice == '5':person.m_Addr = input("请输入新地址:")else:print("无效选择,请重新输入!")print("联系人信息已更新!")def clear_all(book):"""清空通讯录"""confirm = input("\n确定要清空通讯录吗?(y/n):")if confirm.lower() == 'y':book.person_list.clear()book.m_Size = 0print("通讯录已清空!")else:print("已取消清空操作")def main():"""主程序"""book = AddressBook()while True:show_menu()choice = input("请选择操作(0-6):")if choice == '1':add_person(book)elif choice == '2':show_person(book)elif choice == '3':delete_person(book)elif choice == '4':search_person(book)elif choice == '5':modify_person(book)elif choice == '6':clear_all(book)elif choice == '0':print("\n感谢使用通讯录系统,再见!")breakelse:print("无效输入,请重新选择!")input("\n按回车键继续...")  # 暂停以便查看结果if __name__ == "__main__":main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/87137.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/87137.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/87137.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虾米壁纸分类页面代码

<template> <view class"wallpaper-category"> <custom-nav-bar title"分类列表"></custom-nav-bar> <!-- 分类展示 --> <scroll-view scroll-y class"category-scroll-view"> <view cl…

K8s-pod 调度基础

目录 Replication Controller&#xff08;RC&#xff09; 概念 关键字段 Replica Set&#xff08;RS&#xff09; 概念 关键字段 RC 与 RS 的区别 无状态应用管理Deployment 无状态应用&#xff08;Stateless Application&#xff09; 什么是无状态&#xff1f; 无状…

Vue + RuoYi 前后端分离入门手册

Vue RuoYi 前后端分离技术栈是一个非常流行且成熟的企业级后台管理系统开发方案&#xff0c;尤其在国内 Java 开发社区中广泛应用。它结合了现代化的前端框架 Vue.js 和基于 Spring Boot 的后端框架 RuoYi&#xff0c;提供了开箱即用的权限管理、代码生成、监控等功能&#xf…

JSON 安装使用教程

一、JSON 简介 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写&#xff0c;同时也易于机器解析和生成。它广泛应用于前后端数据通信、配置文件、API 传输等场景。 二、JSON 是否需要安装&#xff1f; 不需要…

十大网络协议

十大网络协议 标题1. HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;标题2. HTTPS&#xff08;Secure Hypertext Transfer Protocol&#xff0c;安全超文本传输协议&#xff09;标题3. HTTP/3标题4. TCP&#xff08;Transmission Control…

【语音告警】博灵智能语音报警灯Modbus TCP触发告警实例-语音报警灯|声光报警器|网络信号灯

功能说明 本文将以Python代码为例&#xff0c;讲解如何通过Python代码调用博灵语音通知终端A4实现声光语音告警。 本代码实现Python触发Modbus写多寄存器和写单寄存器实现调用通知终端模板播报功能&#xff08;通知终端内置TTS语音合成技术&#xff0c;本案例不讲解如何文本转…

摄像头 rtsp数据量 和正常数据流有什么区别

摄像头RTSP数据流和正常数据流&#xff08;如HTTP传输的普通文件或网页数据&#xff09;在多个方面存在显著差异&#xff0c;主要体现在协议特性、数据量、实时性、应用场景等方面。以下是具体对比&#xff1a; 1. 协议与传输方式 RTSP流&#xff1a; 实时流协议&#xff08;R…

深入理解装饰器模式:动态扩展对象功能的灵活设计模式

深入理解装饰器模式&#xff1a;动态扩展对象功能的灵活设计模式 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 总有一行代码&#xff0c;能点亮万千星辰。 &#x1f50d; 在技术的宇宙中&#xff0c;我愿做永不停歇的探索者。 ✨ 用代码丈量世界…

141.在 Vue 3 中使用 OpenLayers Link 交互:把地图中心点 / 缩放级别 / 旋转角度实时写进 URL,并同步解析显示

本文分享一个前端小技巧&#xff1a;借助 OpenLayers 的 Link 交互 在浏览器地址栏实时记录地图状态&#xff0c;同时把这些参数解析出来展示在页面上。 ✨ 双向同步&#xff1a;拖动、缩放、旋转地图时&#xff0c;URL 自动更新&#xff1b;手动修改 URL 或后退 / 前进&#x…

数字人的形象与内容,虚拟形象背后的权益暗战

&#xff08;首席数据官高鹏律师数字经济团队创作&#xff0c;AI辅助&#xff09; 当某科技公司的虚拟偶像在直播间收获百万打赏时&#xff0c;当某品牌的数字代言人形象被篡改成表情包全网传播时&#xff0c;当网红博主的AI分身开始替代真人直播带货时&#xff0c;一场关于数…

【python】pdf拆成图片,加中文,再合成pdf

前期搞了个pdf加页脚&#xff0c;但是搞了半天中文加不了&#xff0c;就换了个思路。 直接说结论&#xff0c;pdf拆成图片&#xff0c;加中文&#xff0c;再合成pdf&#xff0c;会导致pdf模糊。 import os import fitz # PyMuPDF from PIL import Image, ImageDraw, ImageFon…

分布式爬虫数据存储开发实战

分布式爬虫存储的核心矛盾在于&#xff1a;既要高吞吐又要强一致性&#xff0c;还要避免重复。比如Kafka虽然吞吐高但无法去重&#xff0c;Redis去重快但容量有限。所以我们可能低估了状态同步的复杂度——比如暂停爬虫时如何保证内存中的URL状态不丢失。 分布式爬虫的数据存储…

探秘阿里云Alibaba Cloud Linux:云时代的操作系统新宠

引言&#xff1a;云时代的操作系统变革 在云计算技术蓬勃发展的当下&#xff0c;企业的数字化转型进程被极大地加速&#xff0c;而作为云计算底层支撑的操作系统&#xff0c;也迎来了前所未有的变革与挑战。传统操作系统在应对云计算环境中的大规模资源调度、高弹性扩展以及安…

使用pyflink进行kafka实时数据消费

目录 背景 代码demo 踩坑记录 1、kafka连接器&#xff0c;kafka客户端jar包找不到 2、java模块系统访问限制 3、执行demo任务&#xff0c;一直报错连接kafka topic超时 总结 背景 实际项目中经常遇到source是kafka&#xff0c;需要实时消费kafka某个topic中的数据&#x…

软件测试理论框架与发展:分类、原则与质量保障策略

第一章 一、计算机软件的发展分类 早期软件开发的特点&#xff1a; 软件规模小、复杂程度低、开发过程不规范 测试的情况&#xff1a; 测试等同于调试 目的纠正软件的已经知道的故障 投入少&#xff0c;介入晚 成为一种发现软件的活动&#xff08;1957&#xff09; 测试不等于…

未知威胁攻击原理和架构

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 未知威胁&#xff08;Unknown Threats&#xff09;指利用零日漏洞、合法工具滥用、高级逃逸技术等**绕过传统特征检测**的攻击&#xff0c;其核心在于**动态对抗防御体系的认知盲区**。以下从攻击原理、…

基于Netty-WebSocket构建高性能实时通信服务

引言&#xff1a;WebSocket在现代应用中的重要性 在当今实时交互应用盛行的时代&#xff0c;WebSocket协议已成为实现双向通信的核心技术。相比传统的HTTP轮询&#xff0c;WebSocket提供了&#xff1a; 真正的全双工通信极低的延迟&#xff08;毫秒级&#xff09;高效的连接管…

咸虾米项目总结1--const用法

在 UniApp&#xff08;或 Vue 3&#xff09;中&#xff0c;声明一个空对象可使用下面这2种写法&#xff1a; // 写法1 const a ref(null);// 写法2 const a ref({}); 在UniApp中&#xff0c;const a ref()用法概述&#xff1a; 用途&#xff1a; 创建一个响应式引用&#x…

在mac下手动编译迁移的android版webrtc组件

我原先使用的android版webrtc是在linux下编译的&#xff0c;现在因为某些原因需要把整个库迁移到mac下编译。 把代码迁移完后&#xff0c;正常是需要通过gclient sync 重新构建编译环境&#xff0c;但是由于网络限制等方面原因&#xff0c;会导致完成的比较慢。 在摸索一阵后…

Linux 命令:mkdir

Linux mkdir 命令详细教程 一、mkdir 命令的基本功能 mkdir&#xff08;Make Directory&#xff09;是 Linux 系统中用于创建新目录&#xff08;文件夹&#xff09;的基础命令。它支持一次性创建单个或多个目录&#xff0c;以及递归创建多层目录结构&#xff0c;是文件系统操…