//通讯录管理系统
#include <iostream>
#include <cstring>
using namespace std;
#define MAX 1000
//设计联系人结构体
struct listnode
{
//姓名 性别 年龄 电话号码 住址
string name;
string sex;
int age=0;
string phnumber;
string address;
listnode* next=NULL;
};
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 listnode* addperson(listnode* head,int size)
{
if (size == 0)
{
cout << "请依次输入姓名,性别,年龄,电话号码,住址" << endl;
cin >> head->name;
cin >> head->sex;
cin >> head->age;
cin >> head->phnumber;
cin >> head->address;
return head;
}
else
{
struct listnode* p = head;
while (size-1)
{
p = p->next;
size--;
}
struct listnode* q = new(struct listnode);
p->next = q;
cout << "请依次输入姓名,性别,年龄,电话号码,住址" << endl;
cin >> q->name;
cin >> q->sex;
cin >> q->age;
cin >> q->phnumber;
cin >> q->address;
return head;
}
}
void showperson(struct listnode* head, int size)
{
if (size==0)
{
cout << "你还没添加联系人哦" << endl;
}
struct listnode* p = head;
while (size)
{
cout <<"姓名: "<< p->name << endl <<"性别: "<< p->sex << endl <<"年龄: "<< p->age << endl <<"电话号码: " << p->phnumber << endl <<"地址: "<< p->address << endl;
size--;
p = p->next;
cout << endl;
}
}
struct listnode* deleteperson(struct listnode* head, int* size,string m_name)
{
struct listnode* p = head;
struct listnode* q = head;
for (int i = 0; i < *size; i++)
{
if (p->name == m_name)
{
if (p == head && *size == 1)
{
*size = 0;
cout << "删除成功!" << endl;
return head;
}
if (p == head&&*size>=2)
{
head = head->next;
free(p);
cout << "删除成功!" << endl;
*size=*size-1;
return head;
}
else
{
q->next = p->next;
free(p);
cout << "删除成功!" << endl;
*size--;
return head;
}
}
q = p;
p = p->next;
}
cout << "未找到该联系人" << endl;
return head;
}
void findperson(struct listnode* head,int size,string m_name)
{
struct listnode* p = head;
for (int i = 0; i < size; i++)
{
if (p->name == m_name)
{
cout << "姓名: "<<p->name << endl;
cout << "性别: "<<p->sex << endl;
cout << "年龄: "<<p->age << endl;
cout << "电话号码 "<<p->phnumber << endl;
cout << "地址是 "<<p->address << endl;
return;
}
p = p->next;
}
cout << "查无此人" << endl;
}
struct listnode* modifyperson(struct listnode* head, int size, string m_name)
{
struct listnode* p = head;
for (int i = 0; i < size; i++)
{
if (p->name == m_name)
{
cout << "请依次输入联系人修改后的姓名,性别,年龄,电话号码,地址" << endl;
cin >> p->name;
cin >> p->sex;
cin >> p->age;
cin >> p->phnumber;
cin >> p->address;
cout << "修改成功!" << endl;
return head;
}
p = p->next;
}
cout << "未找到该联系人" << endl;
}
int main()
{
int size = 0;
int select=999;
struct listnode* head = new(struct listnode);
while (select)
{
showmenu();
cin >> select;
switch (select)
{
case 1://添加联系人
{
addperson(head,size);
size++;
break;
}
case 2://显示联系人
{
showperson(head, size);
break;
}
case 3://删除联系人
{
cout << "请输入您要删除的联系人的姓名" << endl;
string m_name;
cin >> m_name;
head=deleteperson(head, &size,m_name);
break;
}
case 4://查找联系人
{
cout << "请输入您要查找的联系人" << endl;
string m_name;
cin >> m_name;
findperson(head, size,m_name);
break;
}
case 5://修改联系人
{
cout << "请输入您要修改的联系人的姓名" << endl;
string m_name;
cin >> m_name;
head = modifyperson(head,size, m_name);
break;
}
case 6://清空联系人
{
size = 0;
cout << "清空成功!" << endl;
break;
}
case 0://退出通讯录
{
cout << "欢迎下次使用" << endl;
break;
}
}
}
system("pause");
return 0;
}
链表版相对于非链表的对比就在管理上更加直观便捷!