分析:
通讯录里边有联系人姓名,年龄,手机号,地址等,这些都要用结构体来创建。因此,在头文件之后便要创建联系人结构体。
另外,还需要有一个通讯录结构体,来记录联系人数量以及规定联系人上限。
简单的功能:添加联系人,显示联系人,删除联系人,查找联系人,修改联系人,清空联系人,退出系统。(限于笔者水平,系统不够完整,在这里笔者就抛砖引玉了。)
注意:
本代码没有对数据进行限制。比如 电话号码的位数。
笔者很懒,直接用 string 带过。
上代码:
#include<iostream>
#include<string>
using namespace std;
//定义常量:
#define MAX 500
//显示界面:
void showMeun()
{
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
{
string name;//名字
int age;//年龄
string gender;//性别
string tel;//电话
string addr;//地址
};
//创建通讯录结构体
struct Telep
{
Person personArray[MAX];//给联系人提供一个上限数量。
int personNum;//记录通讯录人数。
};
//添加:
void creat(struct Telep *init)
{
if (init->personNum >= 1000)
{
cout << "满员了!" << endl;
return;
}
else
{
cout << "请输入姓名:" << endl;
string name1;
cin >> name1;
int age1;
cout << "请输入年龄:" << endl;
cin >> age1;
string sex;
cout << "请输入性别:" << endl;
cout << " 男/女 " << endl;
cin >> sex;
string phone;
cout << "请输入电话:" << endl;
cin >> phone;
string add1;
cout << "请输入地址:" << endl;
cin >> add1;
Person exam = { name1,age1,sex,phone,add1 };
init->personArray[init->personNum] = exam;
cout << "添加成功!" << endl;
init->personNum++;
system("pause");//给自己反应时间。
system("cls");//清屏操作。
}
}
//输出:
void printfP(struct Telep *init)
{
if (init->personNum == 0)
{
cout << "您的通讯录中未添加任何数据,请添加后再执行本次操作,谢谢您的配合!" << endl;
return;
}
else
{
for (int i = 0; i < init->personNum; i++)
{
cout << "姓名:" << init->personArray[i].name << " 性别:" << init->personArray[i].gender <<
" 年龄:" << init->personArray[i].age << " 手机号码:" << init->personArray[i].tel <<
" 地址:" << init->personArray[i].addr << endl;
}
}
}
//删除:
int found(Telep*init, string name)
{
int i;
for (i = 0; i < init->personNum; i++)
{
if (name == init->personArray[i].name)
{
return i;
}
}
return -1;
}
void deleteArr(Telep* init)
{
string name2;
cout << "请输入需要删除的联系人的名字:";
cin >> name2;
int ret = found(init, name2);
if(ret==-1)
{
cout << "查无此人!" << endl;
system("pause");
system("cls");
return;
}
else//物理删除:
//将某个数据后面的数据前移一位即可。
{
for (int i = ret; i < init->personNum; i++)
{
init->personArray[i] = init->personArray[i + 1];//从被删除项开始,后一项覆盖前一项数据。
}
init->personNum--;
cout << "删除成功!" << endl;
system("pause");
system("cls");
}
}
void foundPrintf(Telep*init)
{
cout << "请输入需要查询的名字:" << endl;
string name3;
cin >> name3;
int ret1 = found(init, name3);
if (ret1 == -1)
{
cout << "查无此人!" << endl;
system("pause");
system("cls");
return;
}
else
{
cout << "姓名:" << init->personArray[ret1].name << " 性别:" << init->personArray[ret1].gender <<
" 年龄:" << init->personArray[ret1].age << " 手机号码:" << init->personArray[ret1].tel <<
" 地址:" << init->personArray[ret1].addr << endl;
system("pause");
system("cls");
return;
}
}
void change(Telep* init)
{
string name4;
cout << "请输入您需要修改信息的联系人的名字:" << endl;
cin >> name4;
int ret2 = found(init, name4);
if (ret2 == -1)
{
cout << "查无此人!" << endl;
system("pause");
system("cls");
return;
}
else
{
cout << "信息如下:" << endl;
cout << "姓名:" << init->personArray[ret2].name << " 性别:" << init->personArray[ret2].gender <<
" 年龄:" << init->personArray[ret2].age << " 手机号码:" << init->personArray[ret2].tel <<
" 地址:" << init->personArray[ret2].addr << endl;
cout << "修改:" << endl;
cout << "请输入修改后姓名:" << endl;
string name5;
cin >> name5;
int age2;
cout << "请输入修改后年龄:" << endl;
cin >> age2;
string sex;
cout << "请输入修改后性别:" << endl;
cout << " 男/女 " << endl;
cin >> sex;
string phone;
cout << "请输入修改后电话:" << endl;
cin >> phone;
string add1;
cout << "请输入修改后地址:" << endl;
cin >> add1;
Person exam = { name5,age2,sex,phone,add1 };
init->personArray[ret2] = exam;
cout << "修改完毕!" << endl;
}
}
void clear(Telep* init)
{
cout << "确定要清空吗?千万别删库跑路啊!" << "\t";
cout << "确定请按1,取消按0" << endl;
int b;
cin >> b;
if (b == 1)
{
init->personNum = 0;
cout << "清除完毕!" << endl;
system("pause");
system("cls");
}
else if(b == 0)
{
system("pause");
system("cls");
return;
}
}
int main()
{
Telep init;//创建通讯录变量
init.personNum = 0;//将通讯录人数初始化为0
int a;//接受按键,执行switch。
while (true)
{
showMeun();
cin >> a;
switch (a)
{
case 1://添加:
creat(&init);
break;
case 2://显示:
{
printfP(&init);
system("pause");//给自己反应时间。
system("cls");//清屏操作。
}
break;
case 3://删除:
deleteArr(&init);
break;
case 4://查找:
foundPrintf(&init);
break;
case 5://修改:
change(&init);
system("pause");
system("cls");
break;
case 6://清空:
clear(&init);
break;
case 0://退出:
cout << "感谢使用通讯录管理系统,期待下一次再会!" << endl;
system("pause");
return 0;
break;
}
}
}
文章多有不足,欢迎大家批评指针。
程序由学习黑马程序员视频写出,内含个人理解,可能一些细节地方不能照顾到。
越努力越幸运 加油!!!