C语言——通讯录系统

实现效果如图:

在这里插入图片描述

在这里插入图片描述

模块如下:

通讯录系统主菜单功能选择
1、添加联系人信息
2、查找联系人信息
3、修改联系人信息
4、删除联系人信息
5、显示全部联系人信息
6、退出通讯录系统

7、释放链表

代码如下:

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

//联系人信息
typedef struct _Person
{
    
    
	char name[10];
	char phone[20];
	char addr[20];
}Person;
//联系人节点
typedef struct _Node
{
    
    
	Person P;
	struct _Node* next;
}Node;
Node* HeadNode = NULL;
//主界面
void Menu()
{
    
    
	printf("-------------通讯录主菜单功能:----------------\n"
		"1.添加联系人信息.\n2.查找联系人信息.\n"
		"3.修改联系人信息.\n4.删除联系人信息.\n"
		"5.显示联系人信息.\n6.退出通讯录系统.\n"
		"7.释放链表.\n");
}
//添加联系人
void AddContact()
{
    
    
	Node* ANode = (Node*)malloc(sizeof(Node));
	ANode->next = NULL;

	printf("\n\n\n\t\t\t\t-------------请添加新的联系人信息-----------\n");
	printf("\t\t\t\t请输入联系人的姓名:");
	scanf("%s", ANode->P.name);
	printf("\t\t\t\t请输入联系人的号码:");
	scanf("%s", ANode->P.phone);
	printf("\t\t\t\t请输入联系人的地址:");
	scanf("%s", ANode->P.addr);
	
	//头插法连接链表
	if (HeadNode == NULL)
	{
    
    
		HeadNode = ANode;
	}
	else
	{
    
    
		ANode->next = HeadNode;
		HeadNode = ANode;
	}
	printf("添加成功.\n");
	return 1;
}
//搜索联系人
void SearchContact(Node* pNode)
{
    
    
	Node* SNode = pNode;
	char Name[10] = "";
	printf("\n\n\t\t\t\t-------------请输入您要查找的联系人姓名------------\n");
	printf("\t\t\t\t请输入联系人的姓名:");
	scanf("%s",Name);

	while (SNode != NULL)
	{
    
    
		if (strcmp(SNode->P.name, Name) !=0)
		{
    
    
			SNode = SNode->next;
			continue;
		}
		else
		{
    
    
			printf("\t\t\t\t联系人:%s\n\t\t\t\t电话号码:%s\n\t\t\t\t地址:%s\n", SNode->P.name, SNode->P.phone, SNode->P.addr);
			return 1;
		}
	}
	printf("\t\t\t\t抱歉,找不到该联系人.\n");
	return 1;
}
//修改联系人
void ChangeContact(Node* pNode)
{
    
    
	Node* CNode = pNode;
	char Name[10] = "";
	printf("\n\n\t\t\t\t-------------请输入您要查找的联系人姓名------------\n");
	printf("\t\t\t\t请输入联系人的姓名:");
	scanf("%s", Name);

	while (CNode != NULL)
	{
    
    
		if (strcmp(CNode->P.name, Name) != 0)
		{
    
    
			CNode = CNode->next;
			continue;
		}
		else
		{
    
    
			printf("\n\n\n\t\t\t\t-------------请修改该联系人的信息-----------\n");
			printf("\t\t\t\t联系人的姓名:");
			scanf("%s", CNode->P.name);
			printf("\t\t\t\t联系人的号码:");
			scanf("%s", CNode->P.phone);
			printf("\t\t\t\t联系人的地址:");
			scanf("%s", CNode->P.addr);
			return 1;
		}
	}
	printf("\t\t\t\t抱歉,找不到该联系人.\n");
	return 1;
}
//删除联系人
int DeleteContact(Node* pNode)
{
    
    
	//1、判断链表是否存在
	if (pNode == NULL)//不存在
	{
    
    
		printf("\n\n\t\t\t\t当前目录不存在联系人.\n");
		return pNode;
	}

	char name[32] = "";
	printf("\t\t\t\t------------------请输入您要删除的联系人--------------------\n");
	printf("\t\t\t\t请输入联系人的姓名:");
	scanf("%s", name);
	//2、寻找删除点
	Node* firstNode = pNode, * secondNode = pNode;
	while (strcmp(firstNode->P.name, name) != 0 && firstNode->next != NULL)
	{
    
    
		secondNode = firstNode;
		firstNode = firstNode->next;
	}

	//3、找到删除点
	if (strcmp(firstNode->P.name, name) == 0)//找到删除点
	{
    
    
		//4、判断删除的位置
		if (firstNode == pNode)//删除头结点
		{
    
    
			pNode = firstNode->next;
			free(firstNode);

		}
		else//中部 或 尾部节点
		{
    
    
			firstNode->next = firstNode->next;
			free(firstNode);
		}
		printf("删除成功");
		return pNode;
	}
	else//没找到删除点
	{
    
    
		printf("未找到该联系人.");
	}
	return pNode;
}
//显示联系人
void PrintContact(Node* pNode)
{
    
    
	Node* PNode = pNode;
	
	printf("\t\t\t\t------------------所有联系人信息如下--------------------\n");
	while (PNode != NULL)
	{
    
    
		printf("\t\t\t\t联系人\t\t电话号码\t地址\n");
		printf("\t\t\t\t%s\t\t%s\t\t%s\n", PNode->P.name, PNode->P.phone, PNode->P.addr);
		PNode = PNode->next;
	}
	return 1;
}
//释放链表
int FreeContact(Node* pNode)
{
    
    
	if (pNode == NULL)
	{
    
    
		printf("当前链表无结点.\n");
		return pNode;
	}
	else
	{
    
    
		Node* pb = pNode;
		while (pb != NULL)
		{
    
    
			pNode = pb->next;
			free(pb);
			pb = pNode;
		}
		printf("释放成功.\n");
		return pNode;
	}
	return pNode;
}
int main()
{
    
    
	
	system("color b0");
	while (1)
	{
    
    
		Menu();
		int choose = _getch();
		switch (choose)
		{
    
    
			case '1':
				AddContact();//添加联系人信息
				break;
			case '2':
				SearchContact(HeadNode);//查找联系人信息
				break;
			case '3':
				ChangeContact(HeadNode);//修改联系人信息
				break;
			case '4':			
				HeadNode=DeleteContact(HeadNode);	//删除联系人信息
				break;
			case '5':
				PrintContact(HeadNode);//显示联系人信息
				break;
			case '6':
				exit(0);//退出通讯录系统
			case '7':
				HeadNode=FreeContact(HeadNode);//释放链表
				break;
		}
		system("pause");
		system("cls");
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_53391957/article/details/116403016