记录一下利用C++来实现一个通讯录管理系统
系统中需要实现的功能如下:
- 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人
- 显示联系人:显示通讯录中所有联系人信息
- 删除联系人:按照姓名进行删除指定联系人
- 查找联系人:按照姓名查看指定联系人信息
- 修改联系人:按照姓名重新修改指定联系人
- 清空联系人:清空通讯录中所有信息
- 退出通讯录:退出当前使用的通讯录
显示菜单功能
首先创建一个cpp文件,写好基本框架:
#include <iostream>
using namespace std;
int main(){
system("pause");
return 0;
}
之后创建一个showMenu函数用于显示系统的菜单
实际上就是打印出提示信息,提示用户输入不同数字代表对应的功能:
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;
}
之后在main函数中调用这个函数即可:
#include <iostream>
using namespace std;
int main(){
showMenu();
system("pause");
return 0;
}
退出系统功能
定义个select变量接收用户输入,
使用switch结构分别对用户不同的输入数字进行处理,
同时在外层使用一个while循环,让程序循环执行,使用户能持续输入,
最终输入0后,直接结束程序,达到退出系统的功能。
int main(){
int select = 0; //用于接收用户输入的数字,对应执行不同的功能
while (true)
{
showMenu();
cin >> select;
switch (select)
{
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 0:
cout << "欢迎下次使用" << endl;
system("pause");
return 0; //当输入0后,直接return退出程序
break;
default:
cout << "你输入的是啥玩意???" << endl;
break;
}
}
system("pause");
return 0;
}
定义人员结构体和通讯录结构体
#define MAX 1000
struct Person
{
string name;
int sex;
int age;
string phone;
string address;
};
struct Books
{
struct Person personArray[MAX]; //用于保存联系人信息的数组,最大人数为1000
int p_size; //记录通讯录中的人员个数
};
添加联系人
在函数最后使用system("cls");实现窗口信息清屏操作
void addPerson(struct Books * b){
if (b->p_size == MAX)
{
cout << "已经满员啦!!" << endl;
return;
}
else{
//输入姓名
string name;
cout << "请输入姓名:" << endl;
cin >> name;
b->personArray[b->p_size].name = name;
//输入性别
cout << "请输入性别:" << endl;
cout << "1 代表 男" << endl;
cout << "2 代表 女" << endl;
int sex = 0;
while (true)
{
cin >> sex;
if (sex == 1 || sex == 2)
{
b->personArray[b->p_size].sex = sex;
break;
}
cout << "输入错误!请检查输入" << endl;
}
//输入年龄
int age = 0;
cout << "请输入年龄:" << endl;
cin >> age;
b->personArray[b->p_size].age = age;
//输入电话
string phone;
cout << "请输入电话:" << endl;
cin >> phone;
b->personArray[b->p_size].phone = phone;
//输入地址
string address;
cout << "请输入地址:" << endl;
cin >> address;
b->personArray[b->p_size].address = address;
b->p_size++;
cout << "添加完成" << endl;
system("pause");
system("cls"); //进行清屏操作,使用户完成操作后,终端只显示菜单信息
}
}
查看联系人
打印出通讯录内的所有联系人信息
void showPerson(struct Books * b){
if (b->p_size == 0)
{
cout << "当前记录为空!" << endl; //检查通讯录是否为空
system("pause");
system("cls");
}
else
{
for (int i = 0; i < b->p_size; i++) //打印出所有联系人信息
{
cout << "姓名:" << b->personArray[i].name << "\t";
cout << "性别:" << (b->personArray[i].sex == 1 ? "男" : "女") << "\t";
cout << "年龄:" << b->personArray[i].age << "\t";
cout << "电话:" << b->personArray[i].phone << "\t";
cout << "地址:" << b->personArray[i].address << endl;
}
system("pause");
system("cls");
}
}
判断联系人是否存在
这里定义了一个根据姓名判断联系人是否存在的函数,
因为后续的删除、查找、修改功能都需要先进行检查联系人是否存在,因此封装了一个额外的函数
int isExist(struct Books * b, string name){
for (int i = 0; i < b->p_size; i++)
{
if (b->personArray[i].name == name)
{
return i; //如果通讯录中有联系人的姓名,返回联系人信息的下标索引编号
}
}
return -1; //没有则返回-1
}
删除联系人
删除联系人:只需要将后面联系人信息往前覆盖,就可以删除当前的联系人信息了
void deletePerson(struct Books * b){
cout << "请输入需要删除的联系人姓名:" << endl;
string name;
cin >> name;
if (isExist(b, name) != -1)
{
for (int i = isExist(b, name); i < b->p_size; i++)
{
//联系人信息进行一个前移的操作,即实现删除当前联系人
b->personArray[i] = b->personArray[i+1];
}
b->p_size--;
cout << "删除成功!" << endl;
}
else
{
cout << "查无此人,请重新输入" << endl;
}
system("pause");
system("cls");
}
查找联系人
根据姓名查找联系人信息,并打印出来
void findPerson(struct Books * b){
cout << "请输入需要查找的联系人姓名:" << endl;
string name;
cin >> name;
int ret = isExist(b, name);
if (ret != -1)
{
cout << "姓名:" << b->personArray[ret].name << "\t";
cout << "性别:" << (b->personArray[ret].sex == 1 ? "男" : "女") << "\t";
cout << "年龄:" << b->personArray[ret].age << "\t";
cout << "电话:" << b->personArray[ret].phone << "\t";
cout << "地址:" << b->personArray[ret].address << endl;
}
else
{
cout << "查无此人,请重新输入" << endl;
}
system("pause");
system("cls");
}
修改联系人
根据姓名选择所要修改的联系人信息,把新输入的信息覆盖掉原来的信息
void modifyPerson(struct Books * b){
cout << "请输入需要修改的联系人姓名:" << endl;
string name;
cin >> name;
int ret = isExist(b, name);
if (ret != -1)
{
//修改姓名
cout << "请输入修改的姓名:" << endl;
string name;
cin >> name;
b->personArray[ret].name = name;
//修改性别
cout << "请输入修改的性别:" << endl;
cout << "1 代表 男" << endl;
cout << "2 代表 女" << endl;
int sex;
while(true){
cin >> sex;
if (sex == 1 || sex == 2)
{
b->personArray[ret].sex = sex;
break;
}
else
{
cout << "输入有误,请重新输入!" << endl;
}
}
//修改年龄
int age = 0;
cout << "请输入修改的年龄:" << endl;
cin >> age;
b->personArray[ret].age = age;
//修改电话
string phone;
cout << "请输入修改的电话:" << endl;
cin >> phone;
b->personArray[ret].phone = phone;
//修改地址
string address;
cout << "请输入修改的地址:" << endl;
cin >> address;
b->personArray[ret].address = address;
cout << "修改成功!!" << endl;
}
else
{
cout << "查无此人,请重新输入" << endl;
}
system("pause");
system("cls");
}
清空通讯录
void cleanPerson(struct Books * b){
cout << "确定清空通讯录所有信息?" << endl;
cout << "1 代表 确定" << endl;
cout << "2 代表 取消" << endl;
int n;
while(true){
cin >> n;
if (n == 1)
{
b->p_size = 0; //直接把通讯录的联系人数量置为0,做逻辑清空即可
cout << "通讯录已清空" << endl;
break;
}
else if (n == 2)
{
cout << "已取消" << endl;
break;
}
else
{
cout << "输入有误,请重新输入!" << endl;
}
}
system("pause");
system("cls");
}
主函数程序
在主函数中根据用户输入的数字调用不同的功能函数即可:
int main(){
Books books; //创建通讯录结构体
books.p_size = 0; //先初始化人员个数为 0
int select = 0;
while (true)
{
showMenu();
cin >> select;
switch (select)
{
case 1:
addPerson(&books);
break;
case 2:
showPerson(&books);
break;
case 3:
deletePerson(&books);
break;
case 4:
findPerson(&books);
break;
case 5:
modifyPerson(&books);
break;
case 6:
cleanPerson(&books);
break;
case 0:
cout << "欢迎下次使用" << endl;
system("pause");
return 0;
break;
default:
cout << "你输入的是啥玩意???" << endl;
system("pause");
system("cls");
break;
}
}
system("pause");
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY