c语言通讯录排序源代码,我现在需要一个通讯录的c语言源代码,大家可以帮帮我吗????...

/********************通讯录应用程序简介************************************

1、设一个通信录由以下几项数据信息构成:

数据项 类型

姓名 字符串

地址 字符串

邮政编码 字符串

电话号码 字符串

2。

实现功能:

1。存取、

2。显示、

3。删除记录、

4。查询记录等功能。

2、要求:界面友好,易于操作

***********************************************************************************/

#include

#include

#include

struct Telephone

{

char name[20];

char addrass[20];

char zip[20];

char telephone[20];

struct Telephone *next;

};

typedef struct Telephone TEL;

TEL *head=NULL;

void showmenu(); //菜单

void Appenditem(); //添加条目

void print(); //输出条目

void Finditem1(); //查找条目( 按姓名 )

void Removeitem(); //删除信息

void Saveandfree(); //保存到文件

void Open(); //打开文件

void main()

{

char ch;

Open(); //打开文件

while(1)

{

showmenu(); //显示菜单

scanf(" %c",&ch);

switch(ch)

{

case '1':Appenditem(); //添加条目

break;

case '2':print(); //输出条目

break;

case '3':Finditem1(); //查找条目1。

按姓名

break;

case '4': Removeitem(); //删除信息

print(); //输出删除后的结果

break;

case '0':Saveandfree(); //保存并释放内存

exit(0); //退出

break;

default:

printf("选择错误!");

break;

}

}

}

//菜单

void showmenu()

{

printf("

*****************通讯录系统*****************

");

printf("1。

添加条目。

");

printf("2。输出输出

");

printf("3。按姓名查询

");

printf("4。删除条目

");

printf("0。

保存并退出!

");

printf("*************************************************

");

printf("请选择:

");

}

//添加条目

void Appenditem()

{

TEL *p1=NULL,*p2=NULL;

p1=(TEL *)malloc(sizeof(TEL)); //申请结点

printf("输入姓名:

"); //添加信息

scanf("%s",p1->name);

printf("输入地址:

");

scanf("%s",p1->addrass);

printf("输入邮编:

");

scanf("%s",p1->zip);

printf("输入电话:

");

scanf("%s",p1->telephone);

p1->next=NULL; //保存到链表

if(head==NULL)

{

head=(TEL *)malloc(sizeof(TEL)); //申请空间

head->next=p1;

}

else

{

for(p2=head;p2->next!=NULL;p2=p2->next); //找到结点尾

p2->next=p1;

}

printf("此信息已添加!");

}

//输出学生信息

void print()

{

TEL *p=NULL;

if(head==NULL)

{

printf("此通讯录中无记录,请输入记录后在使用本功能!

");

return;

}

printf("**************通讯录系统*********************

"); //输出信息

printf("姓名地址邮编电话

");

for(p=head->next;p!=NULL;p=p->next)

printf("%s%s%s%s

",p->name,p->addrass,p->zip,p->telephone);

}

//查找信息1。

按姓名

void Finditem1()

{

TEL *p;

char findname[20];

printf("请输入要查找的姓名:

");

scanf("%s",findname);

printf("**************通讯录系统*********************

");

printf("姓名地址邮编电话

");

for(p=head->next;p!=NULL;p=p->next)

{

if(strcmp(p->name,findname)==0)

printf("%s%s%s%s

",p->name,p->addrass,p->zip,p->telephone);

}

}

//删除信息

void Removeitem()

{

char findname[20]; //先查找 后删除

TEL *p = head->next, *pr = head->next;

printf("请输入要删除的姓名:

");

scanf(" %s",findname);

if (head->next == NULL)

{

printf("无此节点!

");

return;

}

while ((strcmp(p->name,findname)!=0 )&& p->next != NULL)

{

pr =p;

p =p->next;

}

if (strcmp(findname, p->name)==0) //输出删除信息

{

printf("%s%s%s%s

",p->next->name,p->next->addrass,

p->next->zip,p->next->telephone);

if (p == head->next)

head->next = p->next;

else

pr->next = p->next;

free(p);

}

printf("此信息已删除!");

}

//保存链表信息到文件并释放内存空间

void Saveandfree()

{

TEL *p=NULL;

FILE *fp;

char *Book="books。

txt";

if(head==NULL)

{

printf("

记录为空!

");

return;

}

else

p=head->next;

if((fp=fopen(Book,"wb "))==NULL)

{

printf("

打不开文件!

");

return;

}

while(p!=NULL) //保存信息

{

fwrite(p,sizeof(TEL),1,fp);

p=p->next;

}

printf("保存完毕!");

fclose(fp);

//*****释放链表空间*****

for(;head->next!=NULL;)

{

p=head->next;

head->next=head->next->next;

free(p);

}

free(head);

}

//文件信息输出到链表

void Open()

{

FILE *fp;

TEL *p1=NULL,*p2=NULL,*temp=NULL;

if((fp=fopen("books。

txt","rb "))==NULL)

{

printf("

****************这是一个新的通讯录管理系统******************

");

return;

}

head=(TEL *)malloc(sizeof(TEL));

head->next=NULL;

temp=p2=head;

while(! feof(fp)) //循环读取

{

p1=(TEL *)malloc(sizeof(TEL));

temp=p2;

p2->next=p1;

p2=p1;

fread(p1,sizeof(TEL),1,fp);

}

temp->next=NULL;

fclose(fp); //关闭文件

}。

全部

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值