Python简易电话簿系统:从设计到实现的全流程解析

Python简易电话簿系统:从设计到实现的全流程解析

一、系统设计目标与功能规划

1.1 核心功能需求

一个完整的电话簿系统需要实现以下基础功能:

  • 联系人管理:支持添加、删除、修改联系人信息
  • 查询功能:通过姓名或电话号码快速检索
  • 数据持久化:将联系人信息存储到本地文件
  • 异常处理:处理用户输入错误和文件操作异常

1.2 技术选型分析

Python作为实现语言的优势在于:

  • 简洁的语法结构降低开发门槛
  • 丰富的内置库(如jsonpickle)支持数据存储
  • 跨平台特性保证系统可移植性

数据存储方案对比:
| 存储方式 | 优点 | 缺点 | 适用场景 |
|————-|———|———|—————|
| 文本文件 | 实现简单 | 查询效率低 | 少量数据 |
| JSON文件 | 结构化存储 | 读写效率一般 | 中等规模数据 |
| SQLite | 完整数据库功能 | 需要额外学习 | 复杂查询需求 |

本系统选择JSON作为存储格式,在实现复杂度和功能需求间取得平衡。

二、系统架构设计

2.1 模块划分

采用三层架构设计:

  1. ├─ presentation层(用户交互)
  2. ├─ business逻辑层(数据处理)
  3. └─ data访问层(存储操作)

2.2 数据结构设计

单个联系人信息包含:

  1. {
  2. "name": "张三",
  3. "phone": "13800138000",
  4. "email": "zhangsan@example.com",
  5. "address": "北京市海淀区"
  6. }

三、核心功能实现

3.1 数据存储层实现

使用JSON模块实现数据持久化:

  1. import json
  2. import os
  3. class DataManager:
  4. def __init__(self, file_path="contacts.json"):
  5. self.file_path = file_path
  6. self._initialize_file()
  7. def _initialize_file(self):
  8. if not os.path.exists(self.file_path):
  9. with open(self.file_path, 'w') as f:
  10. json.dump([], f)
  11. def save_contacts(self, contacts):
  12. with open(self.file_path, 'w') as f:
  13. json.dump(contacts, f, indent=4)
  14. def load_contacts(self):
  15. with open(self.file_path, 'r') as f:
  16. return json.load(f)

3.2 业务逻辑层实现

核心业务方法:

  1. class ContactManager:
  2. def __init__(self, data_manager):
  3. self.data_manager = data_manager
  4. def add_contact(self, contact):
  5. contacts = self.data_manager.load_contacts()
  6. contacts.append(contact)
  7. self.data_manager.save_contacts(contacts)
  8. def delete_contact(self, name):
  9. contacts = self.data_manager.load_contacts()
  10. new_contacts = [c for c in contacts if c['name'] != name]
  11. if len(contacts) == len(new_contacts):
  12. raise ValueError("联系人不存在")
  13. self.data_manager.save_contacts(new_contacts)
  14. def search_contact(self, keyword):
  15. contacts = self.data_manager.load_contacts()
  16. return [c for c in contacts
  17. if keyword.lower() in c['name'].lower()
  18. or keyword in c['phone']]

3.3 用户界面实现

命令行交互界面:

  1. class CLI:
  2. def __init__(self, contact_manager):
  3. self.cm = contact_manager
  4. def run(self):
  5. while True:
  6. print("\n电话簿管理系统")
  7. print("1. 添加联系人")
  8. print("2. 删除联系人")
  9. print("3. 查询联系人")
  10. print("4. 退出")
  11. choice = input("请选择操作:")
  12. try:
  13. if choice == '1':
  14. self._add_contact()
  15. elif choice == '2':
  16. self._delete_contact()
  17. elif choice == '3':
  18. self._search_contact()
  19. elif choice == '4':
  20. print("感谢使用!")
  21. break
  22. else:
  23. print("无效输入")
  24. except Exception as e:
  25. print(f"操作失败:{str(e)}")
  26. def _add_contact(self):
  27. contact = {
  28. 'name': input("姓名:"),
  29. 'phone': input("电话:"),
  30. 'email': input("邮箱:"),
  31. 'address': input("地址:")
  32. }
  33. self.cm.add_contact(contact)
  34. print("添加成功!")
  35. # 其他方法实现...

四、系统优化与扩展

4.1 性能优化策略

  1. 缓存机制:对频繁查询的数据建立内存缓存
  2. 批量操作:支持批量导入/导出联系人
  3. 索引优化:为常用查询字段建立索引

4.2 功能扩展方向

  1. 数据验证:增加电话号码格式校验
    ```python
    import re

def validate_phone(phone):
pattern = r’^1[3-9]\d{9}$’
return bool(re.match(pattern, phone))

  1. 2. **分组管理**:按部门/地区分类联系人
  2. 3. **导入导出**:支持CSV/Excel格式
  3. ### 4.3 异常处理设计
  4. 关键异常处理场景:
  5. ```python
  6. try:
  7. # 文件操作
  8. with open(file_path) as f:
  9. pass
  10. except FileNotFoundError:
  11. print("数据文件不存在,将创建新文件")
  12. except PermissionError:
  13. print("没有文件访问权限")
  14. except Exception as e:
  15. print(f"未知错误:{str(e)}")

五、完整系统集成

主程序入口:

  1. def main():
  2. data_manager = DataManager()
  3. contact_manager = ContactManager(data_manager)
  4. cli = CLI(contact_manager)
  5. cli.run()
  6. if __name__ == "__main__":
  7. main()

六、部署与使用建议

  1. 运行环境

    • Python 3.6+
    • 无需额外依赖库
  2. 使用方式

    • 直接运行主程序文件
    • 通过命令行参数指定数据文件路径
  3. 安全建议

    • 定期备份数据文件
    • 敏感信息加密存储

七、系统测试方案

7.1 单元测试示例

  1. import unittest
  2. from tempfile import NamedTemporaryFile
  3. class TestDataManager(unittest.TestCase):
  4. def setUp(self):
  5. self.temp_file = NamedTemporaryFile(delete=False)
  6. self.dm = DataManager(self.temp_file.name)
  7. def test_empty_file_initialization(self):
  8. contacts = self.dm.load_contacts()
  9. self.assertEqual(contacts, [])
  10. def tearDown(self):
  11. import os
  12. os.unlink(self.temp_file.name)

7.2 集成测试要点

  1. 添加联系人后验证文件内容
  2. 删除联系人后检查剩余数量
  3. 查询功能验证边界条件

八、总结与展望

本系统通过模块化设计实现了电话簿的核心功能,采用JSON作为存储格式在开发效率和性能间取得了良好平衡。未来可扩展方向包括:

  • 增加图形用户界面
  • 集成云存储服务
  • 开发移动端应用
  • 添加数据同步功能

通过这个项目,开发者可以掌握Python文件操作、异常处理、模块化设计等关键技能,为开发更复杂的应用系统打下基础。