Python通讯录系统实战教程

发布于:2025-07-04 ⋅ 阅读:(18) ⋅ 点赞:(0)

具体介绍见 通讯录管理系统设计与实现(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("通讯录已满,无法添加!")
        return
    
    print("\n=== 添加联系人 ===")
    name = input("请输入姓名:")
    
    # 验证性别输入
    while True:
        sex = input("请输入性别(1-男, 2-女):")
        if sex in ('1', '2'):
            break
        print("输入错误,请重新输入!")
    
    # 验证年龄输入
    while True:
        age = input("请输入年龄:")
        if age.isdigit():
            break
        print("年龄必须为数字,请重新输入!")
    
    phone = input("请输入联系电话:")
    addr = input("请输入家庭地址:")
    
    # 创建新联系人并添加到通讯录
    new_person = Person(name, int(sex), int(age), phone, addr)
    book.person_list.append(new_person)
    book.m_Size += 1
    print(f"成功添加联系人:{name}")

def show_person(book):
    """显示所有联系人"""
    print("\n=== 通讯录列表 ===")
    if book.m_Size == 0:
        print("通讯录为空")
        return
    
    for 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 idx
    return -1

def delete_person(book):
    """删除联系人"""
    print("\n=== 删除联系人 ===")
    if book.m_Size == 0:
        print("通讯录为空,无法删除!")
        return
    
    name = input("请输入要删除的联系人姓名:")
    index = find_person(book, name)
    
    if index != -1:
        deleted_name = book.person_list[index].m_name
        del book.person_list[index]
        book.m_Size -= 1
        print(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("找不到该联系人!")
        return
    
    person = 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':
            break
        elif 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)
                    break
                print("输入错误,请重新输入!")
        elif choice == '3':
            while True:
                age = input("请输入新年龄:")
                if age.isdigit():
                    person.m_Age = int(age)
                    break
                print("年龄必须为数字,请重新输入!")
        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 = 0
        print("通讯录已清空!")
    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感谢使用通讯录系统,再见!")
            break
        else:
            print("无效输入,请重新选择!")
        
        input("\n按回车键继续...")  # 暂停以便查看结果

if __name__ == "__main__":
    main()


网站公告

今日签到

点亮在社区的每一天
去签到