通讯录管理系统设计与实现(C++)
一、系统概述
通讯录管理系统是一个常见的个人信息管理工具,能够帮助用户高效地管理联系人信息。本文将介绍一个基于控制台的通讯录管理系统,并提供C++和Python两种实现版本。
二、核心功能
-
添加联系人:保存姓名、性别、年龄、电话、住址等信息
-
显示联系人:展示所有联系人信息
-
删除联系人:按姓名删除指定联系人
-
查找联系人:按姓名查找并显示联系人详情
-
修改联系人:按姓名查找并修改联系人信息
-
清空通讯录:一键删除所有联系人
三、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;
}
五、系统特色
-
简洁高效:基于控制台操作,响应迅速
-
数据持久化(可扩展):当前版本为内存存储,可轻松扩展为文件/数据库存储
-
跨平台:无需安装额外依赖,可在各种平台运行
-
双语言实现:提供C++和Python两种版本,适合不同学习需求
六、扩展建议
-
数据持久化:添加文件存储功能,使数据在程序关闭后不丢失
-
批量导入导出:支持CSV/Excel格式的联系人导入导出
-
多条件查询:支持按年龄、性别等多条件组合查询
-
分组管理:支持家庭、朋友、同事等分组管理