编程基础第一期《8-30》–通讯录管理系统
在信息化时代,高效管理个人或团队联系人信息变得尤为重要。本文将带您实现一个基于Python的通讯录管理系统,该系统采用字典数据结构和JSON文件存储,实现了联系人的增删改查等核心功能。这个项目非常适合Python初学者巩固基础知识,同时也是一个实用的小工具。
import json
import os
CONTACTS_FILE = "contacts.json"
def load_contacts():
"""加载通讯录数据"""
if os.path.exists(CONTACTS_FILE):
with open(CONTACTS_FILE, 'r') as f:
return json.load(f)
return []
def save_contacts(contacts):
"""保存通讯录数据"""
with open(CONTACTS_FILE, 'w') as f:
json.dump(contacts, f, indent=4)
def input_contact_info():
"""输入联系人信息"""
return {
"name": input("请输入姓名:").strip(),
"phone": input("请输入电话:").strip(),
"email": input("请输入邮箱:").strip(),
"address": input("请输入地址:").strip()
}
def add_contact(contacts):
"""添加联系人"""
new_contact = input_contact_info()
contacts.append(new_contact)
save_contacts(contacts)
print("联系人添加成功!")
def find_contacts_by_name(contacts, name):
"""根据姓名查找联系人"""
return [(i, c) for i, c in enumerate(contacts) if c["name"].lower() == name.lower()]
def delete_contact(contacts):
"""删除联系人"""
name = input("请输入要删除的联系人姓名:").strip()
matches = find_contacts_by_name(contacts, name)
if not matches:
print("未找到相关联系人。")
return
print("找到以下联系人:")
for idx, (i, c) in enumerate(matches):
print(f"{idx + 1}. {c['name']} | {c['phone']} | {c['email']}")
try:
choice = int(input("请选择要删除的序号(0取消):"))
if 1 <= choice <= len(matches):
del contacts[matches[choice - 1][0]]
save_contacts(contacts)
print("删除成功!")
elif choice != 0:
print("无效的序号")
except ValueError:
print("输入错误,请输入数字")
def modify_contact(contacts):
"""修改联系人"""
name = input("请输入要修改的联系人姓名:").strip()
matches = find_contacts_by_name(contacts, name)
if not matches:
print("未找到相关联系人。")
return
print("找到以下联系人:")
for idx, (i, c) in enumerate(matches):
print(f"{idx + 1}. {c['name']} | {c['phone']} | {c['email']}")
try:
choice = int(input("请选择要修改的序号(0取消):"))
if 1 <= choice <= len(matches):
index = matches[choice - 1][0]
old_contact = contacts[index]
print("请输入新信息(留空保持不变)")
new_info = input_contact_info()
# 保留未修改的字段
for key in new_info:
if not new_info[key]:
new_info[key] = old_contact[key]
contacts[index] = new_info
save_contacts(contacts)
print("修改成功!")
elif choice != 0:
print("无效的序号")
except ValueError:
print("输入错误,请输入数字")
def search_contact(contacts):
"""查询联系人"""
name = input("请输入要查询的姓名:").strip()
matches = find_contacts_by_name(contacts, name)
if not matches:
print("未找到相关联系人")
return
print(f"找到 {len(matches)} 条结果:")
for i, c in matches:
print(f"姓名:{c['name']}")
print(f"电话:{c['phone']}")
print(f"邮箱:{c['email']}")
print(f"地址:{c['address']}\n")
def display_contacts(contacts):
"""显示所有联系人"""
if not contacts:
print("通讯录为空")
return
print("\n所有联系人:")
for idx, contact in enumerate(contacts, 1):
print(f"{idx}. {contact['name']} | {contact['phone']} | {contact['email']}")
def show_menu():
"""显示主菜单"""
print("\n通讯录管理系统")
print("1. 添加联系人")
print("2. 删除联系人")
print("3. 修改联系人")
print("4. 查询联系人")
print("5. 显示所有联系人")
print("6. 退出系统")
def main():
contacts = load_contacts()
while True:
show_menu()
choice = input("请选择操作(1-6):").strip()
if choice == '1':
add_contact(contacts)
elif choice == '2':
delete_contact(contacts)
elif choice == '3':
modify_contact(contacts)
elif choice == '4':
search_contact(contacts)
elif choice == '5':
display_contacts(contacts)
elif choice == '6':
print("感谢使用,再见!")
break
else:
print("无效的输入,请重新选择")
if __name__ == "__main__":
main()
本项目使用JSON格式存储通讯录数据,这体现了几个重要的编程概念:
json.dump()
和json.load()
实现Python对象与JSON文本的转换with
语句安全地打开和关闭文件,避免资源泄露# JSON序列化示例
with open(CONTACTS_FILE, 'w') as f:
json.dump(contacts, f, indent=4) # indent参数使JSON格式化输出,提高可读性
# 列表推导式与元组打包示例
return [(i, c) for i, c in enumerate(contacts) if c["name"].lower() == name.lower()]
代码采用了高度模块化的设计思想,每个功能都被封装到独立的函数中:
find_contacts_by_name()
被多个功能函数复用try-except
捕获可能的输入错误# 异常处理示例
try:
choice = int(input("请选择要修改的序号(0取消):"))
# 处理逻辑
except ValueError:
print("输入错误,请输入数字")
strip()
移除输入中的前后空白lower()
实现忽略大小写的字符串比较# f-string格式化示例
print(f"{idx + 1}. {c['name']} | {c['phone']} | {c['email']}")
通过这个项目,您不仅可以掌握Python编程的基础知识,还能学习到软件设计的核心概念和最佳实践。无论是作为学习案例还是实用工具,这个通讯录管理系统都能满足您的需求。
后期会改写成django框架的形式完成这个小项目,实现界面化
你的孤独,虽败犹荣