3、联系人的查询
这步使用的是遍历查询,共设置了三种方式,在定义链表指针的前提下,通过遍历链表进行信息的对比,从而判断联系人是否存在,如果存在就直接显示给用户,不存在就直接退回功能选项。
int Query()
{
int m,n; //m记录选项
char flag='y';
ptcs p=head->next;
while(flag!='n'&&flag!='N') //是否继续查询
{
printf("n");
printf("t*************查询方式**************n");
printf("t-----------------------------------n");
printf("t 1.按姓名查找 n");
printf("t 2.手机号查找 n");
printf("t 3.按QQ号码查找 n");
printf("t 4.返回 n");
printf("t-----------------------------------n");
printf("nt请选择查询方式:");
scanf("t%d",&m);
do
{
n=0;
if(m!=1&&m!=2&&m!=3&&m!=4)
{
n=1;
printf("t您输入的查询方式不存在,请重新输入:");
scanf("t%d",&m);
}
}while(n); //是否输入正确
if(!p) //判断链表是否为空
{
printf("t该通讯录为空!n");
return 0;
}
if(m==1)
{
char nm[15]; //要查询的联系人
printf("t请输入您要查询的联系人姓名:");
scanf("t%s",nm);
//若链表不为空,且联系人不相符,则继续往后遍历
while(p!=NULL&&strcmp(p->chat.name,nm)!=0)
p=p->next; //遍历链表
if(!p)
{
printf("t您要查询的联系人不存在!n");
return 0;
}
printf("t地址:%sn",p->chat.add);
printf("t手机号:%sn",p->chat.tel);
printf("tQQ号:%sn",p->chat.tecent);
printf("tEmail:%sn",p->chat.email);
}
if(m==2)
{
char te[20]; //要查询的手机号码
printf("t请输入您要查询的手机号:");
scanf("t%s",te);
while(p!=NULL&&strcmp(p->chat.tel,te)!=0)
p=p->next;
if(!p)
{
printf("t您要查询的联系人不存在!n");
return 0;
}
printf("t姓名:%sn",p->chat.name);
printf("t地址:%sn",p->chat.add);
printf("tQQ号:%sn",p->chat.tecent);
printf("tEmail:%sn",p->chat.email);
}
if(m==3)
{
char qq[15]; //要查询的qq号
printf("t请输入您要查询的QQ号:");
scanf("t%s",qq);
while(p!=NULL&&strcmp(p->chat.tecent,qq)!=0)
p=p->next;
if(!p)
{
printf("t您要查询的联系人不存在!n");
return 0;
}
printf("t姓名:%sn",p->chat.name);
printf("t地址:%sn",p->chat.add);
printf("t手机号:%sn",p->chat.tecent);
printf("tEmail:%sn",p->chat.email);
}
if(m==4)
return 0;
printf("t是否继续查询?(Y/N)"); //Y则继续执行while循环,否则退出
scanf("t%c",&flag);
}
return 0;
}
4、联系人的删除
这部分提供按姓名删除,通过遍历链表查询到指定节点,使用指针使该节点的上一个节点直接指向下一个节点,以此来实现对联系人的删除操作。详解图奉上










