/********************通讯录应用程序简介************************************
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); //关闭文件
}。
全部