//因为时间不够用所以简易的实现了一下,不过可以直接上机运行,可以应付老师检查。但结构清晰你可以自己修改完善。非常适合救急的同学。
#include<iostream>
#include<string>
using namespace std;
void menu();
#define MAX 1000
//联系人结构体
struct person
{
string name;
int sex;//1男2女
int age;
string phone;
string addr;
};
//通讯录结构体
struct tellbook
{
struct person arr[MAX];
int szie;
};
void menu()
{
cout << "************通讯录***********" << endl;
cout << "*****\t1:添加联系人\t*****\n";
cout << "*****\t2:显示联系人\t*****\n";
cout << "*****\t3:删除联系人\t*****\n";
cout << "*****\t4:查找联系人\t*****\n";
cout << "*****\t5:修改联系人\t*****\n";
cout << "*****\t6:清空联系人\t*****\n";
cout << "*****\t0:退出通讯录\t*****\n";
}
void menu2()
{
cout << "***********修改选项***********" << endl;
cout << "*****\t1:修改姓名\t*****\n";
cout << "*****\t2:修改年龄\t*****\n";
cout << "*****\t3:修改性别\t*****\n";
cout << "*****\t4:修改号码\t*****\n";
cout << "*****\t5:修改住址\t*****\n";
cout << "*****\t0:修改已完成\t*****\n";
}
//添加联系人
void addperson(tellbook* p)
{
//判断是否已满
if (p->szie == MAX)
{
cout << "次通讯录人数已满请创建一个新的通讯录" << endl;
return;
}
else
{
cout << "输入姓名" << endl;
cin >> p->arr[p->szie].name;
while (1)
{
cout << "选择性别***1—男&&2—女" << endl;
int sex;
cin >> sex;
if (sex == 1 || sex == 2)
{
p->arr[p->szie].sex = sex;
break;
}
else
{
cout << "请输入合法的数据" << endl;
}
}
cout << "输入年龄" << endl;
cin >> p->arr[p->szie].age;
cout << "输入联系电话" << endl;
cin >> p->arr[p->szie].phone;
cout << "输入地址" << endl;
cin >> p->arr[p->szie].addr;
cout << "添加成功" << endl;
p->szie++;
system("pause");
system("cls");
}
}
//显示联系人
void showperson(tellbook* p)
{
cout << "姓名\t" << "性别\t" << "年龄\t" << "电话号码\t" << "家庭住址" << endl;
cout << "\t*************************\t" << endl;
for (int i = 0; i < p->szie; i++)
{
cout << p->arr[i].name << "\t";
if (p->arr[i].sex == 1)
{
cout << "男\t";
}
else
{
cout << "女\t";
}
cout << p->arr[i].age << "\t" << p->arr[i].phone << "\t" << p->arr[i].addr << endl;
}
system("pause");
system("cls");
}
//以姓名为主键的关键查询函数
int searchperson(tellbook* p)
{
cout << "请输入姓名" << endl;
string temp;
cin >> temp;
for (int i = 0; i < p->szie; i++)
{
if (p->arr[i].name == temp)
{
return i;
}
}
//未查询到联系人
return -1;
}
//删除联系人
void deleteperson(tellbook* p)
{
int i=searchperson(p);
if (i == -1)
{
cout << "通讯录中没有此联系人" << endl;
return;
system("pause");
system("cls");
}
cout << "姓名\t" << "性别\t" << "年龄\t" << "电话号码\t" << "家庭住址" << endl;
cout << "\t*************************\t" << endl;
cout << p->arr[i].name << "\t";
if (p->arr[i].sex == 1)
{
cout << "男\t";
}
else
{
cout << "女\t";
}
cout << p->arr[i].age << "\t" << p->arr[i].phone << "\t" << p->arr[i].addr << endl;
cout << "***1—确认删除此联系人信息&***2—取消操作" << endl;
cout << "请选择" << endl;
int temp = 0;
cin >> temp;
while (1)
{
if (temp == 1)
{
//后面的联系人直接覆盖并且arr的size--则操作成功
for (int j=i;j<p->szie;j++)
{
p->arr[j] = p->arr[j + 1];
}
p->szie--;
cout << "删除成功" << endl;
break;
}
else if(temp==2)
{
cout << "已取消" << endl;
return;
system("pause");
system("cls");
}
else
{
cout << "请输入合法的数据" << endl;
}
}
system("pause");
system("cls");
}
//查找联系人
void search(tellbook* p)
{
//引入查询函数
int i = searchperson(p);
if (i == -1)
{
cout << "通讯录中没有此联系人" << endl;
return;
system("pause");
}
cout << "姓名\t" << "性别\t" << "年龄\t" << "电话号码\t" << "家庭住址" << endl;
cout << "\t*************************\t" << endl;
cout << p->arr[i].name << "\t";
if (p->arr[i].sex == 1)
{
cout << "男\t";
}
else
{
cout << "女\t";
}
cout << p->arr[i].age << "\t" << p->arr[i].phone << "\t" << p->arr[i].addr << endl;
system("pause");
system("cls");
}
//修改联系人
void alterperson(tellbook* p)
{
//修改首先是要查询故直接映入查询函数
int i = searchperson(p);
if (i == -1)
{
cout << "通讯录中没有此联系人" << endl;
return;
system("pause");
system("cls");
}
cout << "姓名\t" << "性别\t" << "年龄\t" << "电话号码\t" << "家庭住址" << endl;
cout << "\t*************************\t" << endl;
cout << p->arr[i].name << "\t";
if (p->arr[i].sex == 1)
{
cout << "男\t";
}
else
{
cout << "女\t";
}
cout << p->arr[i].age << "\t" << p->arr[i].phone << "\t" << p->arr[i].addr << endl;
cout << "***1—确认修改此联系人信息&***2—取消操作" << endl;
cout << "请选择" << endl;
int temp = 0;
cin >> temp;
while (1)
{
if (temp == 1)
{
//根据返回的位置i直接修改
int select = -1;
while (1)
{
menu2();//显示修改选项
cout << "选择操作" << endl;
cin >> select;
switch (select)
{
case 0: return ;
case 1:
cout << "请修改姓名" << endl;
cin >> p->arr[i].name;
break;
case 2:
cout << "请修改年龄" << endl;
cin >> p->arr[i].age;
break;
case 3:
cout << "请修改性别" << endl;
cin >> p->arr[i].sex;
break;
case 4:
cout << "请修改号码" << endl;
cin >> p->arr[i].phone;
break;
case 5:
cout << "请修改住址" << endl;
cin >> p->arr[i].addr;
break;
default:
cout << "输入合法数据" << endl;
}
}
system("pause");
return ;
break;
}
else if (temp == 2)
{
cout << "已取消" << endl;
return;
system("pause");
system("cls");
}
else
{
cout << "请输入合法的数据" << endl;
}
}
system("pause");
system("cls");
}
//清空联系人
//直接将size==0即可
int empty(tellbook* p)
{
cout << "***1—确认清空通讯录&***2—取消操作" << endl;
cout << "请选择" << endl;
int temp = 0;
cin >> temp;
while (1)
{
if (temp == 1)
{
cout << "请再次确认是否清空通讯录" << endl;
cout << "取消请按2***继续轻按任意键" << endl;
int temp1 = 0;
cin >> temp1;
if (temp1 == 2)
{
cout << "已取消" << endl;
return -1;
system("pause");
system("cls");
}
int temp3 = p->szie;
p->szie = 0;
return temp3;//设计这个的目的是后续可以轻松增加意见恢复功能。
cout << "已清空" << endl;
system("pause");
system("cls");
break;
}
else if (temp == 2)
{
cout << "已取消" << endl;
return -1;
system("pause");
system("cls");
}
else
{
cout << "请输入合法的数据" << endl;
}
}
}
int main()
{
//创建第一个通讯录
tellbook u1; u1.szie = 0;//初始化为zero
int select = -1;
while (1)
{
menu();
cout << "选择操作" << endl;
cin >> select;
switch (select)
{
case 0:
cout << "欢迎下次使用" << endl;
return true;
case 1:addperson(&u1);
break;
case 2:showperson(&u1);
break;
case 3:deleteperson(&u1);
break;
case 4: search(&u1);
break;
case 5:alterperson(&u1);
break;
case 6:empty(&u1);
break;
default:
cout << "输入合法数据" << endl;
}
}
system("pause");
return 0;
}