#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SUCCESS 10000
#define FAILURE 10001
#define SIZE 100
typedef int ElemType;
/*struct Info
{
char name[32]; // char name; 通讯录 结构体
char tel[32]; //电话
char home[64]; // 家庭住址
char htel[32]; // 住宅电话
ElemType age; // 年龄
ElemType No; // 编号
};
typedef struct Info info;/
struct Node //定义链表 (节点)结构体
{
char name[32]; // char *name; 通讯录 结构体
char tel[32]; //电话
char home[64]; // 家庭住址
char htel[32]; // 住宅电话
ElemType age; // 年龄
ElemType No; // 数据域(个人信息结构体指针)
struct Node *next; // 指针域 指向下一个节点也就是下一个结构体
};
typedef struct Node Link;
typedef Link *pLink; //指向结构体节点的指针
int InitLink(pLink *l) //初始化
{
if(NULL == l)
{
return FAILURE;
}
*l =(pLink)malloc(sizeof(Link)*1);
if(NULL == (*l))
{
return FAILURE;
}
(*l)->next = NULL;
printf("Init Success! \n");
sleep(1);
return SUCCESS;
}
void welcome()
{
system(“clear”);
printf("\n\n\n");
printf("\t\t***欢 *********************阿\n");
printf("\t\t***迎 *彬\n");
printf("\t\t您 **********欧力给通\n");
printf("\t\t***使 *****************讯\n");
printf("\t\t用 ********************录\n");
sleep(1);
} // 通讯录打印界面
void menu()
{
system(“clear”);
printf("\n\n\n");
printf("\t\t******************************************\n");
printf("\t\t******************************************\n");
printf("\t\t 1、增加信息 2、修改信息\n");
printf("\t\t 3、查找信息 4、删除信息\n");
printf("\t\t 5、显示信息 6、退出\n");
printf("\t\t******************************************\n");
printf("\t\t******************************************\n");
}
int SaveInfo(int argc,)
{
}
int addinfo(pLink i) // i 是个人信息结构体的指针
{
pLink q = i; //定义另一个头结点的指针q
char name[32] = {0};
char tel[32] = {0};
char home[32] = {0};
char htel[32] = {0};
int age = 0;
printf("请输入姓名,号码,年龄,住址,住宅电话:\n");
scanf("%s%s%d%s%s", name,tel,&age,home,htel);
while(strlen(tel) != 11)
{
strcpy(tel,"\0");
printf("您输入的号码不合法,请重新输入:\n");
scanf("%s",tel);
} //判断输入的号码长度是否合法
while(q->next != NULL)
{
if(strcmp(q->next->tel,tel)==0)
{
strcpy(tel,"\0");
printf("输入号码与%s相同,请重新输入:\n",q->next->name);
scanf("%s",tel);
}
q = q->next;
} //判断输入的号码是否重复
q = i; //重新指向头指针
while(q->next != NULL ) //根据名字确定指针的位置
{
if(strcmp(q->next->name,name)>0)
{
break;
}
q = q->next;
}
pLink n = (pLink)malloc(sizeof(Link) * 1);
if(NULL == n)
{
return FAILURE;
}
strcpy(n->name, name);
strcpy(n->tel, tel);
n->age = age;
strcpy(n->home, home);
strcpy(n->htel, htel); //写入 n 里面
n->next = q->next;
q->next = n;
sleep(1);
return SUCCESS;
}
int modifyinfo(pLink i) //修改信息
{
pLink q = i; //定义另一个头结点的指针q
char Newname[32] = {0};
char Newtel[32] = {0};
int Newage = 0;
char Newhome[32] = {0};
char Newhtel[32] = {0};
char Tel[32] = {0}; //输入的需要查找的号码信息
printf("请输入需要修改人的电话: \n");
scanf("%s",Tel);
while(strlen(Tel) != 11)
{
strcpy(Tel,"\0");
printf("您输入的号码不合法,请重新输入号码:\n");
scanf("%s",Tel);
} //判断输入的号码长度是否合法
while(q->next != NULL )
{
if(0 == strcmp(q->next->tel,Tel))
{
break;
}
q = q->next;
}
if(q->next == NULL)
{
printf("查无此人,请重新输入指令! \n");
printf("Press any key to continue! \n");
getchar();
getchar();
return FAILURE;
}
printf("请输入新的姓名,号码,年龄,住址,住宅电话:\n");
scanf("%s%s%d%s%s", Newname,Newtel,&Newage,Newhome,Newhtel);
while(strlen(Tel) != 11)
{
strcpy(Tel,"\0");
printf("您输入的号码不合法,请重新输入:\n");
scanf("%s",Tel);
}
q=q->next;
strcpy(q->name, Newname);
strcpy(q->tel, Newtel);
q->age = Newage;
strcpy(q->home, Newhome);
strcpy(q->htel, Newhtel);
printf("修改成功!\n");
sleep(2);
return SUCCESS;
}
int searchinfo(pLink i)
{
pLink q = i; //定义另一个头结点的指针q
char Tel[32] = {0}; //输入的需要查找的号码信息
printf("请输入需要查找人的电话: \n");
scanf("%s",Tel);
while(strlen(Tel) != 11)
{
strcpy(Tel,"\0");
printf("您输入的号码不合法,请重新输入号码:\n");
scanf("%s",Tel);
}
while(q->next != NULL )
{
if(0 == strcmp(q->next->tel,Tel))
{
break;
}
q = q->next;
}
if(q->next == NULL)
{
printf("查无此人,请重新输入指令! \n");
printf("Press any key to continue! \n");
getchar();
getchar();
return FAILURE;
} //判断输入的号码长度是否合法
printf("%s%s%d%s%s\n",q->next->name,q->next->tel,q->next->age,q->next->home,q->next->htel);
return SUCCESS;
}
int deleteinfo(pLink i)
{
pLink q = i;
char Tel[32] = {0};
printf("请输入要删除的联系人号码: \n");
scanf("%s",Tel);
while(strlen(Tel) != 11)
{
strcpy(Tel,"\0");
printf("您输入的号码不合法,请重新输入号码:\n");
scanf("%s",Tel);
}
while(q->next != NULL )
{
if(0 == strcmp(q->next->tel,Tel))
{
break;
}
q = q->next;
}
if(q->next == NULL)
{
printf("查无此人,请重新输入指令! \n");
printf("Press any key to continue! \n");
getchar();
getchar();
return FAILURE;
}
//判断输入的号码长度是否合法
printf("Information of %s has been deleted!\n,p->next->name" );
pLink n = q->next;
q->next = q->next->next;
free(n);
return SUCCESS;
}
int showinfo(pLink i)
{
pLink q = i->next;
while(NULL != q)
{
printf("name:%s Tel:%s Age:%d Addr:%s Htel:%s\n",q->name,q->tel,q->age,q->home,q->htel);
q = q->next;
}
printf("Press any key to continue!");
getchar();
getchar();
return SUCCESS;
}
int main()
{
int choice,ret;
pLink link; //设置了一个头结点指针
welcome();
ret = InitLink(&link); //初始化就是设置一个头结点link成为了头结点
if(SUCCESS == ret)
{
while (1)
{
menu();
scanf("%d", &choice);
switch(choice)
{
case 1:
ret = addinfo(link);
if(SUCCESS == ret)
{
printf("Add Suuccess! \n");
}
else
{
printf("Add Failure! \n");
}
sleep(2);
break;
case 2:
ret = modifyinfo(link);
if(SUCCESS == ret)
{
printf("Modify Suuccess! \n");
}
else
{
printf("ModifyFailure! \n");
}
sleep(2);
break;
case 3:
ret = searchinfo(link);
if(SUCCESS == ret)
{
printf("Dearch Suuccess! \n");
}
else
{
printf("DearchFailure! \n");
}
sleep(2);
break;
case 4:
ret = deleteinfo(link);
if(SUCCESS == ret)
{
printf("Delete Suuccess! \n");
}
else
{
printf("Delete Failure! \n");
}
break;
case 5:
ret = showinfo(link);
if(SUCCESS == ret)
{
printf("Show Over! \n");
}
else
{
printf("Show Failure! \n");
}
sleep(2);
break;
case 6:
exit(0);
break; //退出进程
default:
printf("Error!\n");
}
}
}
else
{
printf("Init Failure!\n");
}
return 0;
}