用c语言实现简易通讯录,代码初稿如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#define LEN sizeof(struct information)
typedef struct information
{
char name[20];
char id[20];
char phone[20];
char home[20];
struct information *next;
}INFO;
/*face()用来显示通讯录的基本功能选择。*/
void face()
{
printf("****************************\n");
printf("1:显示通讯录已有信息。\n");
printf("2:添加通讯录人员信息。\n");
printf("3:删除通讯录人员信息。\n");
printf("4:修改通讯录人员信息。\n");
printf("5:查找通讯录人员信息。\n");
printf("9:清屏。\n");
printf("0:退出通讯录。\n");
printf("****************************\n");
}
/*print()用来显示通讯录已有信息。*/
INFO *print(INFO *head)
{
INFO *p;
p = head;
system("clear");
if(head != NULL)
{
printf("已有成员如下:\n");
while(p != NULL)
{
printf("姓名:%s\n",p->name);
printf("ID:%s\n",p->id);
printf("电话号码:%s\n",p->phone);
printf("家庭住址:%s\n\n",p->home);
p = p->next;
}
}
else
{
printf("通讯录目前无信息!\n\n");
}
return head;
}
/*add()添加通讯录信息,将信息存入p0节点*/
INFO *add(INFO *head)
{
INFO *p0 = NULL, *p1, *p2;
p0 = (INFO *)malloc(LEN);
p1 = head;
p2 = head;
printf("请输入你需要添加的成员信息:\n");
printf("****************************\n");
printf("姓名:");
scanf("%s",p0->name);
printf("ID:");
scanf("%s",p0->id);
printf("电话号码:");
scanf("%s",p0->phone);
printf("家庭住址:");
scanf("%s",p0->home);
/*再将节点p0存入链表*/
/*
if(head == NULL)
{
head = p0;
head->next = NULL;
return head;
}
else
{
p2->next = p1;
p2 = p1;
}while(p1->next != NULL);
p1->next = p0;
p0->next = NULL;
return head;
*/
if(head==NULL)
{
head=p0;
p0->next=NULL;
}
else
{
while((strcmp(p0->name,p1->name)>0)&&(p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if((strcmp(p0->name,p1->name))<=0)
{
if(head==p1)
head=p0;
else
p2->next=p0;
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
}
printf("恭喜你!!成功添加了联系人信息!!");
printf("\n************************************************************\n");
printf("\n\n");
}
return(head);
}
/*delete()删除通讯录人员信息。*/
INFO *delete(INFO *head)
{
INFO *p1, *p2;
char name[10];
p1 = head;
p2 = head;
printf("请以姓名为关键字,输入需要删除的成员信息:\n");
printf("****************************\n");
scanf("%s",name);
if(head != NULL)
{
while(p1 != NULL)
{
if(0 == strcmp(p1->name,name))
{
if(head != p1)
{
p2->next = p1->next;
}
else
{
head = p1->next;
}
free(p1);
printf("删除成功。\n");
return head;
}
else
{
p2 = p1;
p2->next = p1;
}
}
printf("查无此人。\n");
}
else
{
printf("目前通讯录为空。\n");
return head;
}
}
/*rev()修改通讯录人员信息。*/
INFO *revise(INFO *head)
{
INFO *p1, *p2;
char name[10];
p1 = head;
p2 = head;
printf("请以姓名为关键字,输入需要修改的成员信息:\n");
printf("****************************\n");
scanf("%s",name);
if(head != NULL)
{
while(p1 != NULL)
{
if(0 == strcmp(p1->name,name))
{
printf("请根据提示修改成员信息:\n");
printf("将姓名%s修改为:",p1->name);
scanf("%s",p1->name);
printf("将ID%s修改为:",p1->id);
scanf("%s",p1->id);
printf("将电话号码%s修改为:",p1->phone);
scanf("%s",p1->phone);
printf("将家庭住址%s修改为:",p1->home);
scanf("%s",p1->home);
printf("修改成功。\n");
return head;
}
else
{
p2 = p1;
p2->next = p1;
}
}
printf("查无此人。\n");
}
else
{
printf("目前通讯录为空。\n");
}
}
/*search()查找通讯录人员信息。*/
INFO *search(INFO *head)
{
INFO *p1, *p2;
char name[10];
p1 = head;
p2 = head;
printf("请以姓名为关键字,输入需要查找的成员信息:\n");
printf("****************************\n");
scanf("%s",name);
if(head != NULL)
{
while(p1 != NULL)
{
if(0 == strcmp(p1->name,name))
{
printf("以下是此人信息:\n");
printf("将姓名%s修改为:",p1->name);
printf("将ID%s修改为:",p1->id);
printf("将电话号码%s修改为:",p1->phone);
printf("将家庭住址%s修改为:",p1->home);
printf("\n");
return head;
}
else
{
p2 = p1;
p2->next = p1;
}
}
printf("查无此人。\n");
}
else
{
printf("目前通讯录为空。\n");
}
}
int main()
{
int choose;
INFO *head = NULL;
head = (INFO *)malloc(LEN);
system("clear");
while(1)
{
printf("请输入你需要进行的操作号码:\n");
face();
scanf("%d",&choose);
switch(choose)
{
case 0:return 0;
case 1:head = print(head);break;
case 2:head = add(head);break;
case 3:head = delete(head);break;
case 4:head = revise(head);break;
case 5:head = search(head);break;
case 9:system("clear");break;
default :printf("输入错误!\n");break;
}
}
}