基于C语言实现个人通讯录管理系统

2020-06-28 17:01:29于海丽

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、联系人的删除

这部分提供按姓名删除,通过遍历链表查询到指定节点,使用指针使该节点的上一个节点直接指向下一个节点,以此来实现对联系人的删除操作。详解图奉上