久经绞尽脑汁,终于小有成就!现发上来给评点评点!虽然代码不怎么同,但效果应该没什么区别!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
typedef struct NODE
{
char name[10];
char sxe;
char tel[15];
char email[20];
char adrr[20];
struct NODE *next;
}node,*nod;
nod creater(nod l)/*创建*/
{
nod p,p1;
int x;
char a;
x=1;
l=(nod)malloc(sizeof(node));
/*开辟头结点*/
p1=l;
printf("\n请输入信息:\n");
while(x)
{
{
p=(nod)malloc(sizeof(node)); /*开辟空间*/
printf("\n姓名:");
/*赋值*/
scanf("%s",p->name);
printf("性别:");
p->sxe=getche();
printf("\n电话:");
scanf("%s",p->tel);
printf("E-mail:");
scanf("%s",p->email);
printf("地址:");
scanf("%s",p->adrr);
p1->next=p;
/*连接*/
p1=p;
/*p1移动*/
}
printf("\n是否继续录入?(Y/N)注意大写:");/*判断*/
a=getche();
if(a=='N') x=0;
else x=1;
}
p1->next=NULL;
return l;
}
void print(nod l)/*输出*/
{
nod p;
p=l->next;
printf("\n\n
通讯者信息
\n");
printf("\n************************************************************");
printf("\n姓名:
性别:
电话:
E-mail:
地址:");
while(p!=NULL)/*搜索*/
{
printf("\n%s
%c
%s
%s
%s",p->name,p->sxe,p->tel,p->email,p->adrr);
p=p->next;
}
printf("\n************************************************************");
}
void list_find(nod l)/*查找*/
{
nod p;
char a,name1[20];
int x,n;
char tel1[15];
x=1;
while(x)
{
p=l->next;
printf("\n姓名查找:1");
printf("\n电话查找:2");
printf("\n请选择:");
scanf("%d",&n);
switch(n)
{
case 1:
{
printf("\n请输入查找者姓名:");
scanf("%s",name1);
while(p!=NULL&&strcmp(name1,p->name)!=0) /*比较和判断*/
p=p->next;
break;
}
case 2:
{
printf("\n请输入查找者电话:");
scanf("%s",tel1);
while(p!=NULL&&strcmp(tel1,p->tel)!=0)
/*比较和判断*/
p=p->next;
break;
}
}
if(p==NULL)printf("\n查找错误!");
else printf("\n姓名:%s
性别:%c
电话:%s
E-mail:%s
地址:%s",p->name,p->sxe,p->tel,p->email,p->adrr);
printf("\n是否继续查找?(Y/N)注意大写:");
a=getche();
if(a=='N') x=0;
else x=1;
}
}
void set_insert(nod l)/*插入*/
{
nod u,p=l;
char a;
int x;
x=1;
printf("\n请输入信息:");
while(p->next!=NULL)
/*搜索至表尾*/
p=p->next;
while(x)
{
u=(nod)malloc(sizeof(node));
printf("\n姓名:");
scanf("%s",u->name);
printf("性别:");
u->sxe=getche();
printf("\n电话:");
scanf("%s",u->tel);
printf("E-mail:");
scanf("%s",u->email);
printf("地址:");
scanf("%s",u->adrr);
u->next=p->next; /*连接*/
p->next=u;
printf("\n是否继续插入?(Y/N)注意大写:");
a=getche();
if(a=='N') x=0;
else x=1;
}
}
void list_delete(nod l) /*删除*/
{
nod u,p=l;
char a,name1[10];
int x;
x=1;
while(x)
{
printf("请输入删除者姓名:");
scanf("%s",name1);
while(p->next!=NULL&&strcmp(name1,p->next->name)!=0)
/*比较和判断*/
p=p->next;
if(p->next==NULL)
printf("删除错误!");
else
{
u=p->next;
p->next=u->next;
free(u);
/**/
}
printf("\n是否继续删除?(Y/N)注意大写:");
a=getche();
if(a=='N') x=0;
else x=1;
}
}
void preserve(nod l)/*保存*/
{
FILE *fp;
nod p;
p=l->next;
if((fp=fopen("数据.txt","w"))==NULL)
printf("\n错误!");
else
{
while(p!=NULL)
{
fprintf(fp,"%s
%c
%s
%s
%s",p->name,p->sxe,p->tel,p->email,p->adrr);
p=p->next;
}
fclose(fp);
}
}
void main()
{
nod L=NULL,q=NULL;
int n;
system( "cls ");
printf("\n
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆");
printf("\n
☆
欢迎使用本程序
☆
");
printf("\n
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
printf("\n
【1】: 新建通讯录\n");
printf("\n
【2】: 通讯者的插入\n");
printf("\n
【3】: 通讯者的删除\n");
printf("\n
【4】: 通讯者的查询\n");
printf("\n
【5】: 通讯录信息的输出\n");
printf("\n
【6】: 通讯录的保存\n");
printf("\n
【0】: 退出\n");
while(1)
{
printf("\n\n输入相应数字选择功能:");
scanf("%d",&n);
if(n==0)break;
switch(n)
/*选择*/
{
case 1:
{
q=creater(L);
break;
}
case 2:
{
if(q==NULL)q=creater(L);
/* 不当选择时*/
else set_insert(q);
break;
}
case 3:
{
if(q==NULL)printf("删除错误!");
else list_delete(q);
break;
}
case 4:
{
if(q==NULL)printf("无法查找!");
else list_find(q);
break;
}
case 5:
{
if(q==NULL)printf("没有数据!");
else print(q);
break;
}
case 6:
{
if(q==NULL)printf("无法保存!");
else preserve(q);
break;
}
default:printf("\n选择错误(重选):");/*不在选择范围时*/
printf("\n
【1】: 新建通讯录\n");
printf("\n
【2】: 通讯者的插入\n");
printf("\n
【3】: 通讯者的删除\n");
printf("\n
【4】: 通讯者的查询\n");
printf("\n
【5】: 通讯录信息的输出\n");
printf("\n
【6】: 通讯录的保存\n");
printf("\n
【0】: 退出\n");
}
}
}