Address_Book.h
#ifndef _ADDRESS_BOOK
#define _ADDRESS_BOOK
typedef enum {TRUE, FALSE, ERROR} BOOL;
typedef struct _Address_Book
{
int id;
char name[20];
long phone;
char address[20];
long tel;
struct _Address_Book *next;
}Address_Book;
typedef struct _List
{
Address_Book *head;
}List;
//创建链表
List *CreatList();
//插入ID和姓名信息
BOOL Insert_Data(List* ls);
//删除好友
BOOL Delete_Num(List* ls);
//查找好友
BOOL Find_Data(List* ls);
//打印链表
void Display(List* ls);
//销毁链表
void Destroy(List *ls);
#endif //_ADDRESS_BOOK
main.c
#include "Address_Book.h"
#include <stdio.h>
int main()
{
int x;
//创建链表
List *ls = CreatList();
if(NULL == ls)
{
printf("创建失败\n");
}
else
{
printf("创建成功\n");
}
int i = 1;
while(i = 1)
{
system("clear");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("|请选择您要进行的操作: |\n");
printf("|1:添加好友信息 |\n");
printf("|2:列表好友信息 |\n");
printf("|3:搜索好友 |\n");
printf("|4:删除好友 |\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~\n");
scanf("%d",&x);
switch(x)
{
case 1:
{
//插入数据,尾插
Insert_Data(ls);
break;
}
case 2:
{
Display(ls);
break;
}
case 3:
{
Find_Data(ls);
break;
}
case 4:
{
//删除好友
Delete_Num(ls);
break;
}
case 0:
{
//结束程序
i = 0;
break;
}
default:
{
printf("请输入正确的值\n");
break;
}
}
}
return 0;
}
Address_Book.c
#include "Address_Book.h"
#include <stdio.h>
#include <stdlib.h>
//创建链表
List *CreatList()
{
List *ls = (List *)malloc(sizeof(List)/sizeof(char));
if(NULL == ls)
return NULL;
ls->head = (Address_Book *)malloc(sizeof(Address_Book)/sizeof(char));
if(NULL == ls->head)
{
free(ls);
return NULL;
}
ls->head->next = NULL;
return ls;
}
BOOL Insert_Data(List* ls)
{
if(NULL == ls)
{
return ERROR;
}
Address_Book *ab = (Address_Book *)malloc(sizeof(Address_Book)/sizeof(char));
if(NULL == ab)
{
return ERROR;
}
printf("新添加的好友ID为:");
scanf("%d",&ab->id);
printf("您要添加的好友名字为:");
scanf("%s",ab->name);
printf("您要添加的好友手机号码为:");
scanf("%ld",&ab->phone);
printf("您要添加的好友的家庭住址为:");
scanf("%s",ab->address);
printf("您要添加的好友公司电话号码为:");
scanf("%ld",&ab->tel);
ab->next = NULL;
Address_Book *tmp = ls->head;
while(tmp->next)
{
tmp = tmp->next;
}
tmp->next = ab;
return TRUE;
}
//查找好友信息
BOOL Find_Data(List* ls)
{
if(NULL == ls)
{
return ERROR;
}
char num[20];
printf("您要查找的好友姓名为:");
scanf("%s",num);
Address_Book *temp = ls->head->next;
while (temp != NULL)
{
if(strcmp(num,temp->name) == 0)
{
printf("id为:%-4d",temp->id);
printf("姓名为:%-4s",temp->name);
printf("手机号为:%-4ld",temp->phone);
printf("地址为:%-4s",temp->address);
printf("电话为:%-4ld\n",temp->tel);
}
temp = temp->next;
}
}
//删除好友信息
BOOL Delete_Num(List* ls)
{
if(NULL == ls)
{
return ERROR;
}
char num[20];
printf("您要删除的好友姓名为;");
scanf("%s",num);
Address_Book *tmp = ls->head;
while (tmp->next != NULL)
{
if(strcmp(num,tmp->next->name) == 0)
{
Address_Book *p = tmp->next;
tmp->next = p->next;
free(p);
break;
}
tmp = tmp->next;
}
return TRUE;
}
//打印或者显示链表
void Display(List* ls)
{
if(NULL == ls)
{
return ;
}
Address_Book *tmp = ls->head->next; //第一个节点
while(tmp)
{
printf("id为:%-4d",tmp->id);
printf("姓名为:%-4s",tmp->name);
printf("手机号为:%-4ld",tmp->phone);
printf("地址为:%-4s",tmp->address);
printf("电话为:%-4ld\n",tmp->tel);
tmp = tmp->next;
}
printf ("\n");
}
//销毁链表
void Destroy(List *ls)
{
if(NULL == ls)
return ;
free(ls->head);
free(ls);
}