目录

  • 前言
  • 结构体
    • 联系人结构体
    • 通讯录结构体
  • 函数模块
    • 菜单
    • 添加联系人
    • 显示联系人
    • 判断联系人
    • 删除联系人
    • 查找联系人
    • 清空所有联系人
  • main函数
  • 源代码
  • 运行结果

前言

**

建议收藏,亲手写一遍代码,感受指针神奇的魅力;
可以帮助你更好的巩固知识体系,熟悉指针,结构体与函数一起使用时的妙处

**

完成通讯录管理系统所需知识体系
1.结构体
2.指针
3.函数的封装
4.指针与函数的结合使用
5.指针与结构体的结合使用

结构体

联系人结构体

struct person
{string name;//姓名string sex; //性别int age;  //年龄string phone;//手机号string home;//地址};

通讯录结构体

struct addressbook
{struct person personArray[MAX]; //通讯录扩展到100;int size=0;  //当前联系人个数(后面就相当于i++)
};

函数模块

void menu();//菜单
void putit(addressbook* add);//添加联系人
void showperson(addressbook* add);// 显示联系人
int if_include(addressbook* add, string name);//判断联系人
void deleteperson(addressbook* add, int i);//删除联系人
void findPerson( addressbook* add);//查找联系人
void cleanperson(struct addressbook* add);//清空所有联系人

菜单

void menu()
{cout << endl;cout << "**********【主菜单】************" << endl;cout << "---------1.添加联系人:----------" << endl;cout << "---------2.显示联系人:---------" << endl;cout << "---------3.删除联系人:---------" << endl;cout << "---------4.查找联系人:---------" << endl;cout << "---------5.修改联系人:---------" << endl;cout << "---------6.清空联系人:---------" << endl;cout << "---------0.退出通讯录:---------" << endl;cout << "*******************************" << endl;
}

添加联系人

void putit(addressbook* add)//添加联系人功能
{if (add->size == MAX)cout << "通讯录已满" << endl;else{string name;string sex;int age;string phone;string home;cout << "请输入姓名" << endl;cin >> name;add->personArray[add->size].name = name;cout << "请输入姓别" << endl;cin >> sex;add->personArray[add->size].sex = sex;cout << "请输入年龄" << endl;cin >> age;add->personArray[add->size].age = age;cout << "请输入电话号码" << endl;cin >> phone;add->personArray[add->size].phone = phone;cout << "请输入家庭住址" << endl;cin >> home;add->personArray[add->size].home = home;add->size++;cout << "添加联系人成功" << endl;}system("pause");system("cls");menu();
}

有人问添加联系人函数中为什么要使用指针?
因为值传递中形参无法改变实参;
而利用指针的地址传递可以通过函数中的形参改变实参;
具体原理可以参考博主之前的指针基础和指针进阶内容]

显示联系人


void showperson(addressbook* add)
{for (int i = 0; i <add->size; i++){cout << "姓名:  " << add->personArray[i].name;cout << "\t姓别:  " << add->personArray[i].sex;cout << "\t年龄:  " << add->personArray[i].age;cout << "\t电话号码:  " << add->personArray[i].phone;cout << "\t家庭住址:  " << add->personArray[i].home << endl;}system("pause");system("cls");menu();
}

判断联系人

int if_include(addressbook* add, string name)
{for (int i = 0; i < add->size; i++){if (name == add->personArray[i].name){return i;}else{return -1;}}}

删除联系人

void deleteperson(addressbook* add, int i)
{for (; i < add->size; i++){add->personArray[i] = add->personArray[i + 1];}system("pause");system("cls");
}

查找联系人

void findPerson( addressbook* add)
{cout << "请输入您想要查找的联系人:" << endl;string name;cin >> name;int ret = if_include(add, name);if (ret == -1){cout << "查无此人" << endl;}else{   //查到此人,进行显示操作int i = ret;cout << "姓名:" << add->personArray[i].name << "\t";cout << "性别:" << add->personArray[i].sex << "\t";cout << "年龄:" << add->personArray[i].age << "\t";cout << "联系方式:" << add->personArray[i].phone << "\t";cout << "地址:" << add->personArray[i].home << endl;}//按任意键清屏system("pause");system("cls");
}

清空所有联系人

void cleanperson(struct addressbook* add)//清空所有联系人
{cout << "是否确认清空?" << endl;cout << "1 --- 是" << endl;cout << "2 --- 否" << endl;int a;cin >> a;if (a == 1){add->size = 0;//将当前记录联系人数量置为0,做逻辑上的清空操作cout << "通讯录已清空" << endl;}system("pause");system("cls");
}

main函数

int main()
{menu();addressbook add;//定义一个通讯录int choice=1;while (choice != 0){cin >> choice;switch (choice)//选择{case 1: putit(&add);break;case 2: showperson(&add);break;case 3: {cout << "请输入你要删除的人的名字" << endl;string aname;cin >> aname;if (if_include(&add, aname) == -1){cout << "查无此人" << endl;break;}if (if_include(&add, aname)){deleteperson(&add, if_include(&add, aname));}}break; case 4:break;case 5:break;case 6:break;case 0: cout << "欢迎下次使用" << endl;return 0;break;default: {cout << "输入不合法,请重新输入" << endl;break; }}}
}

源代码

#include<iostream>
using namespace std;
#include<string>
#define MAX 100struct person
{string name;//姓名string sex; //性别int age;  //年龄string phone;//手机号string home;//地址};
struct addressbook
{struct person personArray[MAX]; //通讯录扩展到100;int size=0;  //当前联系人个数(后面就相当于i++)
};
void menu();//菜单
void putit(addressbook* add);
void showperson(addressbook* add);
int if_include(addressbook* add, string name);
void deleteperson(addressbook* add, int i);
void findPerson(struct addressbooks* add);//查找联系人
void cleanperson(struct addressbook* add);//清空所有联系人
int main()
{menu();addressbook add;int choice=1;while (choice != 0){cin >> choice;switch (choice){case 1: putit(&add);break;case 2: showperson(&add);break;case 3: {cout << "请输入你要删除的人的名字" << endl;string aname;cin >> aname;if (if_include(&add, aname) == -1){cout << "查无此人" << endl;break;}if (if_include(&add, aname)){deleteperson(&add, if_include(&add, aname));}}break; case 4:break;case 5:break;case 6:break;case 0: cout << "欢迎下次使用" << endl;return 0;break;default: {cout << "输入不合法,请重新输入" << endl;break; }}}
}
void menu()
{cout << endl;cout << "***********【主菜单】***********" << endl;cout << "---------1.添加联系人:----------" << endl;cout << "---------2.显示联系人:---------" << endl;cout << "---------3.删除联系人:---------" << endl;cout << "---------4.查找联系人:---------" << endl;cout << "---------5.修改联系人:---------" << endl;cout << "---------6.清空联系人:---------" << endl;cout << "---------0.退出通讯录:---------" << endl;cout << "********************************" << endl;
}
void putit(addressbook* add)//添加联系人功能
{if (add->size == MAX)cout << "通讯录已满" << endl;else{string name;string sex;int age;string phone;string home;cout << "请输入姓名" << endl;cin >> name;add->personArray[add->size].name = name;cout << "请输入姓别" << endl;cin >> sex;add->personArray[add->size].sex = sex;cout << "请输入年龄" << endl;cin >> age;add->personArray[add->size].age = age;cout << "请输入电话号码" << endl;cin >> phone;add->personArray[add->size].phone = phone;cout << "请输入家庭住址" << endl;cin >> home;add->personArray[add->size].home = home;add->size++;cout << "添加联系人成功" << endl;}system("pause");system("cls");menu();
}
void showperson(addressbook* add)
{for (int i = 0; i <add->size; i++){cout << "姓名:  " << add->personArray[i].name;cout << "\t姓别:  " << add->personArray[i].sex;cout << "\t年龄:  " << add->personArray[i].age;cout << "\t电话号码:  " << add->personArray[i].phone;cout << "\t家庭住址:  " << add->personArray[i].home << endl;}system("pause");system("cls");menu();
}
int if_include(addressbook* add, string name)
{for (int i = 0; i < add->size; i++){if (name == add->personArray[i].name){return i;}else{return -1;}}}
void deleteperson(addressbook* add, int i)
{for (; i < add->size; i++){add->personArray[i] = add->personArray[i + 1];}system("pause");system("cls");
}void findPerson( addressbook* add)
{cout << "请输入您想要查找的联系人:" << endl;string name;cin >> name;int ret = if_include(add, name);if (ret == -1){cout << "查无此人" << endl;}else{   //查到此人,进行显示操作int i = ret;cout << "姓名:" << add->personArray[i].name << "\t";cout << "性别:" << add->personArray[i].sex << "\t";cout << "年龄:" << add->personArray[i].age << "\t";cout << "联系方式:" << add->personArray[i].phone << "\t";cout << "地址:" << add->personArray[i].home << endl;}//按任意键清屏system("pause");system("cls");
}
void cleanperson(struct addressbook* add)//清空所有联系人
{cout << "是否确认清空?" << endl;cout << "1 --- 是" << endl;cout << "2 --- 否" << endl;int a;cin >> a;if (a == 1){add->size = 0;//将当前记录联系人数量置为0,做逻辑上的清空操作cout << "通讯录已清空" << endl;}system("pause");system("cls");
}

由于代码量过大,建议大家可以试着分文件编写代码,也可以方便查看

运行结果



点赞收藏,反复练习

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. XamarinForms教程构建XamarinForms开发环境
  2. Hyper-V 怎样拷贝文件至虚拟硬盘并附加到虚拟机上
  3. 中国最大的python社区-python最大数
  4. U3D打apk包的常见错误
  5. 内存泄漏了,咋回事?
  6. STM32的GPIO为输出模式时获取其输出状态
  7. 借用虚拟机在真机安装 ubuntu, 亦可安装至移动硬盘
  8. 和我一起来分析某药品仓储管理系统 卡死现象
  9. Nacos(十一)之NacosSync 介绍
  10. 错误记录(四)java.lang.IllegalArgumentException: Control character in cookie value or attribute.
  11. 怎么退出mysql_如何安全地关闭MySQL
  12. SAP License:不要让ERP沦为记账工具
  13. 9-16 原生命令和redis-trib.rb对比
  14. 无限滑动的banner图,中间显示大图两边显示一部分,无限滚动
  15. Ubuntu 安装sopcast-player看网络电视
  16. 【IC7】FPGA最高工作频率的计算方法;FPGA最大输出频率;查看handbook的PLL最高频率;Fout_ext;Fout两个参数;FPGA输出1ns脉冲
  17. es 按条件查询数据总条数
  18. 制作半透明的毛玻璃效果教程
  19. 【动态更新】解决夫妻两地分居手续
  20. 腾讯云服务器地域节点IP速度测试表

热门文章

  1. 对抗Windows Defender的方法和思路
  2. 服务器 字体文件太大,网页的字体文件过大
  3. 微分方程数值解 matlab,本学期微分方程数值解课程总结(matlab代码)
  4. Python-计算三角形边长和面积
  5. Windows 10家庭版也能共享打印机(上)启用Guest账户
  6. [MAE]Masked Autoencoders掩膜自编码器
  7. activereport subreport
  8. execl表格同时打开多个独立窗口编辑
  9. 武田宣布就拟收购Shire plc签署优先短期贷款工具协议及次级银团贷款协议和过桥信贷协议第二次修订
  10. 客户的sample和项目计划