用结构体指针数组实现通讯录

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define size 1000

void creat();
void show();
void menu();
void change();

int person=0;
struct book

{
    char name[10];
    int tel;
    char sex[10];
    int age;
};

void creat(struct book *p[])
{
    int i=1,j;
	
    
    printf("\n\n\n\n\n请输入你想创建的联系人信息\n");
    printf("姓名--电话--性别--年龄\n");

    while(i!=2)
    {
        p[person]=(struct book *)malloc(sizeof(struct book));
        scanf("%s%d %s%d", p[person]->name, &p[person]->tel, p[person]->sex, &p[person]->age);
		person++;
		printf("*****************************************\n");
        printf("    是否继续输入?请选择:1是 2否\n");
		printf("请输入:");
        scanf("%d",&i);
        if(i==2)
        {
            break;
        }
    }
	
   //  show(p);
     printf("       输入任意数结束\n");
	 
    scanf("%d",&j);
  // sleep(5);

  //   main();
	
    

}


void show(struct book *p[])
{
    int i=1,j,x,y;
	struct book *q[2];
//	q[0]=(struct book *q)malloc(sizeof(struct book));
	if(person>1)
	{
		for(x=0;x<person;x++)
		{
			for(y=0;y<person;x++)
			{
				if(strcmp(p[y-1]->name,p[y]->name)<0)
				{
					q[0]=p[y-1];
					p[y-1]=p[y];
					p[y]=q[0];
				}
			}
		}
	}

	printf("\n\n\n已有内容如下:\n\n");
    for(i=0;i<person;i++)
    {
	
        printf("姓名:%s  电话:%d  性别:%s  年龄:%d\n\n\n\n",p[i]->name, p[i]->tel, p[i]->sex, p[i]->age);
        
        
    }
	printf("输入任意键结束\n");
	scanf("%d",&j);
}


void find(struct book *p[])
{
	int x,t;
	int i,count=0;
	char str[10];

	printf("\n\n\n请选择你要查询的项目: 1、姓名  2、电话  3、年龄\n");
	printf("请输入");
	scanf("%d",&x);
	printf("**************************************************\n\n\n\n");

	if(x==1)
	{
		printf("输入姓名:");
		scanf("%s",str);
		for(i=0;i<person;i++)
		{
			if( strcmp( p[i]->name, str)==0 )
			{
				printf("已找到该目标\n");
				printf("姓名:%s   电话:%d   性别:%s   年龄:%d\n\n\n",p[i]->name, p[i]->tel, p[i]->sex, p[i]->age);
				count++;
			}
			if(count==0)
			{
				printf("\n\n\n没有找到结果\n\n\n");
			}
		}

	}

	if(x==2)
	{
		printf("输入电话:");
		scanf("%d",&t);

		for(i=0;i<person;i++)
		{
			if(  p[i]->tel==t )
			{
				printf("已找到该目标\n");
				printf("姓名:%s   电话:%d   性别:%s   年龄:%d\n\n\n",p[i]->name, p[i]->tel, p[i]->sex, p[i]->age);
				count++;
			}
			if(count==0)
			{
				printf("\n\n\n没有找到结果\n\n\n");
			}
		}
	}

	if(x==3)
	{
		printf("输入年龄:");
		scanf("%d",&t);

		for(i=0;i<person;i++)
		{
			if(  p[i]->age==t )
			{
				printf("已找到该目标\n");
				printf("姓名:%s   电话:%d   性别:%s   年龄:%d\n\n\n",p[i]->name, p[i]->tel, p[i]->sex, p[i]->age);
				count++;
			}
			if(count==0)
			{
				printf("\n\n\n没有找到结果\n\n\n");
			}
		}
	}

}



void change(struct book *p[])
{
    int x,k,count=0,t;
	int i,j;
	char str[10],ptr[10];

    printf("\n\n\n请选择你要查询的项目: 1、姓名  2、电话  3、年龄\n");
	printf("请输入");
	scanf("%d",&x);
	printf("**************************************************\n\n\n\n");
	if(x==1)
	{
		printf("输入姓名:");
		scanf("%s",str);
		for(i=0;i<person;i++)
		{
			if( strcmp( p[i]->name, str)==0 )
			{
				printf("已找到该目标\n");
				printf("姓名:%s   电话:%d   性别:%s   年龄:%d\n\n\n",p[i]->name, p[i]->tel, p[i]->sex, p[i]->age);
				printf("请输入你想修改的项: 1 姓名  2 电话  3 性别  4 年龄\n");
				printf("请输入:");
				scanf("%d",&k);

				if(k==1)
				{
					printf("修改为:  ");
					scanf("%s",p[i]->name);					
					printf("\n\n现在的内容为:\n");
					printf("姓名:%s   电话:%d   性别:%s   年龄:%d\n\n\n",p[i]->name, p[i]->tel, p[i]->sex, p[i]->age);
				}

				if(k==2)
				{
					printf("修改为:");
					scanf("%d",&p[i]->tel);
					printf("\n\n现在的内容为:\n");
					printf("姓名:%s   电话:%d   性别:%s   年龄:%d\n\n\n",p[i]->name, p[i]->tel, p[i]->sex, p[i]->age);
				}

				if(k==3)
				{
					printf("修改为:");
					scanf("%s",p[i]->sex);
					printf("\n\n现在的内容为:\n");
					printf("姓名:%s   电话:%d   性别:%s   年龄:%d\n\n\n",p[i]->name, p[i]->tel, p[i]->sex, p[i]->age);
				}

				if(k==4)
				{
					printf("修改为:");
					scanf("%d",&p[i]->age);
					printf("\n\n现在的内容为:\n");
					printf("姓名:%s   电话:%d   性别:%s   年龄:%d\n\n\n",p[i]->name, p[i]->tel, p[i]->sex, p[i]->age);
				}
		
				count++;
			
				break;
				
			}
		
		}
		if(count==0)
		{
			printf("\n\n\n没有找到结果\n\n\n");
		}
    
	}

	if(x==2)
	{
		printf("输入电话:");
		scanf("%d",&t);
		for(i=0;i<person;i++)
		{
			if(  p[i]->tel==t )
			{
				printf("已找到该目标\n");
				printf("姓名:%s   电话:%d   性别:%s   年龄:%d\n\n\n",p[i]->name, p[i]->tel, p[i]->sex, p[i]->age);
				printf("请输入你想修改的项: 1 姓名  2 电话  3 性别  4 年龄\n");
				printf("请输入:");
				scanf("%d",&k);

				if(k==1)
				{
					printf("修改为:  ");
					scanf("%s",p[i]->name);					
					printf("\n\n现在的内容为:\n");
					printf("姓名:%s   电话:%d   性别:%s   年龄:%d\n\n\n",p[i]->name, p[i]->tel, p[i]->sex, p[i]->age);
				}

				if(k==2)
				{
					printf("修改为:");
					scanf("%d",&p[i]->tel);
					printf("\n\n现在的内容为:\n");
					printf("姓名:%s   电话:%d   性别:%s   年龄:%d\n\n\n",p[i]->name, p[i]->tel, p[i]->sex, p[i]->age);
				}

				if(k==3)
				{
					printf("修改为:");
					scanf("%s",p[i]->sex);
					printf("\n\n现在的内容为:\n");
					printf("姓名:%s  电话:%d   性别:%s   年龄:%d\n\n\n",p[i]->name, p[i]->tel, p[i]->sex, p[i]->age);
				}

				if(k==4)
				{
					printf("修改为:");
					scanf("%d",&p[i]->age);
					printf("\n\n现在的内容为:\n");
					printf("姓名:%s   电话:%d   性别:%s   年龄:%d\n\n\n",p[i]->name, p[i]->tel, p[i]->sex, p[i]->age);
				}
		
				count++;
			
				break;
				
			}
		
		}
		if(count==0)
		{
			printf("\n\n\n没有找到结果\n\n\n");
		}
    
	}

    if(x==3)
	{
		printf("输入年龄:");
		scanf("%d",&t);
		for(i=0;i<person;i++)
		{
			if(  p[i]->age==t )
			{
				printf("已找到该目标\n");
				printf("姓名:%s   电话:%d   性别:%s   年龄:%d\n\n\n",p[i]->name, p[i]->tel, p[i]->sex, p[i]->age);
				printf("请输入你想修改的项: 1 姓名  2 电话  3 性别  4 年龄\n");
				printf("请输入:");
				scanf("%d",&k);

				if(k==1)
				{
					printf("修改为:  ");
					scanf("%s",p[i]->name);					
					printf("\n\n现在的内容为:\n");
					printf("姓名:%s   电话:%d   性别:%s   年龄:%d\n\n\n",p[i]->name, p[i]->tel, p[i]->sex, p[i]->age);
				}

				if(k==2)
				{
					printf("修改为:");
					scanf("%d",&p[i]->tel);
					printf("\n\n现在的内容为:\n");
					printf("姓名:%s   电话:%d   性别:%s   年龄:%d\n\n\n",p[i]->name, p[i]->tel, p[i]->sex, p[i]->age);
				}

				if(k==3)
				{
					printf("修改为:");
					scanf("%s",p[i]->sex);
					printf("\n\n现在的内容为:\n");
					printf("姓名:%s   电话:%d   性别:%s   年龄:%d\n\n\n",p[i]->name, p[i]->tel, p[i]->sex, p[i]->age);
				}

				if(k==4)
				{
					printf("修改为:");
					scanf("%d",&p[i]->age);
					printf("\n\n现在的内容为:\n");
					printf("姓名:%s   电话:%d   性别:%s   年龄:%d\n\n\n",p[i]->name, p[i]->tel, p[i]->sex, p[i]->age);
				}
		
				count++;
			
				break;
				
			}
		
		}
		if(count==0)
		{
			printf("\n\n\n没有找到结果\n\n\n");
		}
    
	}
}


void del(struct book *p[])
{
	int i,j,flag=0,k;
	char mz[10];


	printf("\n\n\n已有联系人如下:\n\n");
    for(i=0;i<person;i++)
    {
       printf("姓名:%s   电话:%d   性别:%s   年龄:%d\n\n\n",p[i]->name, p[i]->tel, p[i]->sex, p[i]->age);
	   printf("*********************************************\n");
    }

	printf("请输入你想删除的联系人\n\n");
	printf("请输入:");
	scanf("%s", mz);
	
	for(i=0;i<person;i++)
	{
		
		if(strcmp(p[i]->name , mz)==0)
		{
			printf("\n\n\n所得结果:");
			printf("姓名:%s   电话:%d   性别:%s   年龄:%d\n\n\n",p[i]->name, p[i]->tel, p[i]->sex, p[i]->age);
			flag=i+1;
		}
	}
	if(flag==0)
	{
		printf("未找到结果\n");
	}
	else
	{
		printf("是否确认删除?1:是,2:否\n");
		printf("请输入:");
		scanf("%d",&j);
		printf("\n");

		if(j==1)
		{
				free(p[i]);
			for(i=flag-1;i<person-1;i++)
			{
			
				p[i]=p[i+1];
			
			}
				person--;
			
			printf("完成\n");
		

		}
		else
		{
			printf("已取消\n");  
			
		}
	}

}




void menu()
{
        
        
          //  system("cls");
           
	printf("\n\n\n\n******************************************\n");
	printf("\n*******************通讯录*****************\n");
	printf("\n           按1*************显示录\n");
	printf("\n           按2***************新建\n");
	printf("\n           按3***************删除\n");
	printf("\n           按4***************查找\n");
	printf("\n           按5***************修改\n");
	printf("\n           按6***************排序\n");
	printf("\n           按7***************结束\n");
	printf("\n********************************************\n");
	printf("\n********************************************\n");
}


int main()
{
    
    int choice;
	struct book *frien[size]={0};

    while(1)
    {
        menu();
        printf("请输入命令:");
        scanf("%d",&choice);

        switch(choice)
		{
        case 1:
            show(frien);
            break;
        case 2:
            creat(frien);
            break;
        case 3:
			del(frien);
            break;
        case 4:
			find(frien);
            break;
        case 5:
			change(frien);
            break;
       // case 6:
			
       //     break;
        case 7:
            exit(0);
            break;
		}

    }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值