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;
}