文章目录
- 一、创建结构体及菜单显示
- 二、添加联系人
- 三、显示联系人
- 四、删除联系人
- 五、查找联系人
- 六、修改联系人
- 七、清空联系人
- 八、退出通讯录
本文通过C++实现一个通讯录管理系统,系统要实现的功能如下。
1、添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人;
2、显示联系人:显示通讯录中所有联系人信息;
3、删除联系人:按照姓名进行删除指定联系人;
4、查找联系人:按照姓名查看指定联系人信息;
5、修改联系人:按照姓名重新修改指定联系人;
6、清空联系人:清空通讯录中所有信息;
7、退出通讯录:退出当前使用的通讯录。
一、创建结构体及菜单显示
在实现这个管理系统时,需要创建结构体存放不同类型的数据。
每个联系人的结构体中存放姓名、性别、年龄、联系电话和家庭住址信息,结构体如下。
struct users //用户结构体
{string name;int sex; //1--男 0--女int age;string number;string address;
};
通讯录结构体就是所有用户的集合,此外还要加上一个计数的整型变量,用于计算目前存放的联系人数量。
struct ContactBook //通讯录结构体
{struct users user[MAX];int user_num;
};
菜单显示功能在程序运行后就打印菜单,以供用户输入选择进行某项操作。
菜单显示的函数如下,只在里面完成打印即可。
void show_menu()
{cout <<"*****************************"<<endl;cout <<"****** 1、添加联系人 ******"<<endl;cout <<"****** 2、显示联系人 ******"<<endl;cout <<"****** 3、删除联系人 ******"<<endl;cout <<"****** 4、查找联系人 ******"<<endl;cout <<"****** 5、修改联系人 ******"<<endl;cout <<"****** 6、清空联系人 ******"<<endl;cout <<"****** 7、退出通讯录 ******"<<endl;cout <<"*****************************"<<endl;
}
在主函数中调用菜单显示函数,运行程序之后如下所示,这会让执行的操作更加清楚。
二、添加联系人
在程序运行之后,用户输入1按下回车就要进行添加联系人的操作,添加联系人之前首先要判断通讯录是否已经存满,如果没有存满,就根据通讯录结构体中user_num作为数组下标开始添加联系人,并在添加完成之后将user_num加1,更新存放的联系人数量。
添加联系人的函数实现如下,注意函数参数的传递是通讯录结构体的地址传递,这样在函数中做的修改才能得以体现,后面的函数也是这样。
void add_user(ContactBook *p)
{if(p->user_num == MAX)cout<<"通讯录已满,无法添加新联系人!"<<endl;else{cout<<"输入联系人姓名:";cin>>p->user[p->user_num].name;int sex = 0;while(1){cout<<"输入联系人性别(1--男 0--女):";cin>>sex;if(sex == 0 || sex == 1){p->user[p->user_num].sex = sex;break;}cout<<"格式输入有误,重新输入(1--男 0--女)"<<endl;}int age = 0;while(1){cout<<"输入联系人年龄:";cin>>age;if(age >= 0 && age <= 150){p->user[p->user_num].age = age;break;}cout<<"年龄输入有误,重新输入!"<<endl;}cout<<"输入联系人电话:";cin>>p->user[p->user_num].number;cout<<"输入联系人地址:";cin>>p->user[p->user_num].address;p->user_num ++;}cout<<"添加联系人成功!"<<endl;system("pause"); //按任意键继续system("cls"); //清屏
}
程序运行后添加联系人的过程如下图所示。
三、显示联系人
在程序运行之后,用户输入2按下回车就要进行显示联系人的操作,显示联系人的过程比较简单,首先判断通讯录的user_num成员是否为0,为0表示通讯录为空,打印提示信息,否则就将存放的所有联系人信息打印。
显示联系人的函数实现如下。
void show_user(ContactBook *p)
{if(p->user_num == 0)cout<<"通讯录为空!"<<endl;else{cout<<"姓名\t"<<"性别\t"<<"年龄\t"<<"电话\t"<<"\t地址\t"<<endl;for(int i=0;i<p->user_num;i++){cout<<p->user[i].name<<"\t";/*if(p->user[i].sex == 1)cout<<"男\t";elsecout<<"女\t";*/cout<<(p->user[i].sex == 1 ? "男":"女")<<"\t";cout<<p->user[i].age<<"\t";cout<<p->user[i].number<<"\t";cout<<p->user[i].address<<"\t"<<endl;}}system("pause"); //按任意键继续system("cls"); //清屏
}
显示所有联系人的信息如下图所示。
如果没有联系人就提示通讯录为空。
四、删除联系人
删除、查找、修改都要用到存放联系人的数组下标,因此单独写一个函数用来得到这个索引。
user_index函数根据用户名进行查找,如果找到则返回存放的数组下标,没有找到就返回-1。
int user_index(ContactBook *p,string name)
{if(p->user_num == 0)cout<<"通讯录为空!"<<endl;else{for(int i=0;i<p->user_num;i++){if(p->user[i].name == name)return i;}return -1;}
}
在程序运行之后,用户输入3按下回车就要进行删除联系人的操作,删除联系人的函数如下,在里面调用user_index()函数返回下标值,根据下标值判断删除的用户是否存在,删除之后,当前位置之后的数据都要向前移动一位。
void delete_user(ContactBook *p)
{string name;int index = -1;cout <<"请输入要删除的联系人姓名:";cin >> name;index = user_index(p,name);if(index == -1)cout<<"要删除的联系人不存在!"<<endl;else{for(int i=index;i<p->user_num-1;i++){p->user[i] = p->user[i+1]; //通讯录中存放的数据前移}p->user_num--; //通讯录中人数减1cout<<"删除联系人成功!"<<endl;}system("pause"); //按任意键继续system("cls"); //清屏
}
已经添加了a和b两个联系人,下面删除掉用户名为b的联系人。
删除之后再显示联系人,发现联系人b已经被删除了。
五、查找联系人
在程序运行之后,用户输入4按下回车就要进行查找联系人的操作,根据要查找的联系人姓名查找,如果要查找的信息存在就进行打印,不存在就打印提示信息。
void find_user(ContactBook *p)
{string name;int index = -1;cout <<"请输入要查找的联系人姓名:";cin >> name;index = user_index(p,name);if(index == -1)cout<<"要查找的联系人不存在!"<<endl;else{cout<<"姓名:"<<p->user[index].name<<"\t";cout<<"性别:"<<(p->user[index].sex == 1 ? "男":"女")<<"\t";cout<<"年龄:"<<p->user[index].age<<"\t";cout<<"电话:"<<p->user[index].number<<"\t";cout<<"地址:"<<p->user[index].address<<"\t"<<endl;}system("pause"); //按任意键继续system("cls"); //清屏
}
联系人存在打印的信息如下。
联系人不存在的情况打印如下。
六、修改联系人
在程序运行之后,用户输入5按下回车就要进行修改联系人的操作,修改联系人这里先写了一个函数用来显示需要修改的项,根据用户的输入决定要修改的条目。
void show_item()
{cout <<"*****************************"<<endl;cout <<"******* 1、修改姓名 *******"<<endl;cout <<"******* 2、修改性别 *******"<<endl;cout <<"******* 3、修改年龄 *******"<<endl;cout <<"******* 4、修改电话 *******"<<endl;cout <<"******* 5、修改地址 *******"<<endl;cout <<"******* 6、修改完成 *******"<<endl;cout <<"*****************************"<<endl;
}
修改联系人的函数如下,同样根据联系人的用户名判断要修改的用户是否存在,如果存在就选择要修改的项目,根据选择的项目修改对应的内容。
void modify_user(ContactBook *p)
{string name;int index = -1;cout <<"请输入要修改的联系人姓名:";cin >> name;index = user_index(p,name);if(index == -1)cout<<"要修改的联系人不存在!"<<endl;else{int item = -1;while(1){show_item();cout<<"输入要操作的条目编号:";cin>>item;switch(item){case 1: cout<<"输入修改后联系人姓名:";cin>>p->user[index].name;break;case 2: {cout<<"输入修改后联系人性别(1--男 0--女):";int sex = -1;while(1){cin>>sex;if(sex == 0 || sex == 1){p->user[index].sex = sex;break;}cout<<"格式输入有误,重新输入(1--男 0--女)"<<endl;}break;}case 3:{cout<<"输入修改后联系人年龄:";int age = 0;while(1){cin>>age;if(age >= 0 && age <= 150){p->user[index].age = age;break;}cout<<"年龄输入有误,重新输入!"<<endl;}break;}case 4:cout<<"输入修改后联系人电话:"<<endl;cin>>p->user[index].number;break;case 5:cout<<"输入修改后联系人地址:"<<endl;cin>>p->user[index].address;break;case 6:cout<<"修改联系人信息成功!"<<endl;break;default:cout<<"请正确的输入要操作的条目编号!"<<endl;}if(item == 6)break;}}system("pause"); //按任意键继续system("cls"); //清屏
}
修改的过程如下图所示。
修改后再显示联系人如下,信息就被修改成功了。
七、清空联系人
在程序运行之后,用户输入6按下回车就要进行清空联系人的操作,清空联系人的操作没必要将所有的数据清空,只需要将通讯录结构体中的计数成员user_num清零即可。
void clear_user(ContactBook *p)
{int x;cout<<"是否要清空通讯录?(1--是,0--否)";cin>>x;if(x == 1){p->user_num = 0; //作逻辑清空即可,没必要删除所有数据cout<<"通讯录已清空!"<<endl;}system("pause"); //按任意键继续system("cls"); //清屏
}
清空的过程中还会询问是否清空,如下图所示。
再次显示联系人,显示通讯录为空!
八、退出通讯录
退出通讯录在主函数中实现,主函数及头文件的内容如下。
#include <iostream>
#include <string>
using namespace std;
#define MAX 1000int main()
{ContactBook book; book.user_num = 0; //初始化通讯录人数为0while(1){show_menu();int select;cout <<"输入要操作的项目编号:";cin >> select;switch(select){case 1: add_user(&book);break;case 2: show_user(&book);break;case 3: delete_user(&book);break;case 4: find_user(&book);break;case 5: modify_user(&book);break;case 6: clear_user(&book);break;case 7: system("pause"); //按任意键继续return 0;default: system("cls"); //清屏cout <<"请正确的输入要操作的项目编号!"<<endl;}}system("pause");return 0;
}
当输入7的时候就return 0,按下回车后就退出了程序。
本文参考视频:
黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难