#includeusing namespace std; struct person { string name; int age; string sex; int num; }; struct gross { int size = 0; person arr[1000]; }; void menu()//显示界面 { cout << "***** 1: 添加联系人 *****" << endl; cout << "***** 2: 显示联系人 *****" << endl; cout << "***** 3: 删除联系人 *****" << endl; cout << "***** 4: 查找联系人 *****" << endl; cout << "***** 5: 修改联系人 *****" << endl; cout << "***** 6: 清空联系人 *****" << endl; cout << "***** 0: 退出通讯录 *****" << endl; } void add(gross *person)//利用指针访问结构体数组,添加通讯录的成员 { if (person->size == 1000)//超出1000人时无法存储 { cout << "用户超出上限" << endl; return; } else { cout << "请输入姓名:" << endl; cin >> person->arr[person->size].name; cout << "请输入性别:" << endl; cin >> person->arr[person->size].sex; cout << "请输入年龄:" << endl; cin >> person->arr[person->size].age; cout << "请输入电话号码:" << endl; cin >> person->arr[person->size].num; person->size++; } cout << "添加成功!" << endl; cout << endl; system("pause"); system("cls"); } void print(gross* person)//打印所有的联系人 { if (person->size == 0) { cout << "联系人为空!" << endl; } else { for (int i = 0; i <= person->size - 1; i++) { cout << i + 1;//联系人序号 cout << " 姓名:" << person->arr[i].name << " 性别:" << person->arr[i].sex << " 年龄:" << person->arr[i].age << " 电话号码:" << person->arr[i].num << endl; } } cout << endl; system("pause"); system("cls"); } int find(gross *person, string name)//对联系人的查找,下列多个函数需要借用此函数。此函数只作为一个工具使用 { if (person->size == 0) { return 0; } else { for (int i = 0; i <= person->size-1; i++)//遍历联系人的名字查找 { if (person->arr[i].name == name) { return 1+i;//返回联系人在数组中的下标 } else { return 0; } } } } void dele(gross *person,int flag) { for (int i = flag; i <= person->size - 1; i++) { person->arr[i] = person->arr[i + 1];//用被删联系人的后一个联系人覆盖实现删除效果 } cout << "删除联系人成功!" << endl; person->size -=1; cout << endl; system("pause"); system("cls"); } void express(gross *person, int flag)//4、查找并显示联系人 { int i = flag; if (flag == -1) { cout << "该联系人不存在" << endl; } else { cout<arr[i].name << " 性别:" << person->arr[i].sex << " 年龄:" << person->arr[i].age << " 电话号码:" << person->arr[i].num << endl; } cout << endl; system("pause"); system("cls"); } void modify(gross *person, int flag) { int i = flag; if (i == -1) { cout << "该联系人不存在!" << endl; } else { cout << "输入修改后的姓名:"; cin >> person->arr[i].name; cout << "输入修改后的年龄:"; cin >> person->arr[i].age; cout << "输入修改后的性别:"; cin >> person->arr[i].sex; cout << "输入修改后的电话:"; cin >> person->arr[i].num; cout << endl; cout << "修改成功" << endl; } cout << endl; system("pause"); system("cls"); } void clean(gross *person) { int n; cout << "是否确定清空联系人(1、是 2、否)" << endl;//先让用户确认是否清空 cin >> n; if (n == 1) { person->size = 0; cout << "已成功清空联系人!" << endl; } else { return; } cout << endl; system("pause"); system("cls"); } int main() { int size = 0;//记录通讯录中的人数 int choose;//用户做出选择 gross abs; while (true) { menu(); cin >> choose;//让用户选择功能 switch (choose) { case 1: add(&abs);//添加联系人 break; case 2: print(&abs);//打印联系人 break; case 3://查找并删除该联系人 { string name; cout << "请输入将要删除联系人的姓名"; cin >> name; int flag = find(&abs, name); if (flag == 0) { cout << "不存在该联系人!" << endl; } else { dele(&abs, flag - 1);//flag为此人的数组下标 } } break; case 4://查找联系人,(输出该联系人所有信息) { string name; cout << "请输入要查找联系人的姓名" << endl; cin >> name; int flag = find(&abs, name); express(&abs,flag-1); } break; case 5://修改联系人 { string name; cout << "请输入要修改的联系人的姓名" << endl; cin >> name; int flag = find(&abs, name)-1; modify(&abs, flag); } break; case 6://清空联系人 clean(&abs); break; case 0: cout << "欢迎下次使用!" << endl; return 0; default:cout << "请按菜单提示输入!" << endl; break; } } return 0; }



