#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define OK 0
#define ERROR -1
#define MALLOC_ERROR -2
typedef struct node
{
long ID; //ID号
char Name[20]; //姓名
char person_phone[13]; //个人电话号码
char Address[20]; //地址
char company_phone[13]; //公司电话
struct node *next; //结点指针
}Node;
typedef Node *PNode; // 重命名结点指针类型
void jiemian()
{
system("clear");
printf("*************************************************\n");
printf("******************欢迎进入通讯录系统*************\n");
printf("*************************************************\n");
printf("* 1. 添加好友 *\n");
printf("* 2. 显示好友 *\n");
printf("* 3. 查询好友 *\n");
printf("* 4. 删除好友 *\n");
printf("* 0. 退出程序 *\n");
printf("*************************************************\n");
printf("*********************************制作人:李东****\n");
printf("*************************************************\n");
}
// 尾插法创建链表(添加好友)
int Create_List_Tail(PNode h, long ID, char *Name, char *person_phone, char *Address, char *company_phone)
{
PNode node = (PNode)malloc(sizeof(Node)/sizeof(char));
if (node == NULL)
{
return MALLOC_ERROR;
}
if (h == NULL) // 空表
{
return ERROR;
}
system("clear");
printf("创建用户\n");
printf ("请输入ID: ");
scanf ("%ld", &node->ID);
printf ("请输入姓名: ");
scanf ("%s", node->Name);
printf ("请输入手机号码: ");
scanf ("%s", node->person_phone);
printf ("请输入家庭地址: ");
scanf ("%s", node->Address);
printf ("请输入公司电话: ");
scanf ("%s", node->company_phone);
node->next = NULL;
PNode temp;
temp = h;
// 找最后一个结点
while (temp->next)
{
temp = temp->next;
}
temp->next = node;
return OK;
}
//显示好友
void print(PNode h)
{
if (h == NULL)
{
return;
}
PNode temp = h->next;
while (temp)
{
printf ("ID: %ld 姓名: %s 手机号码: %s 家庭地址: %s 公司电话: %s\n",temp->ID, temp->Name, temp->person_phone, temp->Address, temp->company_phone);
temp = temp->next;
}
printf ("\n");
}
//查找好友
void Search(PNode h, char *Name)
{
if(h == NULL)
{
return ;
}
PNode p;
int flag = 1;
for (p = h->next; p != NULL; p = p->next)
{
if(strcmp(p->Name,Name) == 0)
{
flag = 0;
printf ("好友信息: ID: %ld 姓名: %s 手机号码: %s 家庭地址: %s 公司电话: %s\n", p->ID, p->Name, p->person_phone, p->Address, p->company_phone);
}
}
if (flag)
{
printf ("您的通讯录没有该好友!\n");
}
printf("\n");
return ;
}
//删除好友
void Delete(PNode head, char *Name)
{
PNode p = head;
PNode q = NULL;
while (p != NULL && (p->next) != NULL)
{
q = p->next;
if (q != NULL && strcmp(q->Name,Name) == 0)
{
p->next = q->next;
free(q);
printf ("该好友已成功删除\n");
}
else if (q->next == NULL && strcmp(q->Name,Name) != 0)
{
printf ("您的通讯录没有该好友!\n");
}
p = p->next;
}
}
int main()
{
int back;
int Function;
long ID; //ID号
char Name[20]; //姓名
char person_phone[13]; //个人电话号码
char Address[20]; //地址
char company_phone[13]; //公司电话
PNode head_node = (PNode)malloc(sizeof(Node)/sizeof(char));
if(head_node == NULL)
{
return MALLOC_ERROR;
}
head_node->next = NULL;
while(1)
{
jiemian();
scanf("%d",&Function);
switch (Function)
{
case 1:
{
Function = 0;
Create_List_Tail(head_node, ID, Name, person_phone, Address, company_phone);
printf("添加成功!\n");
printf ("返回请输入任意键:");
scanf ("%d",&back);
break;
}
case 2:
{
printf("*****************当前好友信息**********************\n");
print(head_node);
Function = 0;
printf ("返回请输入任意键:");
scanf ("%d",&back);
break;
}
case 3:
{
printf("请输入你要查找好友的姓名:");
scanf("%s",Name);
printf("\n");
Search(head_node,Name);
printf ("返回请输入任意键:");
scanf ("%d",&back);
break;
}
case 4:
{
printf("请输入你要删除好友的姓名:");
scanf("%s",Name);
printf("\n");
Delete(head_node,Name);
printf ("返回请输入任意键:");
scanf ("%d",&back);
break;
}
case 0:
{
Function = 0;
system ("clear");
exit(0);
}
default:
{
Function = 0;
printf("对不起!您的输入有误!请重新输入:");
scanf("%d",&Function);
break;
}
}
}
}