C语言实现通讯录项目



AddressList.h

#ifndef __ADDRESSLIST_H__
#define __ADDRESSLIST_H__

#define TRUE 1
#define FALSE 0

typedef struct _data
{
	int ID;
	char Name[20+1];
	long long  Mobile;
	char HomeAddress[30+1];
	int OfficeTel;
}Data;
	
typedef struct _addresslist
{
	Data data;
	struct _addresslist * next;
}AddressList;

//创建链表
AddressList * Create_List();

//创建菜单
void menu();

//初始好友信息
int chushi1(AddressList *h);
int chushi2(AddressList *h);

//插入好友信息
int Insert(AddressList *h);

//打印好友信息
void Display(AddressList *h);

//冒泡排序
void MaoPao(AddressList *h);

//获取长度
int Get_Len(AddressList * h);

//查找好友
int Find_Element(AddressList * h, char name[]);

//打印单个好友信息
void Display_one(AddressList *h);

// 删除指定数据 根据ID
int Delete_Dataid(AddressList * h, int id);

// 删除指定数据
int Delete_Data(AddressList * h, char name[]);

//清屏
void clear();

#endif



AddressList.c

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

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

//获取链表长度
int Get_Len(AddressList * h)
{
	if (h == NULL)
		return FALSE;
	
	AddressList * tmp = h;
	int count = 0;
	while (tmp -> next)
	{
		count++;
		tmp = tmp -> next;
	}
	return count;
}

//创建菜单
void menu()
{
	printf ("\t\t ==============welcome to my addresslist============ \n");
	printf ("\t\t|                                                   |\n");
	printf ("\t\t|                       通讯录                      |\n");
	printf ("\t\t|                                                   |\n");
	printf ("\t\t|                    1、添加好友                    |\n");
	printf ("\t\t|                                                   |\n");
	printf ("\t\t|                    2、显示好友                    |\n");
	printf ("\t\t|                                                   |\n");
	printf ("\t\t|                    3、查找好友                    |\n");
	printf ("\t\t|                                                   |\n");
	printf ("\t\t|                    4、删除好友                    |\n");
	printf ("\t\t|                                                   |\n");
	printf ("\t\t|                    5、  退出                      |\n");
	printf ("\t\t|                                                   |\n");
	printf ("\t\t|                                   madeby:zhangchi |\n");
	printf ("\t\t =================================================== \n");
}

//冒泡排序
void MaoPao(AddressList *h)
{
	if (h == NULL)
		return;
	
	int count = Get_Len(h);
	
	AddressList * pre = h->next;
	AddressList * cur = h->next->next;
	AddressList * tmp;
	
	int i,j;
	for (i = 0; i < count-1; i++)
	{
		pre = h->next;
		cur = h->next->next;
		for (j = 0; j < count-i-1; j++)
		{
			if ((pre -> data).ID > (cur -> data).ID)
			{
				Data tmpd = cur -> data;
				cur -> data = pre -> data;
				pre -> data = tmpd;
			}
			tmp = cur -> next;
			pre = cur;
			cur = tmp;
		}
	}
}

//打印好友信息
void Display(AddressList *h)
{
	if (h == NULL)
		return;
	MaoPao(h);
	
	AddressList * tmp = h->next;
	
	while(tmp)
	{
		printf ("\t\t%d\t",(tmp->data).ID);
		printf ("%-20s",(tmp->data).Name);
		printf ("%-15lld",(tmp->data).Mobile);
		printf ("%-10s\t",(tmp->data).HomeAddress);
		printf ("%-d",(tmp->data).OfficeTel);
		printf ("\n");
		tmp = tmp->next;		
	}
	getchar();
	printf ("\n\t\t\t\t以上是好友的信息!");
}

//打印单个好友信息
void Display_one(AddressList *h)
{
	if (h == NULL)
		return;
	
	printf ("\t\t%d\t",(h->data).ID);
	printf ("%-20s",(h->data).Name);
	printf ("%-15lld",(h->data).Mobile);
	printf ("%-10s\t",(h->data).HomeAddress);
	printf ("%-d",(h->data).OfficeTel);
	printf ("\n");
}

//初始好友1信息
int chushi1(AddressList *h)
{
	if (h == NULL)
		return FALSE;
	AddressList * addresslist = (AddressList *) malloc (sizeof(AddressList)/sizeof(char));
	if (addresslist == NULL)
		return FALSE;
	
	Data * datalist = (Data *)malloc(sizeof(Data)/sizeof(char));
	if (datalist == NULL)
		return FALSE;
	
	datalist -> ID = 1;
	strcpy(datalist -> Name , "zhangchi");
	datalist -> Mobile = 13151581758;
	strcpy(datalist -> HomeAddress , "yang zhou");
	datalist -> OfficeTel = 0;
	
	addresslist -> data = * datalist;
	addresslist -> next = h -> next;
	h -> next = addresslist;
	
	return TRUE;
}

//初始好友2信息
int chushi2(AddressList *h)
{
	if (h == NULL)
		return FALSE;
	AddressList * addresslist = (AddressList *) malloc (sizeof(AddressList)/sizeof(char));
	if (addresslist == NULL)
		return FALSE;
	
	Data * datalist = (Data *)malloc(sizeof(Data)/sizeof(char));
	if (datalist == NULL)
		return FALSE;
	
	datalist -> ID = 2;
	strcpy(datalist -> Name , "zhougongzheng");
	datalist -> Mobile = 13151582010;
	strcpy(datalist -> HomeAddress , "shu qian");
	datalist -> OfficeTel = 0;
	
	addresslist -> data = * datalist;
	addresslist -> next = h -> next;
	h -> next = addresslist;
	
	return TRUE;
}


//插入好友信息
int Insert(AddressList *h)
{
	if (h == NULL)
		return FALSE;
	AddressList * addresslist = (AddressList *) malloc (sizeof(AddressList)/sizeof(char));
	if (addresslist == NULL)
		return FALSE;
	
	Data * datalist = (Data *)malloc(sizeof(Data)/sizeof(char));
	if (datalist == NULL)
		return FALSE;
	
	printf ("\t\t\t\t  请输入ID:");
	scanf("%d",&(datalist -> ID));
	
	printf ("\t\t\t\t  请输入姓名:");
	scanf("%s",datalist -> Name);
	
	printf ("\t\t\t\t  请输入手机号码:");
	scanf("%lld",&(datalist -> Mobile));
	
	printf ("\t\t\t\t  请输入家庭住址:");
	scanf("%s",datalist -> HomeAddress);
	
	printf ("\t\t\t\t  请输入公司号码:");
	scanf("%d",&(datalist -> OfficeTel));
	getchar();
	printf ("\n\t\t\t\t    添加好友成功!");
	
	addresslist -> data = * datalist;
	addresslist -> next = h -> next;
	h -> next = addresslist;
	
	return TRUE;
}

// 删除指定数据 根据ID
int Delete_Dataid(AddressList * h, int id)
{
	if (h == NULL)
		return FALSE;
	
	AddressList * tmp = h;
	
	while (tmp -> next)
	{
		if ((tmp->next->data).ID == id)
			break;
		tmp = tmp -> next;
	}
	
	if (tmp -> next == NULL)
		return FALSE;
	
	AddressList * p = tmp -> next;
	tmp -> next = p -> next;
	
	free(p);
	return TRUE;
}

// 查找好友
int Find_Element(AddressList * h, char name[])
{
	if (h == NULL)
		return FALSE;
	int count = 0;
	AddressList * tmp = h -> next;
	while (tmp)
	{
		if (strcmp((tmp->data).Name , name) == 0)
		{
			Display_one(tmp);
			count++;
		}
		tmp = tmp -> next;
	}
	getchar();
	if (count == 0)
	{
		printf ("\n\t\t\t\t  抱歉,没有该好友!");
	}
	else
	{
		printf ("\n\t\t\t\t以上是查找到的好友信息!");
	}
	return FALSE;
}

// 删除指定数据,根据姓名
int Delete_Data(AddressList * h, char name[])
{
	if (h == NULL)
		return FALSE;
	
	AddressList * tmp = h;
	
	int count = 0;
	while (tmp -> next)
	{
		if (strcmp((tmp->next->data).Name , name) == 0)
			count++;
		tmp = tmp -> next;
	}
	
	tmp = h;
	if (count == 0)
	{
		getchar();
		printf ("\n\t\t\t\t  抱歉,没有该好友!");
		return FALSE;
	}
	else if (count == 1)
	{
		while (tmp -> next)
		{
			if (strcmp((tmp->next->data).Name , name) == 0)
				break;
			tmp = tmp -> next;
		}
		if (tmp -> next == NULL)
		return FALSE;
	
		AddressList * p = tmp -> next;
		tmp -> next = p -> next;
		free(p);
		getchar();
		printf ("\n\t\t\t\t    删除好友成功!");
		return TRUE;
	}
	else
	{
		Find_Element(h,name);
		
		int id;
		printf ("\n\t\t\t\t请输入要删除好友的ID:");
		scanf("%d",&id);
		Delete_Dataid(h,id);
		printf ("\t\t\t\t    删除好友成功!");		
	}
}

void clear()
{
	system("clear");
	menu();
}


main.c

#include <stdio.h>
#include "AddressList.h"

int main()
{
	clear();
	
	// 创建链表
	AddressList * head = Create_List();
	if (head == NULL)
	{
		printf("\t\t\t\t创建链表失败\n");
		return FALSE;
	}

	chushi1(head);
	chushi2(head);
	
	char ch;
	char name[20+1];
	while(ch != '5')
	{
		clear();
		printf ("\t\t\t\t    请选择操作:");
		scanf ("%c",&ch);
		
		switch(ch)
		{	
			case '1':
				Insert(head);
				break;
			case '2':
				Display(head);
				break;
			case '3':
				printf ("\t\t\t\t请输入查找好友的姓名:");
				scanf ("%s",name);
				Find_Element(head,name);
				break;
			case '4':
				printf ("\t\t\t\t请输入删除好友的姓名:");
				scanf ("%s",name);
				Delete_Data(head, name);
		}
		while (getchar() != '\n');
		
		printf ("\n");
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值