📄 member.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct member
{
char name[20];
char phone[16];
char num[20];
struct member *next;
};
typedef struct member DATA;
void main()
{
void update_phone(DATA *head,char str[]);
void update_num(DATA *head,char str[]);
void update_name(DATA *head,char str[]);
DATA *creat(DATA *head);
DATA *add(DATA *head,DATA *insert);
int phone_search(DATA *head,char str[]);
int num_search(DATA *head,char str[]);
int name_search(DATA *head,char str[]);
DATA *phone_del(DATA *head,char str[]);
DATA *num_del(DATA *head,char str[]);
DATA *name_del(DATA *head,char str[]);
int a,b,c;
for(a=0;a<9;a++) printf(" *");
printf("\n 通 讯 录 \n");
for(b=0;b<9;b++) printf(" *");
FILE *f;
DATA *head=NULL;
DATA *p1;
if((f=fopen("data.dat","rb"))==NULL)
{
printf(" 已建立通讯录data.dat\n");
f=fopen("data.dat","ab+");
}
else
{
p1=(DATA*) malloc(sizeof(DATA));
while(fread(p1,sizeof(DATA),1,f)==1)
{
p1->next=head;
head=p1;
p1=(DATA*) malloc(sizeof(DATA));
}
}
fclose(f);
loop1:printf("\n\n * * * * * * * * *");
printf(" 请选择您所需要的操作,按回车结束\n");
printf("\n 1.查找");
printf("\n 2.添加");
printf("\n 3.删除");
printf("\n 4.修改");
printf("\n 5.全部输出");
printf("\n 0.结束\n");
scanf("%d",&c);
if(c==1) /*查找操作*/
{
loop2:int d,z;
printf("\n 1.按姓名查找\n");
printf(" 2.按学号查找\n");
printf(" 3.按电话号码查找\n");
printf(" 0.返回上一级\n");
scanf("%d",&d);
if(d!=0)
{
if(d==1)
{
char NA[20];
printf(" 请输入所要查找的姓名全拼,按回车结束\n");
scanf("%s",NA);
z=name_search(head,NA);
}
else if(d==2)
{
char NU[20];
printf(" 请输入所要查找的学号,按回车结束\n");
scanf("%s",NU);
z=num_search(head,NU);
}
else if(d==3)
{
char PH[16];
printf(" 请输入所要查找的电话号码,按回车结束\n");
scanf("%s",PH);
z=phone_search(head,PH);
}
else {printf(" 无效操作,\n");goto loop2;};
}
else goto loop1;
if(z!=1) printf(" 未查找到您要的资料\n");
printf(" 查找完成,按'0'返回\n");
int k;
scanf("%d",&k);
for(;k!=0;) {printf(" 无效操作,请重新输入\n");scanf("%d",&k);}
goto loop2;
}
if(c==2) /*添加操作*/
{
int e;
head=creat(head);
printf(" 添加完毕,按'0'返回\n");
scanf("%d",&e);
for(;e!=0;) {printf(" 无效操作,请重新输入\n");scanf("%d",&e);}
goto loop1;
}
if(c==3) /*删除操作*/
{
loop3:int f,m;
printf("\n 1.按姓名删除\n");
printf(" 2.按学号删除\n");
printf(" 3.按电话号码删除\n");
printf(" 0.返回上一级\n");
scanf("%d",&f);
if(f!=0)
{
if(f==1)
{
char NA[20];
printf(" 请输入所要删除的姓名,按回车结束\n");
scanf("%s",NA);
head=name_del(head,NA);
}
if(f==2)
{
char NU[20];
printf(" 请输入所要删除的学号,按回车结束\n");
scanf("%s",NU);
head=num_del(head,NU);
}
if(f==3)
{
char PH[16];
printf(" 请输入所要删除的电话号码,按回车结束\n");
scanf("%s",PH);
head=phone_del(head,PH);
}
printf(" 完成删除,按'0'返回\n");
scanf("%d",&m);
for(;m!=0;) {printf(" 无效操作,请重新输入\n");scanf("%d",&m);}
goto loop3;
}
if(f==0) goto loop1;
}
if(c==4) /*修改操作*/
{
loop4:int n,y;
printf("\n 1.按姓名查找修改\n");
printf(" 2.按学号查找修改\n");
printf(" 3.按电话号码查找修改\n");
printf(" 0.返回上一级\n");
scanf("%d",&n);
if(n!=0)
{
if(n==1)
{
l1:char NA[20];
printf(" 请输入所要修改资料的姓名的全拼,按回车结束\n");
scanf("%s",NA);
y=name_search(head,NA);
if(y==0) {printf(" 找不到您要删除的资料\n");goto loop4;}
else
{
printf(" 是否是您所要修改的资料? 1.是 2.不是");
int o;
scanf("%d",&o);
if(o==2) goto l1;
if(o==1)
{
int q;
update_name(head,NA);
printf(" 修改完成,按'0'返回\n");
scanf("%d",&q);
for(;q!=0;){printf(" 无效操作,请重新输入\n");scanf("%d",&q);}
goto loop4;
}
}
}
if(n==2)
{
l2:char NU[20];
printf(" 请输入所要修改资料的学号,按回车结束\n");
scanf("%s",NU);
y=num_search(head,NU);
if(y==0) {printf(" 找不到您要删除的资料\n");goto loop4;}
else
{
printf(" 是否是您所要修改的资料? 1.是 2.不是\n");
int r;
scanf("%d",&r);
if(r==2) goto l2;
if(r==1)
{
int s;
update_num(head,NU);
printf(" 修改完成,按'0'返回\n");
scanf("%d",&s);
for(;s!=0;) {printf(" 无效操作,请重新输入\n");scanf("%d",&s);}
goto loop4;
}
}
}
if(n==3)
{
l3:char PH[16];
printf(" 请输入所要修改资料的电话号码,按回车结束\n");
scanf("%s",PH);
y=phone_search(head,PH);
if(y==0) {printf(" 找不到您要删除的资料\n");goto loop4;}
else
{
printf(" 是否是您所要修改的资料? 1.是 2.不是");
int t;
scanf("%d",&t);
if(t==2) goto l3;
if(t==1)
{
int u;
update_phone(head,PH);
printf(" 修改完成,按'0'返回\n");
scanf("%d",&u);
for(;u!=0;) {printf(" 无效操作,请重新输入\n");scanf("%d",&u);}
goto loop4;
}
}
}
}
if(n==0) goto loop1;
else {printf(" 无效操作,请重新输入\n");goto loop4;}
}
if(c==5)
{
DATA *p3=head;
printf(" 全部资料如下:\n");
while(p3!=NULL)
{
printf("%15s %12s %11s\n",p3->name,p3->phone,p3->num);
p3=p3->next;
}
printf(" 输出结束,按'0'返回\n");
int v;
scanf("%d",&v);
for(;v!=0;){printf(" 无效操作,请重新输入\n");scanf("%d",&v);}
goto loop1;
}
if(c==0)
{
f=fopen("data.dat","wb");
while(head!=NULL)
{
fwrite(head,sizeof(DATA),1,f);
head=head->next;
}
printf(" 保存完毕!\n");
fclose(f);
}
else
{
printf(" 无效操作,请重新输入\n");
goto loop1;
}
exit(0);
}
DATA *name_del(DATA *head,char str[]) /* 定义通过name删除的函数name_del*/
{
DATA *p1,*p2;
if(head==NULL) {printf("未找到 %s !\n",str);return(head);}
p1=head;
while(strcmp(str,p1->name)!=0 && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(strcmp(str,p1->name)==0)
{
if(p1==head) head=p1->next;
else p2->next=p1->next;
printf("删除:%s\n",str);
}
else printf("未找到 %s !\n",str);
return(head);
}
DATA *num_del(DATA *head,char str[]) /*定义通过num删除的函数num_del*/
{
DATA *p1,*p2;
if(head==NULL) {printf("未找到 %s !\n",str);return(head);}
p1=head;
while(strcmp(str,p1->num)!=0 && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(strcmp(str,p1->num)==0)
{
if(p1==head) head=p1->next;
else p2->next=p1->next;
printf("删除:%s\n",str);
}
else printf("未找到 %s !\n",str);
return(head);
}
DATA *phone_del(DATA *head,char str[]) /*定义通过phone删除的函数phone_del*/
{
DATA *p1,*p2;
if(head==NULL) {printf("未找到 %s !\n",str);return(head);}
p1=head;
while(strcmp(str,p1->phone)!=0 && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(strcmp(str,p1->phone)==0)
{
if(p1==head) head=p1->next;
else p2->next=p1->next;
printf("删除:%s\n",str);
}
else printf("未找到 %s !\n",str);
return(head);
}
int name_search(DATA *head,char str[]) /*定义按name查找的函数name_search*/
{
DATA *p1;
if(head==NULL) return(0);
p1=head;
while(strcmp(str,p1->name)!=0 && p1->next!=NULL)
{
p1=p1->next;
}
if(strcmp(str,p1->name)==0)
{
printf(" 查找结果:\n");
printf("%15s %12s %11s\n",p1->name,p1->phone,p1->num);
return(1);
}
else return(0);
}
int num_search(DATA *head,char str[]) /*定义按num查找的函数num_search*/
{
DATA *p1,*p2;
if(head==NULL) return(0);
p1=head;
while(strcmp(str,p1->num)!=0 && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(strcmp(str,p1->num)==0)
{
printf(" 查找结果:\n");
printf("%15s %12s %11s\n",p1->name,p1->phone,p1->num);
return(1);
}
else return(0);
}
int phone_search(DATA *head,char str[]) /*定义按phone查找的函数phone_search*/
{
DATA *p1,*p2;
if(head==NULL) return(0);
p1=head;
while(strcmp(str,p1->phone)!=0 && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(strcmp(str,p1->phone)==0)
{
printf(" 查找结果:\n");
printf("%15s %12s %11s\n",p1->name,p1->phone,p1->num);
return(1);
}
else return(0);
}
DATA *creat(DATA *head) /*定义添加新结点的函数creat*/
{
DATA *p1;
p1=(DATA*) malloc(sizeof(DATA));
printf("\n请输入要添加人名的全拼\n");
scanf("%s",&p1->name);
printf("\n请输入要添加的学号\n");
scanf("%s",&p1->num);
printf("\n去输入要添加的电话号码\n");
scanf("%s",&p1->phone);
p1->next=head;
head=p1;
return(p1);
}
void update_name(DATA *head,char str[]) /*定义修改函数update*/
{
DATA *p1;
p1=head;
if(strcmp(str,p1->name)!=0 && p1->next!=NULL)
{
p1=p1->next;
}
if(strcmp(str,p1->name)==0)
{
printf(" 请输入新的姓名,按回车结束\n");
scanf("%s",p1->name);
printf(" 请输入新的学号,按回车结束\n");
scanf("%s",p1->num);
printf(" 请输入新的电话号码,按回车结束\n");
scanf("%s",p1->phone);
printf("%15s %12s %11s\n",p1->name,p1->phone,p1->num);
}
}
void update_num(DATA *head,char str[])
{
DATA *p1;
p1=head;
if(strcmp(str,p1->num)!=0 && p1->next!=NULL)
{
p1=p1->next;
}
if(strcmp(str,p1->num)==0)
{
printf(" 请输入新的姓名,按回车结束\n");
scanf("%s",p1->name);
printf(" 请输入新的学号,按回车结束\n");
scanf("%s",p1->num);
printf(" 请输入新的电话号码,按回车结束\n");
scanf("%s",p1->phone);
printf("%15s %12s %11s\n",p1->name,p1->phone,p1->num);
}
}
void update_phone(DATA *head,char str[])
{
DATA *p1;
p1=head;
if(strcmp(str,p1->phone)!=0 && p1->next!=NULL)
{
p1=p1->next;
}
if(strcmp(str,p1->phone)==0)
{
printf(" 请输入新的姓名,按回车结束\n");
scanf("%s",p1->name);
printf(" 请输入新的学号,按回车结束\n");
scanf("%s",p1->num);
printf(" 请输入新的电话号码,按回车结束\n");
scanf("%s",p1->phone);
printf("%15s %12s %11s\n",p1->name,p1->phone,p1->num);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -