实现通讯录系统。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#include<Windows.h>
typedef struct person
{
	char name[20];
	int age;
	char phone[12];
}person_t;
typedef struct node_
{
	person_t psn;
	struct node_t *next;
}node_t;
int menu(void)
{
	printf("----------------------------------\n");
	printf("-------欢迎使用通讯录系统---------\n");
	printf("-------1.查找---------------------\n");
	printf("-------2.添加---------------------\n");
	printf("-------3.删除---------------------\n");
	printf("-------4.显示---------------------\n");
	printf("-------5.清空---------------------\n");
	printf("-------0.退出---------------------\n");
	printf("----------------------------------\n");
}
void Print(node_t *head)//打印通讯录
{
	while (head != NULL)
	{
		printf("姓名:%s,年龄:%d,电话:%s\n", head->psn.name, head->psn.age, head->psn.phone);
		head = head->next;
	}
}
void search(node_t *head)//查找联系人
{
	printf("请输入需要查找的联系人:");
	char name[32];
	scanf("%s", name);
	node_t *cur = head;
	while (cur != NULL)
	{
		if (strcmp(name, cur->psn.name) == 0)
		{
			printf("姓名:%s,年龄:%d,电话:%s", cur->psn.name, cur->psn.age, cur->psn.phone);
			break;
		}
		cur = cur->next;
	}
	if (cur == NULL)
	{
		printf("查无此人\n");
	}
}
void insert(node_t **head)//增加联系人
{
	node_t *p = malloc(sizeof(node_t));
	p->next = NULL;
	printf("请输入姓名:>");
	scanf("%s", p->psn.name);
	printf("请输入年龄:>");
	scanf("%d", &p->psn.age);//&p
	printf("请输入电话:>");
	scanf("%s", p->psn.phone);
	p->next = *head;//
	*head = p;//
	Print(*head);
}
void errse(node_t **head)//删除联系人
{
	printf("请输入需要删除的联系人:");
    char name[32];
	scanf("%s", name);
	node_t *cur = *head;
	node_t *pre = NULL;
	while (cur != NULL)
	{
		if (strcmp(name, cur->psn.name) == 0)
		{
			if (pre != NULL)
			{
				pre->next = cur->next;
			}
			else
			{
				*head = cur->next;
			}
			free(cur);
			break;
		}
		pre = cur;
		cur = cur->next;
	}
	Print(*head);
}
void show(node_t *head)//显示联系人
{
	printf("通讯录中的联系人有:>");
	while (head != NULL)
	{
		printf("%s ", head->psn.name);
		head = head->next;
	}
}
void empty(node_t **head)//清空联系人
{
	node_t *cur = *head;
	while (cur != NULL)
	{
		cur = cur->next;
	}
	*head = cur;
	printf("清空完毕\n");

}
int main()
{
	int i = 0;
	node_t *head = NULL;
	while (1) 
	{
		menu();
		printf("请选择:\n");
		scanf("%d", &i);
		switch (i)
		{
		case 1:
			search(head);
			break;
		case 2:
			insert(&head);
			break;
		case 3:
			errse(&head);
			break;
		case 4:
			show(head);
			break;
		case 5:
			empty(&head);
			break;
		case 0:
			printf("Quit.>\n");
			break;
		default:
			printf("按键错误,请重新选择\n");
			break;
		}
	}
	if (head == NULL)
	{
		printf("ok\n");
	}
	system("pause");
	return 0;
}

该通讯录实现了查找、增加、删除、显示、清空联系人这五项功能。

猜你喜欢

转载自blog.csdn.net/enshadower/article/details/80547828