通讯录(链表实现)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
const int max = 100;
//姓名、性别、电话、手机、传真、邮箱、地址
typedef struct phone
{
	char name[20]; //姓名
	char sex[20];  // 性别 
    int tel; //电话
	int  fax;       // 传真
	char qq[100];   // 邮箱 
	char addre[20]; //地址 
}Ipa;//给存放通讯录属性的结构体取个别名

typedef struct List
{
	Ipa data;
	struct List *next;

}list;
list *head ;

// 初始化
void inint()
{
	head = (list*)malloc(sizeof(list));
	head->next = NULL;
	printf("初始化成功");
} 
// 添加用户

void great()
{
	list *p , *t;
	int n;
	printf("请输入用户人数:\n");
	scanf("%d",&n);
	printf("请依次输入:姓名、性别、电话、传真、邮箱、地址\n");
	for(int i = 0 ; i < n ; i++)
	{
		p  = (list*)malloc(sizeof(list));
		scanf("%s %s %d %d %s %s",p->data.name,p->data.sex,&p->data.tel,&p->data.fax,p->data.qq,p->data.addre);
		//printf("%s",p->data.name);
		t = head->next;
		head->next = p;
		p->next = t;
	} 
}

//显示 
int display()
{
	list*p;
	p = head->next;
	if(!p)
	{
		printf("通讯录为空\n");
		return 0;
	}
	else
	{
		printf("元素如下:\n");
		while(p)
		{
			printf("%s %s %d %d %s %s\n",p->data.name,p->data.sex,p->data.tel,p->data.fax,p->data.qq,p->data.addre);
			p = p->next;
		}
	}
	return 0;
}

//查找 
void seek()
{
	char name_tmpt[100];
	printf("请输入你要查询的姓名:\n");
	scanf("%s",name_tmpt);
	list *p;
	p = head->next;
	int flage = 0;// 1表示已经找到元素
	while(p)
	{
		if(strcmp(name_tmpt,p->data.name) == 0)
		{
			printf("%s %s %d %d %s %s\n",p->data.name,p->data.sex,p->data.tel,p->data.fax,p->data.qq,p->data.addre);
			flage = 1;
			break;
		}
		p = p->next;
	} 
	if(!flage)
	printf("没有该联系人的信息!\n");
} 

// 删除
void dele()
{
	char name_tmpt[100];
	printf("请输入你要删除的姓名:\n");
	scanf("%s",name_tmpt);
	list *p , *par;
	p = head->next;
	par = head;
	int flage = 0;// 1表示已经找到元素
	while(p)
	{
		if(strcmp(name_tmpt,p->data.name) == 0)
		{
			par->next = p->next;
			free(p);
			//printf("%s %s %d %d %s %s\n",p->data.name,p->data.sex,p->data.tel,p->data.fax,p->data.qq,p->data.addre);
			flage = 1;
			printf("操作成功!\n");
			break;
		}
		else
		{
			par = p;//存储p的前一个节点 
			p = p->next; 
		}
	}
	if(!flage)
	printf("没有该联系人的信息!\n");
}

// 更新
void newdata()
{
	char name_tmpt[100];
	printf("请输入你要更新的姓名:\n");
	scanf("%s",name_tmpt);
	list *p;
	p = head->next;
	int flage = 0;// 1表示已经找到元素
	while(p)
	{
		if(strcmp(name_tmpt,p->data.name) == 0)
		{
			//printf("%s %s %d %d %s %s\n",p->data.name,p->data.sex,p->data.tel,p->data.fax,p->data.qq,p->data.addre);
			printf("请输入新的信息:\n");
			scanf("%s %s %d %d %s %s",p->data.name,p->data.sex,&p->data.tel,&p->data.fax,p->data.qq,p->data.addre);
			printf("操作成功!\n"); 
			flage = 1;
			break;
		}
		p = p->next;
	} 
	if(!flage)
	printf("没有该联系人的信息!\n");
}

// 菜单 
void menu()
{
	printf("\t\t\t****************************************************\n");
	printf("\t\t\t1.初始化通讯录                          2.建立通讯录\n");
	printf("\t\t\t3.删除联系人                            4.修改联系人\n");
	printf("\t\t\t5.查找联系人                            6.显示通讯录  \n");
	printf("\t\t\t7 退出系统                                     \n");
	printf("\t\t\t****************************************************\n");
}
int main()
{
	menu(); 
	int op = 10;
	while(op!= 8)
	{
		printf("请选择你的操作:\n");
		scanf("%d",&op);
		switch(op)
		{
			case 1 : inint();break;
			case 2 : great();break;
			case 3 : dele();break;
			case 4 : newdata();break;
			case 5 : seek();break;
			case 6 : display();break;
			case 7 : op = 8;break;
		}
	}
	return 0;
} 

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值