手机通讯录功能
实现了链表简单的增删改查的功能
可以通过此例子的基础上进行修改后可以实现其他的功能,例如实现一个学生管理系统等
#include<iostream>
#include<string>
using namespace std;
typedef struct Person
{
string name;
string sex;
string Phone;
struct Person* next;
}Person,*PersonList;
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;
}
void Init(PersonList& L)
{
L = NULL;
}
void AddPerson(PersonList& L)//添加联系人信息
{
int num = 0;
Person* p = L;
Person* s = new Person();
cout << "名字:" << endl;
cin >> s->name;
cout << "性别:1.男 2.女" << endl;
while (1)
{
cin >> num;
if (num == 1)
{
s->sex = "男";
break;
}
else if (num == 2)
{
s->sex = "女";
break;
}
else
{
cout << "输入错误,请重新输入" << endl;
}
}
cout << "电话:" << endl;
cin >> s->Phone;
if (p == NULL)
{
L = s;
p = L;
}
else
{
while (p->next)
{
p = p->next;
}
p->next = s;
p = s;
}
p->next = NULL;
}
void FindPerson(PersonList L)//查找联系人信息
{
bool flag = true;
Person* p = L;
string name;
cout << "请输入你想查找的联系人姓名:";
cin >> name;
while (p)
{
flag = true;
if (p->name == name)
{
cout << "姓名:" << p->name << "\t性别:" << p->sex << "\t电话:" << p->Phone << endl;
flag = false;
}
p = p->next;
}
if (flag)
{
cout << "没有此联系人" << endl;
}
}
void ChangePerson(PersonList &L)//改变联系人信息
{
if (L != NULL)
{
Person* p = L;
string name;
cout << "请输入你想修改信息的联系人姓名:";
cin >> name;
while (p)
{
if (p->name == name)
{
int num;
int sex;
cout << "请选择你需要修改的信息:" << endl;
cout << "1.姓名" << endl;
cout << "2.性别" << endl;
cout << "3.电话" << endl;
while (1)
{
cin >> num;
if (num == 1)
{
cout << "请输入修改后的姓名:";
cin >> p->name;
break;
}
else if (num == 2)
{
cout << "请选择修改后的性别:1.男 2.女" << endl;
while (1)
{
cin >> sex;
if (sex == 1)
{
p->sex = "男";
break;
}
else if (sex == 2)
{
p->sex = "女";
break;
}
else
{
cout << "输入错误,请重新输入" << endl;
}
}
break;
}
else if (num == 3)
{
cout << "请输入修改后的电话:";
cin >> p->Phone;
break;
}
else
{
cout << "输入错误,请重新输入" << endl;
}
}
break;
}
p = p->next;
}
if (!p)
{
cout << "没有此联系人" << endl;
}
}
else
{
cout << "通讯录为空" << endl;
}
}
void DeletePerson(PersonList& L)//删除联系人信息
{
if (L != NULL)
{
Person* p = L;
string name;
cout << "请输入你想删除的联系人姓名:"; //如果有多个相同名字得人应该如何删除?
cin >> name;
if (L->name == name)
{
L = p->next;
}
else
{
while (p->next)
{
if (p->next->name == name)
{
cout << "姓名:" << p->next->name << "\t性别:" << p->next->sex << "\t电话:" << p->next->Phone << endl;
Person* q = p->next;
p->next = q->next;
cout << "删除成功" << endl;
break;
}
p = p->next;
}
if (!p)
{
cout << "没有此联系人";
}
}
}
else
{
cout << "通讯录为空" << endl;
}
}
void ClearPerson(PersonList& L)//清空通讯录
{
L = NULL;
cout << "清空完毕" << endl;
}
void PrintfPerson(PersonList L)//显示联系人信息
{
Person* p = L;
if (p == NULL)
{
cout << "没有联系人信息" << endl;
}
else
{
while (p)
{
cout << "姓名:" << p->name << "\t性别:" << p->sex << "\t电话:" << p->Phone << endl;
p = p->next;
}
}
}
int main()
{
PersonList L;
Init(L);
int num = 0;
while (1)
{
ShowMenu();
cout << "请输入你的选择:";
cin >> num;
switch (num)
{
case 1:
AddPerson(L);
system("pause");
system("cls");
break;
case 2:
FindPerson(L);
system("pause");
system("cls");
break;
case 3:
ChangePerson(L);
system("pause");
system("cls");
break;
case 4:
DeletePerson(L);
system("pause");
system("cls");
break;
case 5:
PrintfPerson(L);
system("pause");
system("cls");
break;
case 6:
ClearPerson(L);
system("pause");
system("cls");
break;
case 0:
cout << "谢谢使用" << endl;
system("pause");
return 0;
break;
default:
break;
}
}
system("pause");
}
在删除联系人和修改联系人信息时如果有多个姓名相同的联系人(是通过姓名查找的),你可以选择删除或修改其中一个联系人,该代码中没有实现,此时你该如何去实现