📋 編程基礎第一期《8-30》–通訊錄管理系統
📑 項目介紹
在信息化時代,高效管理個人或團隊聯系人信息變得尤為重要。本文將帶您實現一個基于Python的通訊錄管理系統,該系統采用字典數據結構和JSON文件存儲,實現了聯系人的增刪改查等核心功能。這個項目非常適合Python初學者鞏固基礎知識,同時也是一個實用的小工具。
🌟 功能特點
- 添加聯系人:錄入姓名、電話、郵箱、地址等信息
- 刪除聯系人:根據姓名查找并刪除指定聯系人
- 修改聯系人:更新已有聯系人的信息
- 查詢聯系人:根據姓名精確查找聯系人
- 顯示所有聯系人:以列表形式展示所有聯系人
- 數據持久化:自動保存到JSON文件,程序重啟后數據不丟失
💻 完整代碼實現
import json
import osCONTACTS_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("未找到相關聯系人。")returnprint("找到以下聯系人:")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("未找到相關聯系人。")returnprint("找到以下聯系人:")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_infosave_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("未找到相關聯系人")returnprint(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("通訊錄為空")returnprint("\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("感謝使用,再見!")breakelse:print("無效的輸入,請重新選擇")if __name__ == "__main__":main()
🔍 代碼解析與知識點
1. 數據存儲與序列化
本項目使用JSON格式存儲通訊錄數據,這體現了幾個重要的編程概念:
- JSON序列化與反序列化:使用
json.dump()
和json.load()
實現Python對象與JSON文本的轉換 - 文件操作:使用
with
語句安全地打開和關閉文件,避免資源泄露 - 數據持久化:將內存中的數據保存到磁盤,實現程序重啟后數據不丟失
# JSON序列化示例
with open(CONTACTS_FILE, 'w') as f:json.dump(contacts, f, indent=4) # indent參數使JSON格式化輸出,提高可讀性
2. 數據結構設計
- 列表存儲多個聯系人:使用Python列表存儲多個聯系人記錄
- 字典存儲聯系人屬性:每個聯系人使用字典存儲,鍵為屬性名,值為屬性值
- 索引與數據的映射:使用列表推導式創建索引與聯系人數據的映射關系
# 列表推導式與元組打包示例
return [(i, c) for i, c in enumerate(contacts) if c["name"].lower() == name.lower()]
3. 函數模塊化設計
代碼采用了高度模塊化的設計思想,每個功能都被封裝到獨立的函數中:
- 單一職責原則:每個函數只負責一個明確的任務
- 高內聚低耦合:函數之間通過參數傳遞數據,減少全局變量
- 代碼復用:如
find_contacts_by_name()
被多個功能函數復用
4. 用戶交互設計
- 菜單驅動界面:通過數字選項驅動程序流程
- 輸入驗證與錯誤處理:使用
try-except
捕獲可能的輸入錯誤 - 用戶友好提示:提供清晰的操作提示和結果反饋
# 異常處理示例
try:choice = int(input("請選擇要修改的序號(0取消):"))# 處理邏輯
except ValueError:print("輸入錯誤,請輸入數字")
5. 字符串處理技巧
- 字符串格式化:使用f-string實現簡潔的字符串插值
- 字符串清理:使用
strip()
移除輸入中的前后空白 - 大小寫不敏感比較:使用
lower()
實現忽略大小寫的字符串比較
# f-string格式化示例
print(f"{idx + 1}. {c['name']} | {c['phone']} | {c['email']}")
🚀 實際應用場景
- 個人通訊錄管理:整理和管理個人聯系人信息
- 小型團隊聯系人共享:在小型團隊中共享和維護聯系人信息
- 學習項目:作為Python初學者的實踐項目,鞏固基礎知識
- 原型系統:作為更復雜聯系人管理系統的原型或基礎
🔧 進階改進方向
- 搜索功能增強:添加模糊搜索、多字段搜索功能
- 數據驗證:增加電話號碼、郵箱格式驗證
- 分組管理:添加聯系人分組功能
- 用戶界面優化:開發圖形用戶界面(GUI)
- 數據備份與恢復:添加數據備份和恢復功能
- 多用戶支持:添加用戶賬戶和權限管理
📚 學習要點總結
- Python基礎語法:函數定義、條件語句、循環結構
- 數據結構應用:列表、字典、元組的靈活使用
- 文件操作:讀寫文件、異常處理
- JSON處理:序列化與反序列化
- 函數式編程:列表推導式、函數封裝
- 用戶交互設計:輸入處理、菜單設計、反饋機制
通過這個項目,您不僅可以掌握Python編程的基礎知識,還能學習到軟件設計的核心概念和最佳實踐。無論是作為學習案例還是實用工具,這個通訊錄管理系統都能滿足您的需求。
后期會改寫成django框架的形式完成這個小項目,實現界面化
今日分享語錄
你的孤獨,雖敗猶榮