### C++课程设计报告——通讯录系统
#### 设计目的
本课程设计旨在通过实际项目实践,使学生掌握C++编程的基本方法和技术,并能够利用所学知识开发一个实用的通讯录管理系统。该系统具备基本的数据管理功能,如数据的插入、修改、删除、显示以及查询等。
#### 功能需求
1. **数据录入**:用户可以输入联系人的基本信息,包括姓名、工作单位、电话号码和电子邮箱地址。
2. **数据修改**:系统允许用户修改已存在的记录中的姓名和电话号码。
3. **数据删除**:支持删除记录的功能。
4. **数据展示**:能够展示所有已保存的记录。
5. **数据查询**:支持按照姓名或电话号码查询联系人信息。
#### 设计思路
本系统的数据存储采用文本文件的形式,因此需要实现文件的读写操作。为了方便用户操作,系统提供了交互式的菜单选择界面来实现不同的功能模块。
#### 总体设计
通讯录管理系统的总体设计可以分为以下几个主要模块:
1. **数据输入模块**:用于录入新的联系人信息。
2. **数据修改模块**:允许用户更改已有的联系人信息。
3. **数据删除模块**:提供删除指定联系人记录的功能。
4. **数据展示模块**:将所有联系人信息展示给用户。
5. **数据查询模块**:支持按照姓名或电话号码进行查询。
#### 详细设计
**主函数**的设计要求简洁明了,主要负责显示功能选项并根据用户的输入调用相应的功能模块。
- **主函数流程图**:
- 显示功能菜单。
- 输入功能编号`n`。
- 判断`n`是否在1到7之间。
- 根据`n`的值调用相应的功能模块函数。
- 结束程序。
**具体实现**:
- **主界面**:定义`menu()`函数,用于显示菜单并获取用户的选择。
- **新建联系人**:定义`enter()`函数,实现新增联系人的功能。
- **添加联系人**:定义`add()`函数,允许用户向通讯录中添加新的联系人信息。
- **修改联系人**:定义`modify()`函数,提供修改联系人信息的功能。
- **删除联系人**:定义`deleter()`函数,支持删除指定联系人。
- **浏览联系人**:定义`browse()`函数,展示所有已保存的联系人信息。
- **查找联系人**:定义`search()`函数,实现基于姓名或电话号码的联系人搜索。
#### 源代码示例
以下为部分源代码片段,展示了如何实现主界面及基本的数据管理功能。
```cpp
#define N 50
#include <stdio.h>
#include <string.h>
// 定义联系人结构体
struct people {
char name[20];
char company[50];
char num[15];
char mail[20];
} peop[N];
// 主界面函数
void menu() {
int n, w1;
void enter();
void add();
void modify();
void browse();
void deleter();
void search();
do {
puts("\t****************************** 菜单 *****************************\t\n\n");
puts("\t\t\t\t1. 新建联系人");
puts("\t\t\t\t2. 添加联系人");
puts("\t\t\t\t3. 修改");
puts("\t\t\t\t4. 删除");
puts("\t\t\t\t5. 浏览");
puts("\t\t\t\t6. 查找");
puts("\t\t\t\t7. 退出");
puts("\n\n\t*************************** 通讯录 ******************************\t\n");
printf("请选择服务种类 (1-7): []\b\b");
scanf("%d", &n);
if (n < 1 || n > 7) {
w1 = 1;
getchar();
} else {
w1 = 0;
}
} while (w1 == 1);
switch (n) {
case 1: enter(); break; // 输入模块
case 2: add(); break; // 添加模块
// 其他功能模块省略
}
}
// 加载已有数据
int load() {
FILE *fp;
int i;
if ((fp = fopen("file", "rb")) == NULL) {
printf("\nCannot open file\n");
exit(0);
}
for (i = 0; !feof(fp); i++) {
fread(&peop[i], sizeof(struct people), 1, fp);
}
fclose(fp);
return (i - 1);
}
// 修改数据
int modify_data(int i, int n) {
int c, w1;
void input(int i);
void menu();
do {
puts("\n修改选项 =>\n\n"
"\t1). 姓名\n"
"\t2). 单位\n"
"\t3). 电话号码\n"
"\t4). 邮箱\n"
"\t5). 所有数据\n"
"\t6). 取消并返回");
printf("请选择? : []\b\b");
scanf("%d", &c);
if (c > 6 || c < 1) {
puts("\nChoose error! Please again!");
getchar();
}
} while (c > 6 || c < 1);
// 根据用户选择调用相应的修改函数
// 代码省略
}
```
### 小结
本通讯录管理系统通过C++语言实现了基本的数据管理功能,不仅满足了课程设计的需求,也为学习者提供了一个实践C++编程技巧的良好平台。通过对各个功能模块的设计与实现,不仅锻炼了学生的逻辑思维能力,也加深了他们对C++语言的理解。