使用双向链表实现通讯录,实现添加功能、删除功能、查询功能、修改功能、显示功能。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct linkman
{
char name[10];
char Tel[20];
struct linkman *prev;
struct linkman *next;
}linkman;
int Menu(void);//主菜单
int menu2(void);
void InitList(struct linkman **head);//初始化链表
void Readfile(linkman *head);//从文件中读数据
void Writefile(linkman *head);//往文件中写数据
void Add(struct linkman *head);
void Add_one(struct linkman *head,char *name,char *Tel);
void Delete(struct linkman *head);
linkman *Search(struct linkman *head,char message[]);
linkman *Search_name(struct linkman *head,char message[]);
linkman *Search_tel(struct linkman *head,char message[]);
void GoSearch(struct linkman *head,struct linkman *p);
void Change(struct linkman *head);
void Print(struct linkman *head);//输出整个通讯录
void print(struct linkman *p);//输出查询出的单个联系人的信息
void Shifang(struct linkman *head);//释放所有节点
void main()
{
struct linkman *address_list=NULL,*p=NULL;
InitList(&address_list);
Readfile(address_list);
int num;
char message[20];
while(1)
{
num=Menu();
switch(num)
{
case 1:Add(address_list);
printf("\n");
break;
case 2:Delete(address_list);
printf("\n");
break;
case 3:getchar();//把上一个输入的换行读入缓冲区,避免message读入
printf("请输入要查找的联系人姓名或电话:");
scanf("%s",message);
p=Search(address_list,message);
if(p)
{
print(p);
GoSearch(address_list,p);
}
else
printf("此联系人不存在!\n");
printf("\n");
break;
case 4:Change(address_list);
printf("\n");
break;
case 5:Print(address_list);
printf("\n");
break;