### C++课程设计报告知识点概览
#### 一、设计要求
本课程设计的主要目标是开发一个基于C++的通讯录管理系统。系统需满足以下功能需求:
1. **存储联系人信息**:联系人的信息可以存储在手机内存或SIM卡中,每个存储位置的最大容量均为1000个联系人。手机内存中的联系人信息仅包含姓名和电话号码,而SIM卡上的联系人信息则额外包括籍贯和QQ号。
2. **文本文件记录**:需要创建两个文本文件,分别用于保存存储在手机内存和SIM卡中的联系人信息。
3. **菜单驱动界面**:系统采用字符界面,通过菜单选项进行操作。
4. **功能实现**:
- 新建联系人:用户可以决定将新的联系人信息添加到手机内存或SIM卡中。
- 删除联系人:输入电话号码即可删除指定的联系人。若联系人在两个位置均存在,则需要在两个地方均执行删除操作。
- 修改联系人信息:同样通过电话号码定位联系人,并允许修改其信息。如存在多个存储位置,则需在所有位置更新信息。
- 查询联系人:可以根据姓名查询联系人信息,查询结果可能不是唯一的。
- 浏览联系人:展示所有联系人的信息。
- 联系人转移:支持将联系人信息从手机转移到SIM卡,或反之。转移过程中需避免重复数据,并确保存储空间足够。
5. **面向对象特性**:系统需支持继承、多态和重载等面向对象编程特性。
6. **提交材料**:完成设计后,需提交完整的程序源代码和课程设计报告。
#### 二、总体设计
项目由9个文件组成,其中包括4个头文件和5个cpp文件。整体结构如下:
1. **菜单类 (CaiDan)**:负责显示菜单选项并处理用户的输入选择。
2. **联系人类 (Person)**:定义联系人的基本信息,包括姓名、电话号码等。该类分为两个子类:
- Phone:表示手机内存中的联系人。
- Phone_Cad:表示SIM卡中的联系人,它继承自Phone类,并增加了籍贯和QQ号属性。
3. **通讯簿类 (HuaBu)**:管理一组联系人信息,提供添加、删除、修改等功能。
4. **用户类 (YongHu)**:代表用户,封装了用户与通讯簿交互的所有操作。
#### 三、界面设计与各功能模块实现
1. **Person类**:基础联系人类,用于存储单个联系人的信息。
- **Phone类**:表示手机内存中的联系人,包含基本的姓名和电话号码信息。
- **构造函数**:初始化姓名和电话号码。
- **成员函数**:提供设置、修改姓名和电话号码的功能。
- **运算符重载**:支持输入输出流的重载。
- **Phone_Cad类**:表示SIM卡中的联系人,继承自Phone类,并增加了籍贯和QQ号属性。
2. **HuaBu类**:封装了多个联系人,提供了管理联系人列表的操作。
- **存储管理**:维护两个联系人列表,分别对应手机内存和SIM卡。
- **功能实现**:实现新增、删除、修改、查询和浏览联系人的功能。
- **存储限制**:确保不会超过最大存储容量。
3. **YongHu类**:代表用户,提供用户与通讯簿交互的接口。
- **操作函数**:实现新建、删除、修改、查询、浏览以及联系人转移等功能。
- **状态管理**:跟踪用户的当前操作状态,以便于后续操作。
4. **CaiDan类**:负责显示菜单和处理用户的选择。
- **显示菜单**:列出可用的操作选项。
- **处理输入**:根据用户的输入调用相应的功能函数。
#### 四、使用说明及编程体会
**使用说明**:
1. 启动程序后,会显示主菜单,用户可根据提示进行操作。
2. 输入对应的数字选择操作,如“1”新建联系人、“2”删除联系人等。
3. 按照屏幕提示输入相关信息即可完成操作。
**编程体会**:
1. 面向对象的设计方法使得代码更加模块化,易于管理和扩展。
2. 运用继承机制可以有效地减少代码重复,并提高代码的复用性。
3. 多态特性的使用让程序更加灵活,能够更好地应对不同的运行情况。
4. 通过重载运算符提高了代码的可读性和易用性。
5. 在实际开发过程中,需要注意异常处理和边界条件的处理,确保程序的健壮性和稳定性。