简易版通讯录

#include "LinkList.h"
#include <stdlib.h>
#include <stdio.h>

Node * Create_List()//建表
{
	Node *list = (Node*)malloc(sizeof(Node)/sizeof(char));
	if (list == NULL)
		return NULL;
	list->next = NULL;   // 空表
	
	return list;
}

int Insert_Head(Node *h, LinkData data)
{
	if (h == NULL)
		return FALSE;
	Node *node = (Node*)malloc(sizeof(Node)/sizeof(char));
	if (node == NULL)
	{
		return FALSE;
	}
	
	node->data = data;//创建一个节点把数据放进去
	node->next = h->next;
	
	h->next = node;
	
	return TRUE;
}



int Insert(Node* h)
{
    	Node* node=Create_List();
	if (node == NULL)
		return FALSE;
	system("clear");
	printf("Please enter your buddy id:\n");
    	scanf("%d",&node->data.id);
	system("clear");
	printf("Please provide your buddy name:\n");
	scanf("%s",node->data.name);
	system("clear");
	printf("Please enter your buddy phone number:\n");
	scanf("%d",&node->data.pnum);
	system("clear");
	printf("Please provide your buddy address:\n");
	scanf("%s",node->data.addr);
	system("clear");
	printf("Please provide your buddy company phone:\n");
	scanf("%d",&node->data.cnum);
	system("clear");

	
	Insert_Head(h, node->data);
 	free(node);
	
	return TRUE;
	
}

int Rank_List(Node* h)//按照id对朋友进行排序
{
	if (h == NULL || h->next == NULL || h->next->next == NULL)
		return FALSE;
	Node* tmp = h->next;
	int i;
	int a=0;
	
	while(tmp)
	{
		a++;
		tmp=tmp->next;
	}
	
	while(a-1)
	{
		tmp=h->next;
		for(i=0;i<a-1;i++)
		{
			if((tmp->data.id) > (tmp->next->data.id))
			{
				Inf ch=tmp->data;
				tmp->data=tmp->next->data;
				tmp->next->data=ch;
			}
			tmp = tmp->next;
		}
		a--;
	}
	return TRUE;
}

void Display(Node *h)//输出朋友的信息
{
	if (h == NULL)
		return;
	
	int count = 0;
	Node *tmp = h->next;
	while (tmp)
	{
		printf ("%8d", tmp->data.id);
		printf ("%8s", tmp->data.name);
		printf ("%8d", tmp->data.pnum);
		printf ("%8s", tmp->data.addr);
		printf ("%8d", tmp->data.cnum);
		printf ("\n");
		tmp = tmp->next;
	}
	printf ("\n");
}

void Puts(Node* h)//单个输出
{
	if (h == NULL)
		return;
	Node *tmp = h;
	printf ("%8d", tmp->data.id);
	printf ("%8s", tmp->data.name);
	printf ("%8d", tmp->data.pnum);
	printf ("%8s", tmp->data.addr);
	printf ("%8d", tmp->data.cnum);
	printf ("\n");
}

int Find_Element(Node* h, char* ch)//寻找这个朋友有否
{
	if (h == NULL)
		return FALSE;
	
	Node *tmp = h->next;
	int count = 0;
	while (tmp)
	{
		if (strcmp(tmp->data.name,ch)==0)
		{
			char *p="ID";
			printf ("%8s", p);
			p="NAME";
			printf ("%8s", p);
			p="PNUM";
			printf ("%8s", p);
			p="ADDR";
			printf ("%8s", p);
			p="CNUM";
			printf ("%8s", p);
			printf ("\n");
			break;
		}
	}
	
	while (tmp)
	{
		if (strcmp(tmp->data.name,ch)==0)
		{
			count++;
			Puts(tmp);
		}
		tmp = tmp->next;
	}
	
	if(count==0)
		return FALSE;
	return TRUE;
}

int Delete_Pos(Node* h, int pos)//插入到固定节点
{
	if (h == NULL || pos < 1)
		return FALSE;
	
	// 找要插入位置的前一个结点
	Node *tmp = h;
	int i;
	for (i = 0; i < pos-1; i++)
	{
		if (tmp->next == NULL)
			break;
		tmp = tmp->next;
	}
	
	Node *p = tmp->next;
	tmp->next = p->next;
	free(p);
	
	return TRUE;
}

int Delete_Data(Node* h, char* ch)//删除数据
{
	if (h == NULL)
		return FALSE;
	
	Node *tmp = h;
	Node* node;
	int count=0;
	while (tmp->next)
	{
		if (strcmp(tmp->next->data.name,ch)==0)
		{
			node = tmp;
			count++;
		}
		tmp = tmp->next;
	}
	

	
	if (count==0)
	{
		printf("Sorry , didn't find the good friend.\n");
		node = NULL;
		tmp  = NULL;
		free(node);
		free(tmp);
		return FALSE;
	}
	
		else if (count==1)
		{
			
			Node *p = node->next;
			node->next = p->next;
			node = NULL;
			tmp  = NULL;
			free(node);
			free(tmp);
			free(p);
			return TRUE;
		}
			else
			{
				Find_Element(h,ch);
				int a;
				printf("Please enter the id you want to remove buddy.\n");
				scanf("%d",&a);
				Node *tmp = h->next;
				int b = 1;
				while (tmp)
				{
					if ( tmp->data.id == a)
					{
						break;
					}
					b++;
					tmp = tmp->next;
				}
				node = NULL;
				tmp  = NULL;
				free(node);
				free(tmp);
				free(tmp);
				Delete_Pos(h,b);
				return TRUE;
			}
	
}


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "LinkList.h"
#include "AddList.h"


void interface(char* str)//界面
{
	char ch[100];
	system("clear");
	Node* head = Create_List();
	if (head == NULL)
	{
		printf("创建链表失败\n");
		return ;
	}
	printf("**************************************************\n");
	printf("*                                                *\n");
	printf("*              1、添加好友信息                   *\n");
	printf("*                                                *\n");
	printf("*              2、列表好友信息                   *\n");
	printf("*                                                *\n");
	printf("*              3、搜索好友                       *\n");
	printf("*                                                *\n");
	printf("*              4、删除好友                       *\n");
	printf("*                                                *\n");
	printf("*              5、退出                           *\n");
	printf("*                                                *\n");
	printf("**************************************************\n");
	printf("\n");
	printf("Please enter your choice\n");
	scanf("%s",ch);
	strcpy(str,ch);
}

void Add_Friends(Node *h)//添加朋友
{
	int a = Insert(h);
	
	
	if(a==FALSE)
	{
		printf("Add buddy failure.\n");
	}
	else
	{
		Rank_List(h);
		printf("Add buddy successful.\n");
	}
		
	
}

void List_Friends(Node* h)//列表好友信息
{
	system("clear");
	char *p="ID";
	printf ("%8s", p);
	p="NAME";
	printf ("%8s", p);
	p="PNUM";
	printf ("%8s", p);
	p="ADDR";
	printf ("%8s", p);
	p="CNUM";
	printf ("%8s", p);
	printf ("\n");
	Display(h);
	if(h->next==NULL)
		printf("There is no data here\n");
}

void Search_Friend(Node* h,char* ch)//查找朋友
{
	system("clear");
	int a = Find_Element(h, ch);
	if(a==FALSE)
	{
		printf("I'm sorry, did not find your friend's information.\n");
		return;
	} 
	printf ("\n");
}

void Delete_Friend(Node* h,char* ch)//删除朋友的信息                                     
{
	system("clear");
	int a = Delete_Data(h,ch);
	if(a==TRUE)
		printf("Successfully delete.\n");
	
}


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "LinkList.h"
#include "AddList.h"
int main()
{
	char ch[100]={'0'};
	Node* head = Create_List();
	if (head == NULL)
	{
		printf("创建链表失败\n");
		return -1;
	}
	while(1)
	{
		char s;
		interface(ch);
		if(strcmp(ch,"INSERT")==0||strcmp(ch,"1")==0)
		{
			Add_Friends(head);
			printf("Enter the enter to continue\n");
			getchar();
			getchar();
		}
			else if(strcmp(ch,"DISPLAY")==0||strcmp(ch,"2")==0)
			{
				char *p="ID";
				printf ("%8s", p);
				p="NAME";
				printf ("%8s", p);
				p="PNUM";
				printf ("%8s", p);
				p="ADDR";
				printf ("%8s", p);
				p="CNUM";
				printf ("%8s", p);
				printf ("\n");
				List_Friends(head);
				printf("Enter the enter to continue\n");
				getchar();
				getchar();
			}
				else if(strcmp(ch,"SEARCH")==0||strcmp(ch,"3")==0)
				{
					char s[100];
					system("clear");
					printf("Please enter your friend's name\n");
					scanf("%s",s);
					Search_Friend(head,s);
					printf("Enter the enter to continue\n");
					getchar();
					getchar();
				}
					else if(strcmp(ch,"DELETE")==0||strcmp(ch,"4")==0)
					{
						char s[100];
						system("clear");
						printf("Please enter your friend's name\n");
						scanf("%s",s);
						Delete_Friend(head,s);
						printf("Enter the enter to continue\n");
						getchar();
						getchar();
					}
						else if(strcmp(ch,"EXIT")==0||strcmp(ch,"5")==0)
						{
							system("clear");
							exit(0);
						}
							else
							{
								system("clear");
								printf("Input error\n");
								printf("Enter the enter to continue\n");
								getchar();
								getchar();
							}
	}
	
	return 0;
}
电子通讯录的总体框架就是运用链表,链表的指针域指向下一个节点,而数据域用来存储你要存储的那些数据。里面涉及到的基本都是链表的使用,从链表的创建,链表的元素添加,链表的查找,链表的删除等等。熟练掌握这些,对于通讯录的界面就很简单,主函数使用了一个死循环,让这个通讯录不停的跑下去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值