int Delete()
{
char nm[20]; //要删除的联系人姓名
char flag='y';
ptcs p=head->next,bh,pre; //bh,pre均为过度节点指针
if(!p) //判断链表是否为空
{
printf("t该通讯录为空!n");
return 0;
}
while(flag!='n'&&flag!='N')
{
p=head->next;
printf("t请输入您要删除的联系人姓名:");
scanf("t%s",nm);
while(p!=NULL&&strcmp(p->chat.name,nm)!=0) //比较输入的联系人是否正确
{
pre=p;
p=p->next; //往后遍历链表,直至找到联系人,并赋给p
}
if(!p)
{
printf("t该联系人不存在!n");
return 0;
}
bh=p->next; //将next值赋给bh,指向要删除的联系人的下一个地址
if(p==head->next)
head->next=bh;
else
pre->next=bh; //使当前联系人的上一个地址,直接指向联系人的下一个地址
printf("t该联系人已删除!n");
printf("t是否继续删除?(Y/N)");
scanf("t%c",&flag);
}
return 0;
}
5、联系人信息的修改
关于联系人的修改,它其实是对链表的某一节点进行修改,通过遍历链表查询到指定节点并直接进行修改,修改过程中依旧沿用部分格式限定条件,若输入某项不符合要求,则一直重复输入,直到该项输入符合要求为止。话不多说,上代码
//修改姓名
int changename(ptcs p)
{
scanf("t%s",p->chat.name);
printf("t修改成功!n");
return 0;
}
//修改地址
int changeadd(ptcs p)
{
scanf("t%s",p->chat.add);
printf("t修改成功!n");
return 0;
}
//修改手机号内容
int changetel(ptcs p)
{
int n,t;
scanf("t%s",p->chat.tel);
do
{
n=0;
if(strlen(p->chat.tel)!=11)
{
n=1;
printf("t您输入的手机号格式不存在,请重新输入:");
scanf("t%s",p->chat.tel);
}
else
{
for(t=0;t<11;t++)
{
if(p->chat.tel[t]<'0'||p->chat.tel[t]>'9')
{
n=1;
printf("t您输入的手机号格式不合理,请重新输入:");
scanf("t%s",p->chat.tel);
break;
}
}
}
}
while(n);
printf("t修改成功!n");
return 0;
}
//修改QQ号码
int changeQQ(ptcs p)
{
int n,t;
scanf("%s",p->chat.tecent);
do
{
n=0;
if(strlen(p->chat.tecent)!=10)
{
n=1;
printf("t您输入的QQ号格式不存在,请重新输入:");
scanf("t%s",p->chat.tecent);
}
else
{
for(t=0;t<10;t++)
{
if(p->chat.tecent[t]<'0'||p->chat.tecent[t]>'9')
{
n=1;
printf("t您输入的QQ号格式不合理,请重新输入:");
scanf("t%s",p->chat.tecent);
break;
}
}
}
}
while(n);
printf("t修改成功!n");
return 0;
}
//修改电子邮箱
int changeEmail(ptcs p)
{
int t,a;
scanf("t%s",p->chat.email);
do
{
a=0;
for(t=0;p->chat.email[t]!=' ';t++)
{
if(p->chat.email[t]=='@')
a++;
}
if(a!=1)
{
printf("t输入的邮箱格式不合理,请重新输入:");
scanf("t%s",p->chat.email);
}
}
while(a);
printf("t修改成功!n");
return 0;
}
6、联系人的输出










