#include<iostream>
using namespace std;
#define max 1000
void showMenu() {
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 sex;
int age;
long long phone;
string addr;
};
struct Addressbooks//创建联系人电话簿结构体,以便修改和访问
{
Person arr[max];
int size;
};
void addPerson(Addressbooks* p) {//添加联系人方法
if (p->size <= max) {
string name;
int sex;
int age = 0;
long long phone;
string addr;
cout << "请输入添加联系人的姓名:" << endl;
cin >> name;
p->arr[p->size].name = name;
cout << "请输入添加联系人的性别:" << endl;
cout << "1、男" << endl;
cout << "2、女" << endl;
while (1) {
cin >> sex;
if (sex == 1 || sex == 2) {
p->arr[p->size].sex = sex;
break;
}
else {
cout << "输入格式错误,请重新输入:" << endl;
cout << "1、男" << endl;
cout << "2、女" << endl;
}
}
cout << "请输入添加联系人的年龄:" << endl;
while (1) {
cin >> age;
if (age > 0 && age <= 150) {
p->arr[p->size].age = age;
break;
}
else {
cout << "输入年龄有误,请重新输入:" << endl;
}
}
cout << "请输入添加联系人的手机号:" << endl;
cin >> phone;
p->arr[p->size].phone = phone;
cout << "请输入添加联系人的住址:" << endl;
cin >> addr;
p->arr[p->size].addr = addr;
p->size++;
cout << "添加成功!!!" << endl;
}
else {
cout << "通讯录已满,无法添加!!!" << endl;
}
}
void showPerson(Addressbooks* p) {//显示当前电话簿里所有联系人
if (p->size == 0 || p->arr[0].name == "") {
cout << "当前的通讯录为空,无法显示联系人。" << endl;
return;
}
cout << "当前通讯录的联系人如下:" << endl;
for (int i = 0; i < p->size; i++) {
cout << "姓名:" << p->arr[i].name
<< " 性别:" << (p->arr[i].sex == 1 ? "男" : "女")
<< " 年龄:" << p->arr[i].age
<< " 手机号:" << p->arr[i].phone
<< " 住址:" << p->arr[i].addr << endl;
}
}
int exist(Addressbooks* p, string* name) {//查找联系人是否存在,返回联系人所在电话簿的位置
int flag = 0;
if (p->size == 0) {
cout << "通讯录为空,无法查找联系人。" << endl;
}
else {
for (int i = 0; i < p->size; i++) {
if (*name == (p->arr[i].name)) {
flag = 1;
return i;
}
}
if (flag == 0) {
cout << "通讯录没有找到这个人。" << endl;
}
}
return -1;
}
void delPerson(Addressbooks* p, string* name) {//删除指定联系人
int position;
int flag = 0;
if (p->size == 0) {
cout << "通讯录为空,无法查找联系人。" << endl;
}
else {
for (int i = 0; i < p->size; i++) {
if (*name == (p->arr[i].name)) {
position = i;
flag = 1;
break;
}
}
if (flag == 0) {
cout << "通讯录没有找到这个人。" << endl;
}
}
if (flag == 1) {
for (int j = position; j < p->size; j++) {
p->arr[j] = p->arr[j + 1];
}
p->size--;
}
}
int repairPerson(Addressbooks* p, string* name) {//修改指定联系人的信息
int n = exist(p, name);
if (n == -1) {
cout << "没有找到要修改的联系人。" << endl;
}
else {
cout << "请输入要修改的联系人的内容:" << endl;
cout << " ****************** " << endl;
cout << " *** 1、姓名 ****** " << endl;
cout << " *** 2、性别 ****** " << endl;
cout << " *** 3、年龄 ****** " << endl;
cout << " *** 4、手机号 **** " << endl;
cout << " *** 5、住址 ****** " << endl;
cout << " ****************** " << endl;
int number;
cin >> number;
switch (number)
{
case 1: {
string Name;
cout << "请输入要修改联系人的姓名:" << endl;
cin >> Name;
p->arr[n].name = Name;
cout << "联系人姓名修改成功!!!" << endl;
break;
}
case 2: {
int Sex;
cout << "请输入要修改的性别:" << endl;
cout << "1、男" << endl;
cout << "2、女" << endl;
while (1) {
cin >> Sex;
if (Sex == 1 || Sex == 2) {
p->arr[p->size].sex = Sex;
break;
}
else {
cout << "输入格式错误,请重新输入:" << endl;
cout << "1、男" << endl;
cout << "2、女" << endl;
}
}
cout << "联系人性别修改成功!!!" << endl;
break;
}
case 3: {
int Age;
cout << "请输入要修改联系人的年龄:" << endl;
cin >> Age;
p->arr[n].age = Age;
cout << "联系人年龄修改成功!!!" << endl;
break;
}
case 4: {
long long Phone;
cout << "请输入要修改联系人的手机号:" << endl;
cin >> Phone;
p->arr[n].phone = Phone;
cout << "联系人手机号修改成功!!!" << endl;
break;
}
case 5: {
string Addr;
cout << "请输入要修改联系人的住址:" << endl;
cin >> Addr;
p->arr[n].addr = Addr;
cout << "联系人住址修改成功!!!" << endl;
break;
}
default:
break;
}
}
return n;
}
void cleanPerson(Addressbooks* p) {
p->size = 0;
}
int main() {
Addressbooks p;
p.size = 0;
int select;
while (1) {
showMenu();
cin >> select;
switch (select)
{
case 1:
addPerson(&p);
break;
case 2:
showPerson(&p);
break;
case 3: {
string Name;
string judge;
int n;
cout << "请输入要删除的人的名字:" << endl;
cin >> Name;
n = exist(&p, &Name);
if (n == -1) {
cout << "查无此人!!!" << endl;
}
else {
cout << "已找到要删除的联系人,即将删除的联系人信息如下:" << endl;
cout << "姓名:" << p.arr[n].name
<< " 性别:" << (p.arr[n].sex == 1 ? "男" : "女")
<< " 年龄:" << p.arr[n].age
<< " 手机号:" << p.arr[n].phone
<< " 住址:" << p.arr[n].addr << endl;
cout << "请确认是否删除(Y:Yes,N:No(不区分大小写)):" << endl;
cin >> judge;
if (judge == "Y" || judge == "y") {
delPerson(&p, &Name);
cout << "删除联系人成功!!!" << endl;
}
else if (judge == "N" || judge == "n") {
cout << "取消删除成功!!!" << endl;
}
}
break;
}
case 4: {
string Name;
int n;
cout << "请输入要查找的人的名字:" << endl;
cin >> Name;
n = exist(&p, &Name);
if (n == -1) {
cout << "查无此人!!!";
}
else {
cout << "已找到联系人,该联系人信息如下:" << endl;
cout << "姓名:" << p.arr[n].name
<< " 性别:" << (p.arr[n].sex == 1 ? "男" : "女")
<< " 年龄:" << p.arr[n].age
<< " 手机号:" << p.arr[n].phone
<< " 住址:" << p.arr[n].addr << endl;
}
break;
}
case 5: {
string nameContacts;
string d;
cout << "请问您想修改哪位联系人的信息?(请输入要修改的联系人的名字)" << endl;
cin >> nameContacts;
repairPerson(&p, &nameContacts);
break;
}
case 6:
cleanPerson(&p);
cout << "通讯录已清空!!!" << endl;
break;
case 0:
cout << "通讯录已退出!!!";
return 0;
break;
default:
break;
}
system("pause");
system("cls");
}
}
通讯录的功能在菜单都显示了。最后两行的功能为暂停,按任意键继续,以及清屏操作
效果如图:
再按一次回车,效果如下: