/**************************************
电子通讯录:
内容:序号,姓名,电话,住址。
功能:添加好友、删除好友、清空联系人、好友排序、搜索好友、显示所有联系人。
添加好友:如果重名,可选择覆盖或新建。
好友排序:可选择按姓氏正序排或逆序排。
删除好友:若遇到重名好友,则按序号删除。
****************************************/
#include<stdio.h>
#include<stdlib.h>
typedef structPeople{
int ID; //序号
char name[10]; //姓名
char phone[20]; //号码
char add[20]; //住址
struct People *next;
}List;
/********主界面**********/
int menu()
{
int choice;
printf("\n");
printf("0----添加好友 1----显示好友列表 2----搜索好友 3----删除好友\n");
printf("4----好友正排序 5----好友逆排序(无)6----清空联系人 7----退出\n");
scanf("%d",&choice);
return choice;
}
void Add(List*people)
{
List *p,*r;
r = people;
p = (List *)malloc(sizeof(List));
printf("请输入序号:\n");
scanf("%d",&p->ID);
printf("请输入姓名:\n");
scanf("%s",p->name);
printf("请输入电话:\n");
scanf("%s",p->phone);
printf("请输入地址:\n");
scanf("%s",p->add);
while(r->next != NULL)
{
r = r->next;
}
r->next = p;
p->next = NULL;
printf("\n添加成功!\n");
}
//显示
void Display(List*people)
{
List *p;
p = people->next;
printf("好友列表:\n");
printf(" 序号 姓名 电话 住址\n ");
while(p != NULL)
{
printf("%d",p->ID);
printf("%11s ",p->name);
printf(" %s ",p->phone);
printf(" %s ",p->add);
p = p->next;
printf("\n");
}
}
void Search(List*people)
{
List *p;
char name[10]; //搜索人的姓名
printf("请输入要搜索人的姓名:\n");
p = people->next;
scanf("%s",name);
while(p != NULL)
{
if(strcmp(p->name,name) == 0)
{
printf("%d ",p->ID);
printf("%s ",p->name);
printf("%s ",p->phone);
printf("%s ",p->add);
printf("\n");
}
p = p->next;
}
}
void Delete(List*people)
{
char name[10];
List *p,*r;
int count = 0;
int ID;
p = people->next;
printf("\n请输入要删除人的姓名:\n");
scanf("%s",name);
while(p != NULL)
{
if(strcmp(p->name,name) == 0)
{
count++;
}
p = p->next;
}
if(count == 1)
{
p = people;
r = people->next;
while(r != NULL)
{
if(strcmp(r->name,name) == 0)
{
p->next = r->next;
break;
}
p = p->next;
r = r->next;
}
}
if(count > 1)
{
r = people->next;
while(r != NULL)
{
if(strcmp(r->name,name) == 0)
{
printf("%d %s %s%s\n",r->ID,r->name,r->phone,r->add);
}
r = r->next;
}
printf("请选择序号删除;\n");
scanf("%d",&ID);
p = people;
r = people->next;
while(r != NULL)
{
if(r->ID == ID)
{
p->next = r->next;
r = p->next;
}
else
{
p = p->next;
r = r->next;
}
}
}
}
void Sort(List*people)
{
List *pre,*p,*tail,*temp;
tail = NULL;
p = people->next;
while(tail != people->next->next)
{
pre = people;
p = people->next;
while(p->next != tail)
{
if(strcmp(p->name,p->next->name)== 1)
{
pre->next = p->next;
p->next =pre->next->next;
pre->next->next = p;
p = pre->next;
}
pre = pre->next;
p = p->next;
}
tail = p;
}
}
void Clear(List*people)
{
List *p,*q;
p = people->next;
while(p != NULL)
{
q = p->next;
free(p);
p = q;
}
people->next = NULL;
}
int main()
{
int choice;
List people;
people.next = NULL;
while(1)
{
choice = menu();
switch(choice)
{
case 0: Add(&people);
break;
case 1: Display(&people);
break;
case 2: Search(&people);
break;
case 3: Delete(&people);
break;
case 4: Sort(&people);
break;
case 5: ;
break;
case 6: Clear(&people);
break;
case 7:exit(1);
break;
default: printf("\n无效指令,请重新输入!\n");
break;
}
}
return 0;
}