当前位置:文档之家› 链表——通讯录管理系统

链表——通讯录管理系统

#include
#include
#define null 0
using namespace std;

/******联系人的信息******/
struct People
{
char sex[5]; //性别
char name[9]; //姓名
char num[5]; //编号
char Phone[13]; //联系电话
char addr[31]; //联系地址
};
/*****定义链表结点的结构******/
struct Node
{
People Date; //结点的数据域
Node *next; //结点的指针域
};

typedef Node *LinkList;

/*****主菜单函数******/

int menu_select()
{
int n;
cout<<"******************************************"<cout<<"\t欢迎登录通讯录管理系统!"<cout<<"******************************************"<cout<<" 1-通讯链表的建立!"<cout<<" 2-通讯者结点的插入!"<cout<<" 3-通讯者结点的查询!"<cout<<" 4-通讯者结点的删除!"<cout<<" 5-通讯链表的输出!"<cout<<" 0-退出管理系统!"<cout<<"************************"<cout<cout<<"请选择 0~5"<
for(;;)
{
cin>>n;
if(n<0||n>5)
cout<<"输入错误,请重新输入0~5"<else
break;
}
return n;
}


/****尾插法创建链表的函数****/
LinkList CreatList()
{
Node *p,*rear,*head;

head=new Node; //申请链表的头结点

char flag='N'; //结束标志
rear=head;

while(flag=='n'||flag=='N')
{
p=new Node; //申请新结点
cout<<"输入:性别,姓名,编号,电话,地址"<cout<<"***********************"<cin>>p->Date.sex>>p->https://www.doczj.com/doc/2719043070.html,>>p->Date.num>>p->Date.Phone>>p->Date.addr;
rear->next=p; //新节点连接到尾节点之后
rear=p; //尾指针指向新的结点
cout<<"建表结束吗?(Y/N)"<cin>>flag;
}
rear->next=null; //尾结点置空
return head; //返回头指针,便于后面的操作
}

/*******头结点处插入结点函数******/
void InsertNode(LinkList head,Node *p)
{
Node *p1,*p2;
p1=head;
p2=p1->next;
p1->next=p;
p->next=p2;
}


/*******通讯录链表的查询*********/

LinkList FindNode(Node *head)
{
Node *p;
char name[9];
char num[5];
int n;
cout<<"******************"<cout<<"1-按编号查找!"<cout<<"2-按姓名查找1"<cout<<"******************"<cout<<"请选择1~2"<p=head->next;
cin>>n;
if(n==1)
{
cout<<"请输入要查的编号"<cin>>num;
while(p&&strcmp(p->Date.num,num)!=0)
p=p->next;
if((p==NULL)||strcmp(p->Date.num,num)>0)
p=null; //没有查到要查找的通讯者
}
if(n==2)
{
cout<<"请输入要查的姓名"<cin>>name;
while(p&&strcmp(p->https://www.doczj.com/doc/2719043070.html,,name)!=0)
p=p->next;
}
return p;
}

/************通讯录

上结点的删除**************/
void DelNode(Node *head)
{
char n;
Node *p,*q;
p=FindNode(head);
if(p==null)
{
cout<<"没有查询到要删除的通讯者!"<return ;
}
else
cout<<"真的要删除该通讯者吗?(Y/N)"<cin>>n;
if(n='Y'||n=='y')
{
q=head;
while(q!=null&&q->next!=p)
q=p->next;
q->next=p->next;
delete p;
cout<<"该通讯者成功删除!"<}
}
/***********通讯链表输出函数**************/
void PrintList(Node *head)
{
Node *p;
p=head->next;
cout<<"编号"<<" "<<"姓名"<<" "<<"性别"<<" "<<"联系电话"<<" "<<"联系地址"<while(p!=null)
{
cout<Date.num<<" "<https://www.doczj.com/doc/2719043070.html,<<" "<Date.sex<<" "<Date.Phone<<" "<Date.addr<p=p->next;
}
cout<<"**************************"<}

/***********主函数main**************/
void main()
{
Node *head,*p;
for(;;)
{
switch(menu_select())
{
case 1:
{
cout<<"*************************"<cout<<"** 通讯链表的建立 **"<cout<<"**************************"<head=CreatList();
break;
}

case 2:
{
cout<<"*********************"<cout<<"** 通讯者信息添加 **"<cout<<"********************"<cout<<"编号(4), 姓名(8) ,性别(3) ,电话(11) ,地址(31)"<cout<<"********************"<p=new Node;
cin>>p->Date.num>>p->https://www.doczj.com/doc/2719043070.html,>>p->Date.sex>>p->Date.Phone>>p->Date.addr;
InsertNode(head,p);
break;
}
case 3:
{
cout<<"************************"<cout<<"** 通讯信息查询 **"<cout<<"************************"<p=FindNode(head);
if(p!=null)
{
cout<<"编号,姓名,性别,联系电话,联系地址"<cout<<"*******************"<cout<Date.num<<" "<https://www.doczj.com/doc/2719043070.html,<<" "<Date.sex<<" "<Date.Phone<<" "<Date.addr<cout<<"*******************"<}
else
cout<<"没有找到需要的通讯者!"<break;
}
case 4:
{
cout<<"**********************"<cout<<"** 通讯录信息删除 **"<cout<<"**********************"<DelNode(head);
break;
}
case 5:
{
cout<<"**********************"<cout<<"** 通讯链表信息的输出 **"<cout<<"**********************"<PrintList(head);
break;
}
case 0:
cout<<"欢迎使用,再见!"<return;

}
}

}

相关主题
文本预览
相关文档 最新文档