结构体实现通讯录

 

 

#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;
		}
		
	}
}





	
	
	

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值