该通讯录具有(添加,显示,查找,删除,修改,恢复,清空)联系人的功能及退出功能
此代码简单易懂适合初学者
#include<iostream>
using namespace std;
#include<cstdlib>
#define max 1000
#include<string>
#include<cstring>
#include<memory>
struct linkman
{
string name;
int age;
long long phone;
string address;
string gender;
};
void print()
{
cout << "**********************************" << endl;
cout << "**********1.添加联系人************" << endl;
cout << "**********2.显示联系人************" << endl;
cout << "**********3.删除联系人************" << endl;
cout << "**********4.查找联系人************" << endl;
cout << "**********5.修改联系人************" << endl;
cout << "**********6.恢复联系人************" << endl;
cout << "**********7.清空联系人************" << endl;
cout << "**********8.退出通讯录************" << endl;
cout << "**********************************" << endl;
}
void intput(linkman arr[],int *i)//输入操作
{
cout << "请输入联系人的名字:";
cin >> arr[*i].name;
cout << "请输入联系人的年龄:";
cin >> arr[*i].age;
cout << "请输入联系人的电话号码:";
cin >> arr[*i].phone;
cout << "请输入联系人的性别:";
cin >> arr[*i].gender;
cout << "请输入联系人的地址:";
cin >> arr[*i].address;
(*i)++;//利用地址传递才能修改实参
}
void output(linkman *arr,int i)//地址传递
{
cout << "名字" << '\t' << "性别" << '\t' << "年龄" << '\t' << "电话号码" << '\t' << "家庭地址" << endl;
for (int k = 0; k < i; k++)
{
cout << arr[k].name << '\t' << arr[k].gender << '\t' << arr[k].age << '\t' << arr[k].phone << '\t' << arr[k].address << endl;
}
}
int main()
{
print();
int queding=0;
linkman arr[max];
linkman arr2[max];
int i = 0;
int k = 0;
int a = 0;
int b = 0;
int g = 0;
string name2;
cout << "请输入以上数字,进行具体操作" << endl;
while (true)
{
int n = 0;
cout << "您要进行操作(数字):";
cin >> n;
system("cls");
print();
if (n >= 1 && n <= 8)
{
switch (n)
{
case 1://添加联系人
intput(arr, &i);//值传递
break;
case 2://显示联系人
if (arr[0].age == 0 || i == 0)
{
cout << "无任何联系人,请添加联系人!" << endl;
}
else
{
output(arr, i);//利用地址传递,大幅度节省内存
}
break;
case 3://删除联系人
cout << "请输入要删除联系人的姓名:";
cin >> name2;
for (k = 0; k < i; k++)
{
if (name2 == arr[k].name)
{
i--;
arr2[g] = arr[k];
for (a = k; a < i; a++)
{
arr[a] = arr[a + 1];
}
g++;
}
}
cout << "删除成功" << endl;
break;
case 4://查找联系人
cout << "请输入要查找联系人的姓名:";
cin >> name2;
a = 0;
for (k = 0; k < i; k++)
{
if (name2 == arr[k].name)
{
cout << "名字" << '\t' << "性别" << '\t' << "年龄" << '\t' << "电话号码" << '\t' << "家庭地址" << endl;
cout << arr[k].name << '\t' << arr[k].gender << '\t' << arr[k].age << '\t' << arr[k].phone << '\t' << arr[k].address << endl;
a++;
}
}
if (a == 0)
{
cout << "查无此人" << endl;
}
break;
case 5://修改联系人
cout << "请输入所要修改联系人的姓名:";
cin >> name2;
for (k = 0; k < i; k++)
{
if (name2 == arr[k].name)
{
cout << "请输入名字:";
cin >> arr[k].name;
cout << "请输入年龄:";
cin >> arr[k].age;
cout << "请输入电话号码:";
cin >> arr[k].phone;
cout << "请输入性别:";
cin >> arr[k].gender;
cout << "请输入家庭地址:";
cin >> arr[k].address;
cout << "修改成功!" << endl;
}
}
break;
case 6://恢复联系人
cout << "已删除的联系人有:" << endl;
cout << "名字" << '\t' << "性别" << '\t' << "年龄" << '\t' << "电话号码" << '\t' << "家庭地址" << endl;
for (k = 0; k < g; k++)
{
cout << arr2[k].name << '\t' << arr2[k].gender << '\t' << arr2[k].age << '\t' << arr2[k].phone << '\t' << arr2[k].address << endl;
}
cout << "请选择要恢复联系人的姓名:";
cin >> name2;
for (k = 0; k < g; k++)
{
if (name2 == arr2[k].name)
{
a = k;
b++;
}
}
if (b != 0)
{
arr[i] = arr2[a];
cout << "恢复成功!" << endl;
b = 0;
i++;
}
else
{
cout << "查无此人" << endl;
}
break;
case 7://清空联系人
cout << "清空联系人后,无法恢复数据,请谨慎操作!"<<endl;
cout << "确定请输入1" << endl;
cin >> queding;
if (queding == 1)
{
memset(&arr->age, 0, sizeof(arr->age));
cout << "已全部清空" << endl;
}
else
{
cout << "输入错误,清空失败" << endl;
}
i = 0;
break;
case 8://退出通讯录
cout << "欢迎下次使用!" << endl;
return 0;
break;
default:
cout << "输入错误,请输入以上数字进行操作" << endl;
}
}
else
{
cout << "输入错误,请退出重试!" << endl;
break;
}
}
return 0;
}
c++初学者的代码
虽然部分代码还存在漏洞,但正确操作完全可以正常使用
部分效果