一、创建两个结构体
1.创建结构体联系人:
Person结构体包括联系人的姓名、性别和电话号码:
struct Person {
string m_name;
string m_sex;
string m_number;
};
2.创建通讯录
Addressbook结构体包括数组personarr[MAX](MAX是直接使用#define定义的,方便更改)和联系人在数组中的位置m_size。
struct Addressbook {
struct Person personarr[MAX];
int m_size;
};
二、创建通讯录的整体结构
这个通讯录主要包含六个功能:1.添加联系人;2.查找联系人;3修改联系人信息;4.显示通讯录;5.删除联系人信息;6.退出通讯录。
int main()
{
Addressbook ads;
int select = 0;
ads.m_size = 0;
while (1) {
Menu();
cin >> select;
switch (select) {
case 1://1、添加联系人
addperson(&ads);
break;
case 2://2、查找联系人
lookupPerson(&ads);
break;
case 3://3、修改联系人
modifyPerson(&ads);
break;
case 4://4、显示通讯录
showPerson(&ads);
break;
case 5://5、删除联系人
deletePerson(&ads);
break;
case 0:
cout << "谢谢使用" << endl;
system("pause");
return 0;
break;
}
}
system("pause");
return 0;
}
三、通讯录菜单
void Menu()
{
cout << "*********************" << endl;
cout << "****1、添加联系人****" << endl;
cout << "****2、查找联系人****" << endl;
cout << "****3、修改联系人****" << endl;
cout << "****4、显示通讯录****" << endl;
cout << "****5、删除联系人****" << endl;
cout << "****0、退出通讯录****" << endl;
cout << "*********************" << endl;
}
四、添加联系人模块
通过此模块可以添加联系人的姓名、性别和电话号码。
//添加联系人信息
void addperson(Addressbook *ads) {
if (ads->m_size >= MAX) {
cout << "联系人已满" << endl;
return;
}
else {
//添加姓名
string name;
cout << "请输入联系人姓名:" << endl;
cin >> name;
ads->personarr[ads->m_size].m_name = name;
//添加性别
while (1) {
int sex = 0;
cout << "请输入性别:" << endl;
cout << "1---男" << endl;
cout << "2---女" << endl;
cin >> sex;
if (sex == 1 ) {
ads->personarr[ads->m_size].m_sex = "男";
break;
}
else if (sex == 2) {
ads->personarr[ads->m_size].m_sex = "女";
break;
}
else {
cout << "输入错误" << endl;
}
}
//添加电话号码
string number;
cout << "请输入电话号" << endl;
cin >> number;
ads->personarr[ads->m_size].m_number = number;
ads->m_size++;
cout << "添加成功" << endl;
//按任意键清屏
system("pause");
system("cls");
}
}
五、添加isExist函数
添加isExist函数是为了判断通讯录里是否有需要找到的人,以此方便后续功能代码的编写,
如果没有这个函数,后续的代码量将会加大。
//判断系统里是否有该联系人
int isExist(Addressbook* ads, string name)
{
for (int i = 0; i < ads->m_size; i++) {
//系统里没有查找的人返回-1,否则返回i
if (ads->personarr[i].m_name == name) {
return i;
}
}
return -1;
}
六、查找联系人信息
这个函数就是使用了isExist函数完成的。
//查找联系人信息
void lookupPerson(Addressbook* ads)
{
string name;
cout << "请输入人名" << endl;
cin >> name;
int ret = isExist(ads, name);
if (ret != -1) {
cout << "找到信息:" << endl;
cout << " 姓名:" << ads->personarr[ret].m_name << endl;
cout << " 姓名:" << ads->personarr[ret].m_sex << endl;
cout << " 姓名:" << ads->personarr[ret].m_number << endl;
}
else {
cout << "查无此人" << endl;
}
//按任意键清屏
system("pause");
system("cls");
}
七、修改联系人信息
通过modifyPerson函数可以做到修改联系人信息的功能:
//修改联系人
void modifyPerson(Addressbook* ads)
{
string name;
cout << "请输入姓名:" << endl;
cin >> name;
int ret = isExist(ads, name);
if (ret != -1) {
//修改姓名
string name;
cout << "请输入新姓名:" << endl;
cin >> name;
ads->personarr[ret].m_name = name;
int sex;
while (1) {
int sex = 0;
cout << "请输入新性别:" << endl;
cout << "1---男" << endl;
cout << "2---女" << endl;
cin >> sex;
if (sex == 1) {
ads->personarr[ret].m_sex = "男";
break;
}
else if (sex == 2) {
ads->personarr[ret].m_sex = "女";
break;
}
else {
cout << "输入错误" << endl;
}
}
string number;
cout << "请输入新的电话号码:" << endl;
cin >> number;
ads->personarr[ret].m_number = number;
cout << "修改成功" << endl;
}
else {
cout << "查无此人" << endl;
}
//按任意键清屏
system("pause");
system("cls");
}
八、显示联系人信息
通过addPerson函数添加过联系人信息后m_size就会+1。在showPerson函数中如果m_size的值为0,说明没有向通讯录中添加任何信息,会打印通讯录为空的字样。反之会打印通讯录中的全部信息。
//显示联系人信息
void showPerson(Addressbook* ads)
{
//判断没有数据
if (ads->m_size == 0) {
cout << "通讯录为空" << endl;
}
//判断系统有数据,打印系统中所有数据
else {
for (int i = 0; i < ads->m_size; i++) {
cout <<"姓名:"<< ads->personarr[i].m_name << endl;
cout <<"性别:"<< ads->personarr[i].m_sex << endl;
cout <<"电话号:"<< ads->personarr[i].m_number << endl;
}
}
//按任意键清屏
system("pause");
system("cls");
}
九、删除联系人
删除模块的中心思想是将删除数据后的数据前移,以此来覆盖被删除的数据达到删除的目的。
//删除联系人
void deletePerson(Addressbook* ads) {
string name;
cout << "请输入人名" << endl;
cin >> name;
if (isExist(ads, name) != -1) {
//将删除数据后的数据前移,以此来覆盖被删除的数据达到删除的目的
for (int i = 0; i < ads->m_size; i++) {
ads->personarr[i] = ads->personarr[i + 1];
}
ads->m_size--;
cout << "删除成功" << endl;
}
else {
cout << "查无此人" << endl;
}
//按任意键清屏
system("pause");
system("cls");
}
十、总结
以上就是通讯录管理系统的全部内容,通过这个案例的完成可以更加加深我们对C++语言中结构体的使用。并且通过程序模块化的方法使代码更加易于管理和拓展。