c链表实现简单的通讯录系统

功能包括增删改查排序和显示

//用链表实现简单通讯录


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

#define NAME_SIZE 20
#define ADDR_SIZE 30
#define TELE_SIZE 12

typedef struct Data{
	int age;              //年龄
	int sex;              //性别
	char name[NAME_SIZE]; //姓名            
	char addr[ADDR_SIZE]; //地址
	char tele[TELE_SIZE]; //电话
}Data;

typedef struct LNode{
	Data data;
        struct LNode * next;
}LNode,*Link;

enum REUSLT{MALLOC_NO,MALLOC_OK};

void Menu();
void Init_link(Link *);
int create_node(LNode ** LNode);
void insert_node(Link);
void show_node(Link);
void delete_node(Link);
LNode * search_node(Link);
void modify_node(Link);
void sort_node(Link);


void main()
{
	int op;
	Link head=NULL;
	Init_link(&head);
	do{
		Menu();
	        printf("请输入您的操作:");
		scanf("%d",&op);
		switch(op)
		{
			case 1:
				insert_node(head);
				break;
			case 2:
				delete_node(head);
				break;
			case 3:
				search_node(head);
				//printf("该功能正在维护!!!\n");
				break;
			case 4:
				modify_node(head);
				//printf("该功能正在维护!!!\n");
				break;
			case 5:
				sort_node(head);
				//printf("该功能正在维护!!!\n");
				break;

			case 6:
				show_node(head);
				break;
			case 7:
				printf("感谢使用!!!\n");
				break;
			default:
				printf("请重新输入!!!\n");
		}

	
	
	}while(op!=7);

}

void sort_node(Link head)
{
	int ret;
	LNode *p,*pend,*q,*qend;
        if(head->next==NULL||head->next->next==NULL)
		return ;
	else
	{
		qend=head->next;
		q=qend->next;
		while(q)
		{
			pend=head;
			p=pend->next;
			ret=strcmp(q->data.name,p->data.name);
			while(p!=q&&ret>0)
			{
				pend=pend->next;
				p=p->next;
			}
			if(p==q)
				qend=q;
			else
			{
				qend->next=q->next;
				q->next=p;
				pend->next=q;
			}
			q=qend->next;
		}
		printf("sort_link success!!!\n");
		show_node(head);
	
	}

	

}

void modify_node(Link head)
{
	int ret;
	Data new_node;
	LNode * p=NULL;
        p=head->next;
	printf("请输入您要修改的用户姓名:");
	scanf("%s",new_node.name);
        while(p!=NULL)
	{
		ret=strcmp(new_node.name,p->data.name);
		if(ret==0)
			break;
		p=p->next;
	}
	if(p==NULL)
	{
		printf("NOT FOUND!!!\n");
		return;
	}
	else
	{
		printf("请输入新的用户名:");
		scanf("%s",new_node.name);
		printf("请输入新的年龄:");
		scanf("%d",&new_node.age);
		printf("请输入新的性别:(1.mele 2.femele)");
		scanf("%d",&new_node.sex);
		printf("请输入新的家庭地址:");
		scanf("%s",new_node.addr);
		printf("请输入新的电话:");
		scanf("%s",new_node.tele);
		strcpy(p->data.name,new_node.name);
		p->data.age=new_node.age;
		p->data.sex=new_node.sex;
		strcpy(p->data.addr,new_node.addr);
		strcpy(p->data.tele,new_node.tele);
                printf("modify_node success!!!\n");

	}

}

LNode * search_node(Link head)
{
	char name[NAME_SIZE];
	int ret;
	LNode * p =NULL;
	p=head->next;
	printf("请输入您要查找的用户姓名:");
	scanf("%s",name);
	while(p!=NULL)
	{
		ret=strcmp(p->data.name,name);
		if(ret==0)
			break;
		p=p->next;
	}
	if(p==NULL)
	{
		printf("NOT FOUND!!!\n");
		return NULL;
	}
	 printf("姓名   年龄   性别    家庭地址   电话\n");
         
         
                 printf("%s    %d      ",p->data.name,p->data.age);
                 if(p->data.sex==1)
	                 printf("男    ");
                 else
                         printf("女    ");
                 printf("%s        %s\n",p->data.addr,p->data.tele);
                 return p;
}





void delete_node(Link head)
{
	int ret;
	char del_name[NAME_SIZE];
	LNode * p=NULL;
        LNode * q=NULL;
	q=head;
	p=head->next;
	printf("请输入您要删除的用户姓名:");
	scanf("%s",del_name);
	while(p!=NULL)
	{
		ret=strcmp(del_name,p->data.name);
		if(ret==0)
			break;
		q=q->next;
		p=p->next;
	}
	if(p==NULL)
	{
		printf("NOT FOUND!!!\n");
		return ;
	}
	q->next=p->next;
	free(p);
	printf("delete_node success!!!\n");
}

void show_node(Link head)
{
	LNode * p=NULL;
	p=head->next;
	if(p==NULL)
	{
		printf("EMPTY!!!\n");
		return ;
	}
	printf("姓名   年龄   性别    家庭地址   电话\n");
	while(p!=NULL)
	{
		printf("%s    %d      ",p->data.name,p->data.age);
		if(p->data.sex==1)
			printf("男    ");
		else
			printf("女    ");
		printf("%s        %s\n",p->data.addr,p->data.tele);
		p=p->next;
		
	}
	printf("end!\n");

}

void Menu()
{
	printf("*********************************************\n");
	printf("*******     1.add       2.del        ********\n");
	printf("*******     3.search    4.modify     ********\n");
	printf("*******     5.sort      6.show       ********\n");
	printf("*******           7.exit             ********\n");
	printf("*********************************************\n");
}

void Init_link(Link * head)
{
	create_node(head);
	if(!(*head))
	{
		printf("create_Link error");
		exit(-1);
	}
	(*head)->next=NULL;

}

void insert_node(Link head)
{
	char new_name[NAME_SIZE];
	char new_addr[ADDR_SIZE];
	char new_tele[TELE_SIZE];
        int a;
	LNode * new_node=NULL;
	int ret=create_node(&new_node);
	if(ret==MALLOC_NO)
	{
		printf("create node error!!!\n");
		exit(-1);
	}
	printf("请输入用户名:");
	scanf("%s",new_name);
	strcpy(new_node->data.name,new_name);
	printf("请输入用户年龄:");
	scanf("%d",&a);
	new_node->data.age=a;
	do{
		printf("请输入用户性别:(1.male,2.female)");
	        scanf("%d",&a);
		new_node->data.sex=a;
	        if(new_node->data.sex!=1&&new_node->data.sex!=2)
			printf("输入格式错误,请重新输入!\n");
	}while(new_node->data.sex!=1&&new_node->data.sex!=2);
	printf("请输入用户地址:");
	scanf("%s",new_addr);
	strcpy(new_node->data.addr,new_addr);
	printf("请输入用户电话:");
	scanf("%s",new_tele);
	strcpy(new_node->data.tele,new_tele);
	new_node->next=head->next;
	head->next=new_node;
	printf("存入成功!!!\n");
}

int create_node(LNode ** new_node)
{
	(*new_node)=(LNode *)malloc(sizeof(LNode));
	if(!(*new_node))
		return MALLOC_NO;
	return MALLOC_OK;
}










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值