目录

一、前言

二、设计要求

三、概要设计

3.1 主界面设计

3.1.1 设计图

3.1.2设计代码

3.2 存储结构设计

3.3 系统功能设计

3.3.1 系统流程图​编辑

3.3.2 系统子程序及功能介绍

四、详细设计

4.1 头文件

4.2 数据定义

4.3 系统主要子程序详细设计

4.3.1 主函数

4.3.2 添加联系人

4.3.3 显示联系人

4.3.4 以姓名查找联系人(返回联系人编号)

4.3.5 以电话号码查找联系人(返回联系人编号)

4.3.6 以住址查找联系人(并返回联系人编号)

4.3.7 删除联系人

4.3.8 查找联系人

4.3.9 修改联系人

4.3.10 备份通讯录

4.3.11 恢复通讯录

4.3.12 清空通讯录

4.3.13 退出程序

五、源代码清单


一、前言

通讯录管理系统是一个比较实用的小型管理系统。随着生活节奏的加快,人们追求丰富便捷的电子产品体验,因此也提高对便捷方式的喜爱。当今社会下人们的交际范围越来越广泛,通讯录系统的出现,给人们的生活带来了极大便利和帮助,帮助人们处理繁琐复杂的工作,可以帮人们高效的处理和存储信息。

二、设计要求

使用C++实现一个通讯录管理系统,具有实现通讯录联系人的添加、 删除、查找、修改以及通讯录的清空、备份与还原等功能。

添加联系人:向通讯录中添加联系人,信息包括(姓名、性别、年龄、联系方式、住址)最多记录1000人。

显示联系人:显示通讯录中所有联系人信息。

删除联系人:按照用户需求进行删除指定联系人。

查找联系人:按照用户需求查看指定联系人信息。

修改联系人:按照用户需求重新修改指定联系人。

备份通讯录:将通讯录数据备份到文件中。

恢复通讯录:将备份的数据恢复到通讯录中。

清空通讯录:清空通讯录中所有信息。

退出通讯录:退出当前使用的通讯录。

三、概要设计

3.1 主界面设计

3.1.1 设计图

3.1.2设计代码

void showMenu()
{cout << "***********************" << endl<< "*****1、添加联系人*****" << endl<< "*****2、显示联系人*****" << endl<< "*****3、删除联系人*****" << endl<< "*****4、查找联系人*****" << endl<< "*****5、修改联系人*****" << endl<< "*****6、备份通讯录*****" << endl<< "*****7、恢复通讯录*****" << endl<< "*****8、清空通讯录*****" << endl<< "*****0、退出通讯录*****" << endl<< "***********************" << endl;
}

3.2 存储结构设计

声明一个通讯录结构体,存储联系人结构体和人数。联系人结构体存储的内容有姓名、性别、年龄、电话号码、住址。

3.3 系统功能设计

3.3.1 系统流程图

3.3.2 系统子程序及功能介绍

函数名

功能

int main()

主函数

void showMenu()

菜单调用

void addPerson(addressbook *abs)

添加联系人

void showPerson(const addressbook *abs)

显示联系人

int namefind(addressbook *abs)

int phonefind(addressbook *abs)

int addressfind(addressbook *abs)

按需求查找联系人

(姓名、电话号码、住址)

返回联系人编号

void deletePerson(addressbook *abs)

删除联系人

void findPerson(addressbook *abs)

查找联系人

void modifyPerson(addressbook *abs)

修改联系人

void ofaddressbook(const addressbook *abs)

备份通讯录

void ifaddressbook(addressbook *abs)

恢复通讯录

void cleanPerson(addressbook *abs)

清空联系人

void end()

退出通讯录

四、详细设计

4.1 头文件

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

4.2 数据定义

#define MAX 1000 //最大人数struct Person
{string name;    //姓名string sex;     //性别int age;        //年龄string phone;   //电话号码string address; //住址
};struct addressbook
{Person personarray[MAX]; //通讯录中保存的联系人数组int size;                //通讯录中人员个数
};

4.3 系统主要子程序详细设计

4.3.1 主函数

int main()
{int select;addressbook abs;abs.size = 0;while (true){showMenu(); //菜单调用cin >> select;system("clear");switch (select){case 0: //退出通讯录end();break;case 1: //添加联系人addPerson(&abs);break;case 2: //显示联系人showPerson(&abs);break;case 3: //删除联系人deletePerson(&abs);break;case 4: //查找联系人findPerson(&abs);break;case 5: //修改联系人modifyPerson(&abs);break;case 6: //备份通讯录ofaddressbook(&abs);break;case 7: //恢复通讯录ifaddressbook(&abs);break;case 8: //清空通讯录cleanPerson(&abs);break;default:cout << "输入错误,请重新输入" << endl;cout << "请按任意键并回车继续" << endl; // MAC系统cin >> select;                          // MAC系统system("clear");                        // MAC系统// system("pause");WINDOWS系统// system("cls");WINDOWS系统continue;}cout << "请按任意键并回车继续" << endl; // MAC系统cin >> select;                          // MAC系统system("clear");                        // MAC系统// system("pause");WINDOWS系统// system("cls");WINDOWS系统}return 0;
}

4.3.2 添加联系人

在主菜单按“1”运行,分别输入姓名、性别、年龄、电话、住址。

void addPerson(addressbook *abs)
{if (abs->size == MAX) //判断通讯录人数是否已满{cout << "通讯录人数已满" << endl;}else{cout << "请输入姓名:";cin >> abs->personarray[abs->size].name;cout << "请输入性别:";cin >> abs->personarray[abs->size].sex;cout << "请输入年龄:";cin >> abs->personarray[abs->size].age;cout << "请输入电话号码:";cin >> abs->personarray[abs->size].phone;cout << "请输入住址:";cin >> abs->personarray[abs->size].address;cout << "修改成功" << endl;abs->size++;cout << "联系人添加成功" << endl;}
}

4.3.3 显示联系人

在主菜单按“2”运行,分别显示输入的所有联系人信息。

void showPerson(const addressbook *abs)
{if (abs->size) //判断人数是否为零{for (int i = 0; i < abs->size; i++){cout << "姓名:" << abs->personarray[i].name<< "\t性别:" << abs->personarray[i].sex<< "\t年龄:" << abs->personarray[i].age<< "\t电话号码:" << abs->personarray[i].phone<< "\t住址:" << abs->personarray[i].address<< endl;}}else{cout << "通讯录为空" << endl;}
}

4.3.4 以姓名查找联系人(返回联系人编号)

int namefind(addressbook *abs)
{string name;cout << "请输入您要查找联系人的姓名" << endl;cin >> name;for (int i = 0; i < abs->size; i++) //查找输入的联系人{if (name.compare(abs->personarray[i].name) == 0){return i;}}return -1;
}

4.3.5 以电话号码查找联系人(返回联系人编号)

int phonefind(addressbook *abs)
{string phone;cout << "请输入您要查找联系人的电话号码" << endl;cin >> phone;for (int i = 0; i < abs->size; i++) //查找输入的联系人{if (phone.compare(abs->personarray[i].phone) == 0){return i;}}return -1;
}

4.3.6 以住址查找联系人(并返回联系人编号)

int addressfind(addressbook *abs)
{string address;cout << "请输入您要查找联系人住址" << endl;cin >> address;for (int i = 0; i < abs->size; i++) //查找输入的联系人{if (address.compare(abs->personarray[i].address) == 0){return i;}}return -1;
}

4.3.7 删除联系人

在主菜单按“3”运行,选择按1.姓名2.电话号码3.住址,然后输入一定的数据,通讯录有该联系人则删除,没有则输出查无此人。

void deletePerson(addressbook *abs)
{int n;cout << "请输入查询方式\n1.姓名\n2.电话号码\n3.住址" << endl;cin >> n;switch (n) //选择查询方式{case 1:n = namefind(abs);break;case 2:n = phonefind(abs);break;case 3:n = addressfind(abs);break;default:cout << "您输入有误,请重新输入" << endl;}system("clear");if (n != -1){abs->personarray[n] = abs->personarray[abs->size - 1]; //替换将删除的联系人abs->size--;                                           //通讯录人数-1cout << "删除成功" << endl;}else{cout << "查无此人" << endl;}
}

4.3.8 查找联系人

在主菜单按“4”运行,选择按1.姓名2.电话号码3.住址,然后输入一定的数据,通讯录有该联系人则显示,没有则输出查无此人。

void findPerson(addressbook *abs)
{int n;cout << "请输入查询方式\n1.姓名\n2.电话号码\n3.住址" << endl;cin >> n;switch (n) //选择查询方式{case 1:n = namefind(abs);break;case 2:n = phonefind(abs);break;case 3:n = addressfind(abs);break;default:cout << "您输入有误,请重新输入" << endl;}system("clear");if (n != -1){cout << "姓名:" << abs->personarray[n].name<< "\t性别:" << abs->personarray[n].sex<< "\t年龄:" << abs->personarray[n].age<< "\t电话号码:" << abs->personarray[n].phone<< "\t住址:" << abs->personarray[n].address<< endl;}else{cout << "查无此人" << endl;}
}

4.3.9 修改联系人

在主菜单按“5”运行,选择按1.姓名2.电话号码3.住址,然后输入一定的数据,通讯录有该联系人提示用户输入数据并修改,没有则输出查无此人。

void modifyPerson(addressbook *abs)
{int n;cout << "请输入查询方式\n1.姓名\n2.电话号码\n3.住址" << endl;cin >> n;switch (n) //选择查询方式{case 1:n = namefind(abs);break;case 2:n = phonefind(abs);break;case 3:n = addressfind(abs);break;default:cout << "您输入有误,请重新输入" << endl;}system("clear");if (n != -1){cout << "请输入修改后的姓名:";cin >> abs->personarray[n].name;cout << "请输入修改后的性别:";cin >> abs->personarray[n].sex;cout << "请输入修改后的年龄:";cin >> abs->personarray[n].age;cout << "请输入修改后的电话号码:";cin >> abs->personarray[n].phone;cout << "请输入修改后的住址:";cin >> abs->personarray[n].address;cout << "修改成功" << endl;}else{cout << "查无此人" << endl;}
}

4.3.10 备份通讯录

在主菜单按“6”运行,将通讯录数据备份到文件中。

void ofaddressbook(const addressbook *abs)
{ofstream ofs;ofs.open("addressbook.txt", ios::out); //打开文件ofs << "姓名\t性别\t年龄\t电话号码\t住址" << endl;for (int i = 0; i < abs->size; i++){ofs << abs->personarray[i].name<< "\t\t" << abs->personarray[i].sex<< "\t\t" << abs->personarray[i].age<< "\t\t" << abs->personarray[i].phone<< "\t\t" << abs->personarray[i].address<< endl;}ofs.close(); //关闭文件cout << "备份成功" << endl;
}

4.3.11 恢复通讯录

在主菜单按“7”运行,将文件数据恢复到通讯录中。

void ifaddressbook(addressbook *abs)
{string temp;ifstream ifs;ifs.open("addressbook.txt", ios::in); //打开文件if (ifs.is_open()){getline(ifs, temp); //将文件上方的标签输入到临时字符串while (ifs >> abs->personarray[abs->size].name >> abs->personarray[abs->size].sex >> abs->personarray[abs->size].age >> abs->personarray[abs->size].phone >> abs->personarray[abs->size].address){abs->size++; //人数+1}ifs.close(); //关闭文件cout << "恢复成功" << endl;}else{cout << "文件打开失败" << endl;}
}

4.3.12 清空通讯录

在主菜单按“8”运行,将通讯录中成员全部清空。

void cleanPerson(addressbook *abs)
{abs->size = 0; 将通讯录清空cout << "通讯录已清空" << endl;
}

4.3.13 退出程序

在主菜单按“0”运行,退出通讯录管理系统。

void end()
{cout << "欢迎下次使用" << endl;exit(0); //退出程序
}

五、源代码清单

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;#define MAX 1000 //最大人数struct Person
{string name;    //姓名string sex;     //性别int age;        //年龄string phone;   //电话号码string address; //住址
};struct addressbook
{Person personarray[MAX]; //通讯录中保存的联系人数组int size;                //通讯录中人员个数
};void showMenu();
void addPerson(addressbook *abs);
void showPerson(const addressbook *abs);
int namefind(addressbook *abs);
int phonefind(addressbook *abs);
int addressfind(addressbook *abs);
void deletePerson(addressbook *abs);
void findPerson(addressbook *abs);
void modifyPerson(addressbook *abs);
void ofaddressbook(const addressbook *abs);
void ifaddressbook(addressbook *abs);
void cleanPerson(addressbook *abs);
void end();int main()
{int select;addressbook abs;abs.size = 0;while (true){showMenu(); //菜单调用cin >> select;system("clear");switch (select){case 0: //退出通讯录end();break;case 1: //添加联系人addPerson(&abs);break;case 2: //显示联系人showPerson(&abs);break;case 3: //删除联系人deletePerson(&abs);break;case 4: //查找联系人findPerson(&abs);break;case 5: //修改联系人modifyPerson(&abs);break;case 6: //备份通讯录ofaddressbook(&abs);break;case 7: //恢复通讯录ifaddressbook(&abs);break;case 8: //清空通讯录cleanPerson(&abs);break;default:cout << "输入错误,请重新输入" << endl;cout << "请按任意键并回车继续" << endl; // MAC系统cin >> select;                          // MAC系统system("clear");                        // MAC系统// system("pause");WINDOWS系统// system("cls");WINDOWS系统continue;}cout << "请按任意键并回车继续" << endl; // MAC系统cin >> select;                          // MAC系统system("clear");                        // MAC系统// system("pause");WINDOWS系统// system("cls");WINDOWS系统}return 0;
}void showMenu()
{cout << "***********************" << endl<< "*****1、添加联系人*****" << endl<< "*****2、显示联系人*****" << endl<< "*****3、删除联系人*****" << endl<< "*****4、查找联系人*****" << endl<< "*****5、修改联系人*****" << endl<< "*****6、备份通讯录*****" << endl<< "*****7、恢复通讯录*****" << endl<< "*****8、清空通讯录*****" << endl<< "*****0、退出通讯录*****" << endl<< "***********************" << endl;
}void addPerson(addressbook *abs)
{if (abs->size == MAX) //判断通讯录人数是否已满{cout << "通讯录人数已满" << endl;}else{cout << "请输入姓名:";cin >> abs->personarray[abs->size].name;cout << "请输入性别:";cin >> abs->personarray[abs->size].sex;cout << "请输入年龄:";cin >> abs->personarray[abs->size].age;cout << "请输入电话号码:";cin >> abs->personarray[abs->size].phone;cout << "请输入住址:";cin >> abs->personarray[abs->size].address;cout << "修改成功" << endl;abs->size++;cout << "联系人添加成功" << endl;}
}void showPerson(const addressbook *abs)
{if (abs->size) //判断人数是否为零{for (int i = 0; i < abs->size; i++){cout << "姓名:" << abs->personarray[i].name<< "\t性别:" << abs->personarray[i].sex<< "\t年龄:" << abs->personarray[i].age<< "\t电话号码:" << abs->personarray[i].phone<< "\t住址:" << abs->personarray[i].address<< endl;}}else{cout << "通讯录为空" << endl;}
}int namefind(addressbook *abs)
{string name;cout << "请输入您要查找联系人的姓名" << endl;cin >> name;for (int i = 0; i < abs->size; i++) //查找输入的联系人{if (name.compare(abs->personarray[i].name) == 0){return i;}}return -1;
}int phonefind(addressbook *abs)
{string phone;cout << "请输入您要查找联系人的电话号码" << endl;cin >> phone;for (int i = 0; i < abs->size; i++) //查找输入的联系人{if (phone.compare(abs->personarray[i].phone) == 0){return i;}}return -1;
}int addressfind(addressbook *abs)
{string address;cout << "请输入您要查找联系人住址" << endl;cin >> address;for (int i = 0; i < abs->size; i++) //查找输入的联系人{if (address.compare(abs->personarray[i].address) == 0){return i;}}return -1;
}void deletePerson(addressbook *abs)
{int n;cout << "请输入查询方式\n1.姓名\n2.电话号码\n3.住址" << endl;cin >> n;switch (n) //选择查询方式{case 1:n = namefind(abs);break;case 2:n = phonefind(abs);break;case 3:n = addressfind(abs);break;default:cout << "您输入有误,请重新输入" << endl;}system("clear");if (n != -1){abs->personarray[n] = abs->personarray[abs->size - 1]; //替换将删除的联系人abs->size--;                                           //通讯录人数-1cout << "删除成功" << endl;}else{cout << "查无此人" << endl;}
}void findPerson(addressbook *abs)
{int n;cout << "请输入查询方式\n1.姓名\n2.电话号码\n3.住址" << endl;cin >> n;switch (n) //选择查询方式{case 1:n = namefind(abs);break;case 2:n = phonefind(abs);break;case 3:n = addressfind(abs);break;default:cout << "您输入有误,请重新输入" << endl;}system("clear");if (n != -1){cout << "姓名:" << abs->personarray[n].name<< "\t性别:" << abs->personarray[n].sex<< "\t年龄:" << abs->personarray[n].age<< "\t电话号码:" << abs->personarray[n].phone<< "\t住址:" << abs->personarray[n].address<< endl;}else{cout << "查无此人" << endl;}
}void modifyPerson(addressbook *abs)
{int n;cout << "请输入查询方式\n1.姓名\n2.电话号码\n3.住址" << endl;cin >> n;switch (n) //选择查询方式{case 1:n = namefind(abs);break;case 2:n = phonefind(abs);break;case 3:n = addressfind(abs);break;default:cout << "您输入有误,请重新输入" << endl;}system("clear");if (n != -1){cout << "请输入修改后的姓名:";cin >> abs->personarray[n].name;cout << "请输入修改后的性别:";cin >> abs->personarray[n].sex;cout << "请输入修改后的年龄:";cin >> abs->personarray[n].age;cout << "请输入修改后的电话号码:";cin >> abs->personarray[n].phone;cout << "请输入修改后的住址:";cin >> abs->personarray[n].address;cout << "修改成功" << endl;}else{cout << "查无此人" << endl;}
}void ofaddressbook(const addressbook *abs)
{ofstream ofs;ofs.open("addressbook.txt", ios::out); //打开文件ofs << "姓名\t性别\t年龄\t电话号码\t住址" << endl;for (int i = 0; i < abs->size; i++){ofs << abs->personarray[i].name<< "\t\t" << abs->personarray[i].sex<< "\t\t" << abs->personarray[i].age<< "\t\t" << abs->personarray[i].phone<< "\t\t" << abs->personarray[i].address<< endl;}ofs.close(); //关闭文件cout << "备份成功" << endl;
}void ifaddressbook(addressbook *abs)
{string temp;ifstream ifs;ifs.open("addressbook.txt", ios::in); //打开文件if (ifs.is_open()){getline(ifs, temp); //将文件上方的标签输入到临时字符串while (ifs >> abs->personarray[abs->size].name >> abs->personarray[abs->size].sex >> abs->personarray[abs->size].age >> abs->personarray[abs->size].phone >> abs->personarray[abs->size].address){abs->size++; //人数+1}ifs.close(); //关闭文件cout << "恢复成功" << endl;}else{cout << "文件打开失败" << endl;}
}void cleanPerson(addressbook *abs)
{abs->size = 0; 将通讯录清空cout << "通讯录已清空" << endl;
}void end()
{cout << "欢迎下次使用" << endl;exit(0); //退出程序
}

通讯录管理系统 C++相关推荐

  1. c语言个人通讯录管理系统实验报告_C语言实现个人通讯录管理系统

    如何用c语言制作简易的个人通讯录管理系统?想必这是每一位初步学习c语言的同学需要解决的一个大问题.如何将这些数据类型不完全相同的数据元素存储并访问呢?采用结构体便能轻松解决这个问题! #include ...

  2. c++小项目:通讯录管理系统

    该项目非常适合新手c++的同学来做(当然也包括我),先看一个通讯录管理系统需要写什么东西. 学习于:https://www.bilibili.com/video/BV1et411b73Z?p=75(自 ...

  3. 教你如何用python实现学生通讯录管理系统

    这篇文章主要为大家详细介绍了python实现学生通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了python实现学生通讯录管理系统的具 ...

  4. android运用 sqlite 实现简单的通讯录_大一新生作品:利用 C 语言实现quot;通讯录管理系统quot;,直言太简单...

    说明: 本系统基于C语言实现班级通讯录管理系统,为大一时学习C语言刚入门所做的课程设计.功能包括增.删.查.改等,非常适合初学者练手.通讯录包括的个人信息有姓名.学号.性别.籍贯.政治面貌.手机号.Q ...

  5. 单位员工通讯录管理系统(线性表的应用)

    [问题描述] 为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话.手机号.及电子邮箱.其功能包括通讯录链表的建立.员工通讯信息的查询.修改.插入与删除.以及整个通讯录表的输出. ...

  6. 【黑马程序员 C++教程从0到1入门编程】【笔记2】通讯录管理系统

    黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难 文章目录 1.系统需求 2.创建项目 2.1 创建项目 3.菜单功能 4.退出功能 5.添加联系人 5.1 设计联系人结构体 5.2 设 ...

  7. c语言3级菜单_大一新生作品:利用 C 语言实现quot;通讯录管理系统quot;,直言太简单...

    说明: 本系统基于C语言实现班级通讯录管理系统,为大一时学习C语言刚入门所做的课程设计.功能包括增.删.查.改等,非常适合初学者练手.通讯录包括的个人信息有姓名.学号.性别.籍贯.政治面貌.手机号.Q ...

  8. python通讯录管理程序的用户可行性_通讯录管理系统项目可行性分析

    通讯录管理系统可行性 分析报告 一.可行性研究报告 .................................................................. 错 误!未定义 ...

  9. C++阶段02笔记【通讯录管理系统 完整代码(系统需求、创建项目、添加/显示/删除/查找/修改/清空)】

    C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 01.系统需求 02.创建项目 2.1 创建项目 2.2 添加文件 03.菜单功能 04.退出功能 05.添加联系人 5.1 设 ...

  10. 一个很Low的通讯录管理系统(但是能用)C/C++单链表实现

    通讯录管理系统的设计 问题需求分析 在计算机还未普及之前通讯管理都是由联系人采用名片,通讯录往往采用的是笔录手工记帐的方式来操作的.现在一般的通讯录管理都是采用计算机作为工具的实用的计算机通讯录管理程 ...

最新文章

  1. php mail函数_PHP发送电子邮件函数mail详解
  2. Linux插件shellinabox结合翻译插件使用(以Chrome为例)
  3. 【数据处理】python变量分箱常见手法:分类型、数值型、卡方、自定义
  4. python3 json解析_Python3 JSON编码解码方法详解
  5. linux内核之进程调度
  6. python中mod运算符_Python—运算符模块,pythonoperator
  7. 软件工程第三章(第一部分)
  8. PreparedStatement 原理
  9. 百度排名批量查询_一篇文章告诉你如何快速实现百度霸屏?
  10. 耐得住寂寞,守得住繁华
  11. 如何自建微信外卖平台_如何建立微信点餐平台 微信小程序外卖怎么做
  12. 蚂蚁区块链第2课 如何申请获得100万创新大赛参赛资格?
  13. navicate preminum 12 for Mac 破解版
  14. 微型计算机可以配置,目前主流微型计算机的配置及选购的调查报告
  15. 量产大厂成熟Foc电机控制代于电动自行车电机Foc控制源码
  16. windows 7 管理员获得所有权限的注册表文件
  17. 服务器虚拟化属于saas技术吗,SaaS属于云计算服务吗
  18. diskgenius 数据迁移_Windwos 10系统迁移的一种方法
  19. 如何高效管理企业的海量固定资产?
  20. 2019苏州人工智能产业年会心得笔记

热门文章

  1. 我就知道肯定有人想要这个
  2. 黑色渐变背景css,css-渐变背景,爱了爱了。
  3. 互联网公司常用的黑话,你中招了多少?
  4. 神木林服务器未能,《梦幻西游2》2015年9月22日定期维护公告
  5. VUE+Element学习笔记之登录页面跳转首页
  6. 西部陆海新通道海铁联运通达中国六省市
  7. java gwt_java – 将GWT与Spring集成
  8. 欧拉回路和Hanmilton回路
  9. Python入门-类的成员
  10. 合生活门禁复制数据结构分析