0
点赞
收藏
分享

微信扫一扫

简单的C语言通讯录

c一段旅程c 2022-04-13 阅读 72
c语言
/*
添加联系人信息
删除指定联系人信息
查找指定联系人信息
修改指定联系人信息
显示所有联系人信息
清空所有联系人
*/

typedef struct Contacts 
{
	char name[NAME_MAX];
	int age;
	char sex[SEX_MAX];
	char address[ADDRESS_MAX];
	char numbers[NUMBERS_MAX];
	struct Contacts* next;
}Contacts;
void ConInfor(Contacts* con)
{
	printf("请输入姓名:");
	scanf("%s", con->name);
	printf("请输入年龄:");
	scanf("%d", &con->age);
	printf("请输入性别:");
	scanf("%s", con->sex);
	printf("请输入家庭地址:");
	scanf("%s", con->address);
	printf("请输入电话号码:");
	scanf("%s", con->numbers);
	con->next = NULL;
}

void AddContacts(Contacts** pphead)
{
	Contacts* new_contacts = (Contacts*)malloc(sizeof(Contacts));
	ConInfor(new_contacts);
	if (*pphead == NULL)
	{
		*pphead = new_contacts;
	}
	else
	{
		Contacts* cur = *pphead;
		while (cur->next != NULL)
		{
			cur = cur->next;
		}
		cur->next = new_contacts;
	}
}
void DelContacts(Contacts** pphead)
{
	printf("请输入要删除联系人姓名:");
	char name[NAME_MAX];
	scanf("%s", name);
	int flag = 1;
	if (*pphead == NULL)//链表为空
	{
		printf("删除失败,通讯录无数据!\n");
		return;
	}
	else if ((*pphead)->next==NULL)//链表有一个结点
	{
		if (strcmp(name, (*pphead)->name) == 0)
		{
			*pphead = NULL;
			printf("删除成功!\n");
			flag = 0;
		}
	}
	else//链表有多个结点
	{
		Contacts* prve =*pphead;
		Contacts* cur = *pphead;
		if (strcmp(name, cur->name) == 0)
		{
			*pphead = cur->next;
			printf("删除成功!\n");
			return;
		}
		while (cur != NULL)
		{
			if (strcmp(name,cur->name) == 0)
			{
				prve->next = cur->next;
				free(cur);
				flag = 0;
				printf("删除成功!\n");
				break;
			}
			prve = cur;
			cur = cur->next;
		}
	}
	if (flag == 1)
	{
		printf("删除失败,通讯录无数据!\n");
	}
}
void DelContacts(Contacts** pphead)
{
	printf("请输入被删除联系人姓名:");
	char name[NAME_MAX];
	scanf("%s", name);
	int flag = 1;
	if (*pphead == NULL)//链表为空
	{
		printf("删除失败,通讯录无数据!\n");
		return;
	}
	else if ((*pphead)->next==NULL)//链表有一个结点
	{
		if (strcmp(name, (*pphead)->name) == 0)
		{
			*pphead = NULL;
			printf("删除成功!\n");
			flag = 0;
		}
	}
	else//链表有多个结点
	{
		Contacts* prve =*pphead;
		Contacts* cur = *pphead;
		if (strcmp(name, cur->name) == 0)
		{
			*pphead = cur->next;
			printf("删除成功!\n");
			return;
		}
		while (cur != NULL)
		{
			if (strcmp(name,cur->name) == 0)
			{
				prve->next = cur->next;
				free(cur);
				flag = 0;
				printf("删除成功!\n");
				break;
			}
			prve = cur;
			cur = cur->next;
		}
	}
	if (flag == 1)
	{
		printf("删除失败,通讯录无数据!\n");
	}
}
void PrintContacts(Contacts* phead)
{
	if (phead == NULL)
	{
		printf("通讯录为空\n");
	}
	else
	{
		printf("姓名                  年龄   性别   电话号码              住址\n");
		while (phead != NULL)
		{
			Print(phead);
			phead = phead->next;
		}
	}
}

void Print(Contacts* phead)
{
	printf("%-20s  ", phead->name);//这里的-是左对齐,20是域宽
	printf("%-5d  ", phead->age);//这里的-是左对齐,5是域宽
	printf("%-5s  ", phead->sex);//这里的-是左对齐,5是域宽
	printf("%-20s  ", phead->numbers);
	printf("%-20s  \n", phead->address);
}
void ClearContacts(Contacts** pphead)
{
	Contacts* prve = *pphead;
	Contacts* cur = *pphead;
	while (cur != NULL)
	{
		prve = cur;
		cur = cur->next;
		free(prve);
	}
	*pphead = NULL;//最后置NULL,才是负责的程序猿
	printf("已清空!\n");
}


举报

相关推荐

0 条评论