#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node
{
char name[10];
int id;
char tel[15];
}node;
static int count=0; //通讯录中实时用户数量
//for循环遍历数组中的元素并打印数据
void ListTraverse(node L[]) //结构体数组 L 作为实参传递时,形参也用结构体数组来接
{
int i;
for(i=0;i<count;i++)
{
printf("%s\n",L[i].name);
printf("%d\n",L[i].id);
printf("%s\n",L[i].tel);
}
printf("\n");
}
//依次填充结构体数组中元素的成员变量,并 count++
void ListAdd(node L[])
{
printf("please input the name:\n");
scanf("%s",L[count].name);
printf("please input the id:\n");
scanf("%d",&L[count].id);
printf("please input the tel:\n");
scanf("%s",L[count].tel);
count++;
}
//for循环遍历寻找,找到之后memset清空,后面的元素依次往前移,最后 count--
void ListDelete(node L[],char k[])
{
int i;
for(i=0;i<count;i++)
{
if(strcmp(k,L[i].name)==0)
{
memset(&L[i],0,sizeof(L[i])); //Clear structure variables
while(strlen(L[i+1].name)!=0) //后面的数组元素依次往前移
{
strcpy(L[i].name,L[i+1].name);
L[i].id=L[i+1].id;
strcpy(L[i].tel,L[i+1].tel);
i++;
}
break;
}
}
count--;
}
//for循环遍历寻找,找到之后替换修改
void ListModify(node L[],char k[],int e)
{
int i;
for(i=0;i<count;i++)
{
if(strcmp(k,L[i].name)==0)
{
L[i].id=e;
break;
}
}
}
void LocateElem(node L[],int e)
{
int i;
for(i=0;i<count;i++)
{
if(L[i].id==e)
{
printf("The user information found is:\n");
printf("%s\n",L[i].name);
printf("%d\n",L[i].id);
printf("%s\n",L[i].tel);
break;
}
}
}
int main()
{
printf("欢迎来到苏嵌教育\n");
node L[50];
memset(L,0,sizeof(L));
int a,j,i,e;
char k[10];
while(1)
{
printf("请选择以下功能;\n");
printf("1.add好友信息\n");
printf("2.删除好友信息\n");
printf("3.修改好友信息\n");
printf("4.查找好友\n");
printf("5.通讯录逆序查看\n");
printf("6.退出\n");
scanf("%d",&a);
if(a>6)
printf("无此功能\n");
switch(a)
{
case 1:
ListAdd(L);
printf("add元素后的通讯录:\n");
ListTraverse(L);
break;
case 2:printf("请输入要删除的好友姓名:\n");
scanf("%s",k);
ListDelete(L,k);
printf("删除元素后的通讯录:\n");
ListTraverse(L);
break;
case 3:printf("请输入要修改的好友姓名:\n");
scanf("%s",k); //!!!
printf("修改后的好友ID为:\n");
scanf("%d",&e);
ListModify(L,k,e);
printf("修改元素后的通讯录:\n");
ListTraverse(L);
break;
case 4:printf("请输入要查找的好友ID:\n");
scanf("%d",&e);
//int flag =0;
LocateElem(L,e);
break;
/*case 5:ReverseLinkList( L );
printf("逆序后的通讯录为:\n");
ListTraverse(L);
break; */
case 6:exit(0);
break;
default:
break;
}
}
}