7.30 运用结构体写通讯录

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

int num = 0; 
struct  person

{
char name[20];
int age;
char ID;
};

typedef struct person STR;



void delete(STR *per[])
{
char q[20] = {0};
	char p[20] = {0};
	int i,j,flag;
	while(1)
	{
		system("clear");
		printf("请输入你要删除的联系人的姓名\n");
		scanf("%s",q);
		for(i = 0;i < num; i++)
		{
			if(!strcmp(q,per[i]->name))
			{
				free(per[i]);
				num--;
				flag = 1;
				for(j = i;j < num;j++)
				{
					per[j] = per[j + 1];
				}
				break;
			}
			else
			{
				flag = 0;
			}
		}

if(flag)
		{
			printf("删除成功请输入quit退回主菜单或者输入其他内容继续删除联系人\n");
		}
		else
		{
			printf("查无此人请输入quit退回主菜单或者输入其他内容继续删除联系人\n");
		}
		scanf("%s",p);
		if(!strcmp(p,"quit"))
		{
			break;
		}
	}
}
void transfer(STR *per[])
{
	int i,flag;
	char b[20] = {0},q[20] = {0};
	while(1)
	{
		system("clear");
		printf("请输入要修改的联系人信息的姓名\n");
		scanf("%s",b);
		for(i = 0; i < num; i++)
		{
			if(!strcmp(b,per[i]->name))
			{
				flag = 1;
				printf("请输入新的姓名、年龄和ID:\n");
				scanf("%s%d %c",per[i]->name,&per[i]->age,&per[i]->ID);
				getchar();
				break;
			}
			else
			{
				flag = 0;
			}
		}
		if(!flag)
		{
			printf("查无此人\n");
		}
		else
		{
			printf("修改成功\n");
		}
		printf("请输入quit退回主目录,输入其他内容继续修改联系人信息:\n");
		scanf("%s",q);
		if(!strcmp(q,"quit"))
		{
			break;
		}
	}
}

void store(STR *per[])
{
	STR *p[1];
	int i,j;
	p[0] = (STR *) malloc (sizeof(STR));
	getchar();
	system("clear");
	printf("当前通讯录内容:\n");
	for(i = 0;i < num - 1; i++)
	{
		for(j = 0; j < num - 1 - i; j++)
		{
			if(strcmp(per[j]->name,per[j+1]->name) > 0)
			{
				p[0] = per[j + 1];
				per[j + 1] = per[j];
				per[j] = p[0];
			}
		}
	}
	for(i = 0;i < num;i++)
	{
		printf("%s %d %c\n",per[i]->name,per[i]->age,per[i]->ID);
	}
	printf("请按任意键退出\n");
	getchar();
}
void search(STR *per[])
{
	int i,flag;
	char a[20] = {0};
	while(1)
	{
		printf("请输入你要查找的人的姓名(输入quit退回主菜单):\n");
		scanf("%s",a);
		system("clear");
		for(i = 0; i < num; i++)
		{
			if(!(strcmp(per[i]->name,a)))
			{
				printf("%s %d %c\n",per[i]->name,per[i]->age,per[i]->ID);
				flag = 1;
				break;
			}
			flag = 0;
		}
		if(!(strcmp(a,"quit")))
		{
			break;
		}
		if(!flag)
		{
			printf("查无此人\n");
		}
	}
}

void add(STR *per[])
{
	system("clear");
	while(1)
	{	
		printf("      请输入联系人姓名、年龄和ID(输入quit退回主菜单):\n");
		per[num] = (STR *) malloc(sizeof(STR));
		scanf("%s",per[num]->name);
		if(!(strcmp(per[num]->name,"quit")))
		{
		    break;
		}
		scanf("%d",&per[num]->age);
		getchar();
		scanf("%c",&per[num]->ID);
		++num;
	}
}
void welcome()
{
	system("clear");
	printf("\n\n\n\n\n");
	printf("               \033[47;31m  欢迎来到主菜单\033[0m:\n");
	sleep(3);
}
int menue()
{
	system("clear");
	printf("\n\n\n\n                主菜单\n\n\n");
	printf("\033[47;31m 1.添加信息\033[0m              \033[47;32m 2.查看信息\033[0m\n");
	printf("\033[47;33m 3.查找信息\033[0m              \033[47;34m 4.删除信息\033[0m\n");
	printf("\033[47;35m 5.修改信息\033[0m              \033[47;36m 6.退出主菜单\033[0m\n");
	printf("请输入序号进入指定功能\n");
	sleep(3);
}
int main()
{
	STR* per[SIZE] = {0};
	int choice,i;
	welcome();
	while(1)
	{
		menue();
		scanf("%d",&choice);
		switch(choice)
		{
			case 1:
				{
					add(per);
					break;
				}
			case 2:
				{
					store(per);
					break;
				}
			case 3:
				{
					search(per);
					break;
				}
			case 4:
				{
					delete(per);
					break;
				}
			case 5:
				{
					transfer(per);
					break;
				}
			case 6:
				{
					exit (0);
					break;
				}
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42752746/article/details/81291609