当前位置: 首页 > news >正文

通讯录管理系统设计与实现(C++)

一、系统概述

通讯录管理系统是一个常见的个人信息管理工具,能够帮助用户高效地管理联系人信息。本文将介绍一个基于控制台的通讯录管理系统,并提供C++和Python两种实现版本。

二、核心功能

  1. 添加联系人:保存姓名、性别、年龄、电话、住址等信息

  2. 显示联系人:展示所有联系人信息

  3. 删除联系人:按姓名删除指定联系人

  4. 查找联系人:按姓名查找并显示联系人详情

  5. 修改联系人:按姓名查找并修改联系人信息

  6. 清空通讯录:一键删除所有联系人

三、C++实现

1. 数据结构设计

#define MAX 1000struct Person {string m_name;int m_Sex;int m_Age;string m_Phone;string m_Addr;
};struct Addressbooks {Person personArray[MAX];int m_Size;
};

2. 核心功能实现

添加联系人
void addPerson(Addressbooks * abs)
{if(abs->m_Size==MAX){cout<<"通讯录已满"<<endl;return;}else{string name;cout << "请输入一个姓名:" << endl;cin >> name;abs->personArray[abs->m_Size].m_name = name;cout << "请输入性别(1-男, 2-女):" << endl;cin >> abs->personArray[abs->m_Size].m_Sex;cout << "请输入年龄:" << endl;cin >> abs->personArray[abs->m_Size].m_Age;cout << "请输入联系电话:" << endl;cin >> abs->personArray[abs->m_Size].m_Phone;cout << "请输入家庭地址:" << endl;cin >> abs->personArray[abs->m_Size].m_Addr;abs->m_Size++; // 更新通讯录中人员个数cout << "添加成功!" << endl;}}

2. 核心功能实现

显示联系人
void showPerson(struct Addressbooks * abs)
{if(abs->m_Size==0){cout<<"通讯录为空"<<endl;}else{for(int i=0;i<abs->m_Size;i++){cout<<"姓名:"<<abs->personArray[i].m_name<<"\t";cout<<"性别:"<<(abs->personArray[i].m_Sex==1?"男":"女")<<"\t";cout<<"年龄:"<<abs->personArray[i].m_Age<<"\t";cout<<"联系电话:"<<abs->personArray[i].m_Phone<<"\t";cout<<"家庭住址:"<<abs->personArray[i].m_Addr<<endl;}}
}

删除联系人

//检测联系人是否存在,如果存在,返回联系人所在数组中的具体位置,不存在返回-1
int isExist(Addressbooks * abs,string name)
{for(int i=0;i<abs->m_Size;i++){if(abs->personArray[i].m_name==name){return i;}}return -1;
}
//删除联系人
void deletePerson(Addressbooks * abs)
{cout<<"请选择您要删除的联系人"<<endl;string name;cin>>name;//ret==-1未查询到;!=-1表示查到int ret=isExist(abs,name);if(ret!=-1){//进行删除操作(如果要删除李四,把李四后面的数据前移,并且让通讯录中记录人员个数-1)for(int i=ret;i<abs->m_Size;i++){//数据前移abs->personArray[i]=abs->personArray[i+1];}abs->m_Size--;//更新人员数cout<<"删除成功"<<endl;}else{cout<<"查无此人"<<endl;}
}

查找联系人

void findPerson(Addressbooks * abs)
{cout<<"请选择您要查找的联系人"<<endl;string name;cin>>name;//ret==-1未查询到;!=-1表示查到int ret=isExist(abs,name);if(ret!=-1){cout<<"姓名:"<<abs->personArray[ret].m_name<<"\t";cout<<"性别:"<<(abs->personArray[ret].m_Sex==1?"男":"女")<<"\t";cout<<"年龄:"<<abs->personArray[ret].m_Age<<"\t";cout<<"联系电话:"<<abs->personArray[ret].m_Phone<<"\t";cout<<"家庭住址:"<<abs->personArray[ret].m_Addr<<endl;}else{cout<<"查无此人"<<endl;}
}

修改联系人

void modifyPerson(Addressbooks * abs)
{cout<<"请选择您要修改的联系人"<<endl;string name;cin>>name;//ret==-1未查询到;!=-1表示查到int ret=isExist(abs,name);if(ret!=-1){string name;cout<<"请重新输入姓名:"<<endl;cin>>name;abs->personArray[ret].m_name=name;int sex=0;cout << "请重新输入性别(1-男, 2-女):" << endl;while(true){cin >> sex;if(sex==1||sex==2){abs->personArray[ret].m_Sex==sex;break;}}int age=0;cout<<"请重新输入年龄:"<<endl;cin>>age;abs->personArray[ret].m_Age=age;string phone;cout<<"请重新输入电话号码"<<endl;cin>>phone;abs->personArray[ret].m_Phone=phone;string address;cout<<"请重新输入家庭住址"<<endl;cin>>address;abs->personArray[ret].m_Addr=address;        cout<<"修改成功"<<endl;}else{cout<<"查无此人"<<endl;}
}

清空联系人

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

主程序

int main(){//创建通讯录的结构体变量Addressbooks abs;//当前人员个数abs.m_Size=0;int select=0;//创建用户选择输入的变量while (true){showMenu();cin>>select;switch(select){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:cleanPerson(&abs);//清空联系人break;case 0:cout<<"欢迎下次使用"<<endl;system("pause");return 0;break;default:break;}}system("pause");return 0;
}

四、完整代码

#include <iostream>
using namespace std;
#include <string.h>
#define MAX 1000
//菜单界面
void showMenu()
{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;
}
struct Person
{/* data */string m_name;int m_Sex;int m_Age;string m_Phone;//电话string m_Addr;//家庭住址
};
struct Addressbooks//最大人数
{struct Person personArray[MAX];//方便维护int m_Size;//当前通讯录中人员个数
};
//添加联系人
void addPerson(Addressbooks * abs)
{if(abs->m_Size==MAX){cout<<"通讯录已满"<<endl;return;}else{string name;cout << "请输入一个姓名:" << endl;cin >> name;abs->personArray[abs->m_Size].m_name = name;cout << "请输入性别(1-男, 2-女):" << endl;cin >> abs->personArray[abs->m_Size].m_Sex;cout << "请输入年龄:" << endl;cin >> abs->personArray[abs->m_Size].m_Age;cout << "请输入联系电话:" << endl;cin >> abs->personArray[abs->m_Size].m_Phone;cout << "请输入家庭地址:" << endl;cin >> abs->personArray[abs->m_Size].m_Addr;abs->m_Size++; // 更新通讯录中人员个数cout << "添加成功!" << endl;}}
void showPerson(struct Addressbooks * abs)
{if(abs->m_Size==0){cout<<"通讯录为空"<<endl;}else{for(int i=0;i<abs->m_Size;i++){cout<<"姓名:"<<abs->personArray[i].m_name<<"\t";cout<<"性别:"<<(abs->personArray[i].m_Sex==1?"男":"女")<<"\t";cout<<"年龄:"<<abs->personArray[i].m_Age<<"\t";cout<<"联系电话:"<<abs->personArray[i].m_Phone<<"\t";cout<<"家庭住址:"<<abs->personArray[i].m_Addr<<endl;}}
}
//检测联系人是否存在,如果存在,返回联系人所在数组中的具体位置,不存在返回-1
int isExist(Addressbooks * abs,string name)
{for(int i=0;i<abs->m_Size;i++){if(abs->personArray[i].m_name==name){return i;}}return -1;
}
//删除联系人
void deletePerson(Addressbooks * abs)
{cout<<"请选择您要删除的联系人"<<endl;string name;cin>>name;//ret==-1未查询到;!=-1表示查到int ret=isExist(abs,name);if(ret!=-1){//进行删除操作(如果要删除李四,把李四后面的数据前移,并且让通讯录中记录人员个数-1)for(int i=ret;i<abs->m_Size;i++){//数据前移abs->personArray[i]=abs->personArray[i+1];}abs->m_Size--;//更新人员数cout<<"删除成功"<<endl;}else{cout<<"查无此人"<<endl;}
}
//查找联系人
void findPerson(Addressbooks * abs)
{cout<<"请选择您要查找的联系人"<<endl;string name;cin>>name;//ret==-1未查询到;!=-1表示查到int ret=isExist(abs,name);if(ret!=-1){cout<<"姓名:"<<abs->personArray[ret].m_name<<"\t";cout<<"性别:"<<(abs->personArray[ret].m_Sex==1?"男":"女")<<"\t";cout<<"年龄:"<<abs->personArray[ret].m_Age<<"\t";cout<<"联系电话:"<<abs->personArray[ret].m_Phone<<"\t";cout<<"家庭住址:"<<abs->personArray[ret].m_Addr<<endl;}else{cout<<"查无此人"<<endl;}
}
//修改联系人
void modifyPerson(Addressbooks * abs)
{cout<<"请选择您要修改的联系人"<<endl;string name;cin>>name;//ret==-1未查询到;!=-1表示查到int ret=isExist(abs,name);if(ret!=-1){string name;cout<<"请重新输入姓名:"<<endl;cin>>name;abs->personArray[ret].m_name=name;int sex=0;cout << "请重新输入性别(1-男, 2-女):" << endl;while(true){cin >> sex;if(sex==1||sex==2){abs->personArray[ret].m_Sex==sex;break;}}int age=0;cout<<"请重新输入年龄:"<<endl;cin>>age;abs->personArray[ret].m_Age=age;string phone;cout<<"请重新输入电话号码"<<endl;cin>>phone;abs->personArray[ret].m_Phone=phone;string address;cout<<"请重新输入家庭住址"<<endl;cin>>address;abs->personArray[ret].m_Addr=address;        cout<<"修改成功"<<endl;}else{cout<<"查无此人"<<endl;}
}
//清空联系人
void cleanPerson(Addressbooks * abs)
{abs->m_Size=0;cout<<"通讯录已清空"<<endl;
}
int main(){//创建通讯录的结构体变量Addressbooks abs;//当前人员个数abs.m_Size=0;int select=0;//创建用户选择输入的变量while (true){showMenu();cin>>select;switch(select){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:cleanPerson(&abs);//清空联系人break;case 0:cout<<"欢迎下次使用"<<endl;system("pause");return 0;break;default:break;}}system("pause");return 0;
}

五、系统特色

  1. 简洁高效:基于控制台操作,响应迅速

  2. 数据持久化(可扩展):当前版本为内存存储,可轻松扩展为文件/数据库存储

  3. 跨平台:无需安装额外依赖,可在各种平台运行

  4. 双语言实现:提供C++和Python两种版本,适合不同学习需求

六、扩展建议

  1. 数据持久化:添加文件存储功能,使数据在程序关闭后不丢失

  2. 批量导入导出:支持CSV/Excel格式的联系人导入导出

  3. 多条件查询:支持按年龄、性别等多条件组合查询

  4. 分组管理:支持家庭、朋友、同事等分组管理

http://www.dtcms.com/a/264476.html

相关文章:

  • URL时间戳参数深度解析:缓存破坏与前端优化的前世今生
  • 调试 WebView 旧资源缓存问题:一次从偶发到复现的实战经历
  • 安装Pillow失败,无libjpeg包
  • OWASP Top 10 是什么?
  • Docker+vLLM内网离线部署DeepSeek
  • 数据结构与算法:贪心(二)
  • 【GHS】Green Hills软件MULTI-IDE的安装教程
  • 【NLP第二期中文分词技术:规则、统计与混合方法全解】
  • ESP32与树莓派C++、Rust开发实战
  • 【V8.0 - 语言篇 II】AI的“文案扫描仪”:解剖脚本,量化内容的“灵魂骨架”
  • C++ Qt Widget绘图画布缩放与平移:实现CAD级交互体验
  • 阿里云消息队列 Apache RocketMQ 创新论文入选顶会 ACM FSE 2025
  • Java AQS(AbstractQueuedSynchronizer)详解
  • 阿里巴巴Java开发手册(1.3.0)
  • transformers==4.42.0会有一个BUG
  • 第一修改器 1.0.2 | 免root,支持多开和游戏本地数据修改的强大工具
  • Rancher Server + Kubernets搭建云原生集群平台
  • 【Part 3 Unity VR眼镜端播放器开发与优化】第四节|高分辨率VR全景视频播放性能优化
  • 从模型部署到AI平台:云原生环境下的大模型平台化演进路径
  • C++异步编程里避免超时机制
  • 【深度学习机器学习】Epoch 在深度学习实战中的合理设置指南
  • Linux--线程池
  • git本地分支回退到某个commit,并推送远程,使远程分支也恢复到这个commit
  • 【全网唯一】自动化编辑器 Windows版纯本地离线文字识别插件
  • 6.原始值的响应式方案
  • UniApp 加载 Web 页面完整解决方案
  • UniApp(vue3+vite)如何原生引入TailwindCSS(4)
  • YOLOv11深度解析:Ultralytics新一代目标检测王者的创新与实践(附网络结构图+训练/推理/导出全流程代码详解)
  • 【Erdas实验教程】024:遥感图像辐射增强(亮度反转Brightness Inversion)
  • Python数据解析与图片下载工具:从JSON到本地文件的自动化流程