除了f1函数,感觉其他函数运行都有问题,不知道问题在哪儿,求指点😭😭
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
#include<windows.h>
#define len sizeof(list)
typedef struct List{
char name[20]; //姓名
char num[40]; //成员号
char sex[5]; //性别
char address[40]; //地址
char phone[20]; //电话号
struct List *next;
}list;
list *head=NULL;
void mainmenu(); //主菜单
void readfile();
void show_one(list *p);
void f1(); //新建成员信息
void f2(); //删除成员信息
void f3(); //修改成员信息
void f4(); //浏览成员信息
void f5(); //查询成员信息
void f6(); //保存成员信息
list *findbyname(); //通过成员号查询
list *findbynum(); //通过成员姓名查询
list *findbyaddress(); //通过成员地址查询
list *findbyphone(); //通过电话号码查询
int main()
{
int k;
mainmenu();
readfile();
loop:printf("请选择您的操作:");
scanf("%d",&k);
// while(1)
// {
if(k>=1&&k<=7)
{
switch(k)
{
case 1: f1();
goto loop;
break;
case 2: f2();
break;
case 3: f3();
break;
case 4: f4();
break;
case 5: f5();
break;
case 6: f6();
break;
case 7:mainmenu();
break;
}
}
// }
return 0;
}
void mainmenu() //主菜单
{
system("color 1F");
printf(" 欢迎使用足球俱乐部通讯录管理系统\n");
printf("★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n");
printf("☆********************************************************************★\n");
printf("★ 足球俱乐部通讯录管理系统 ☆\n");
printf("☆ ★\n");
printf("★ 1.新建成员信息 2.删除成员信息 ☆\n");
printf("☆ ★\n");
printf("★ 3.修改成员信息 4.浏览成员信息 ☆\n");
printf("☆ ★\n");
printf("★ 5.查询成员信息 6.保存成员信息 ☆\n");
printf("☆ ★\n");
printf("☆********************************************************************★\n");
printf("★ 输入7返回主菜单 ☆\n");
printf("☆ ------------------------------------------- ★\n");
}
void readfile()
{
FILE *fp;
list *p1, *p2, *p3;
p1=p2=(list *)malloc(len);
head=NULL;
if((fp=fopen("通讯录", "r"))==NULL)
{
printf("未建立通讯录,请输入1新建成员信息!\n");
}
else
{
if(p1!=NULL)
head=p1;
while(1)
{
if(!feof(fp))
{
fscanf(fp, "%s%s%s%s%s", p1->name, p1->num, p1->sex, p1->address, p1->phone);
p2->next=p1;
p3=p2;
p2=p1;
p1=(list *)malloc(len);
}
else
{
p3->next = NULL;
break;
}
}
}
fclose(fp);
}
void show_one(list *p)
{
printf("姓名:%s\t\t", p->name);
printf("成员号:%d\n", p->num);
printf("性别:%s\t", p->sex);
printf("住址:%s\t", p->address);
printf("电话号码:%s\t", p->phone);
}
void f1()
{
list *p1,*p2;
p1=(list *)malloc(len);
printf("请输入姓名:");
scanf("%s",p1->name);
printf("请输入成员号:");
scanf("%s",p1->num);
printf("请输入成员性别:");
scanf("%s",p1->sex);
printf("请输入成员地址:");
scanf("%s",p1->address);
printf("请输入成员电话号码:");
scanf("%s",p1->phone);
p1->next=NULL;
if (head==NULL)
{
head=(list *)malloc(len);
head->next=p1;
}
else
{
for (p2=head;p2->next!=NULL;p2=p2->next);
p2->next=p1;
}
printf("添加成功!\n");
}
void f2()
{
printf("请输入要删除的成员姓名\n");
list *p=findbyname();
list *t=NULL;
if (p==NULL)
printf("对不起,没有找到该成员\n");
else
{
show_one(p);
t=p->next;
p->next=p->next->next;
printf("删除成功!\n");
}
}
void f3()
{
list *p;
char name[20];
int k, flag = 1;
printf("\n\t\t\t☆☆☆修改数据☆☆☆\n");
printf("----------------------------------------------------------------------\n");
printf("---------------------请输入需要修改的成员姓名:---------------------\n");
scanf("%s", name);
while(p!=NULL)
{
if(strcmp(p->name, name) == 0)
{
show_one(p);
flag = 0;
printf("\n------------------请选择要修改的信息:---------------------------\n");
printf("+------------------------------------------------+\n");
printf("| |\n");
printf("| 1.姓名 4.地址 |\n");
printf("| |\n");
printf("| 2.成员号 5.电话号码 |\n");
printf("| |\n");
printf("| 3.性别 |\n");
printf("| |\n");
printf("+------------------------------------------------+\n");
scanf("%d", &k);
switch(k)
{
case 1: printf("输入修改后的姓名:\n");
scanf("%s", p->name);
break;
case 2: printf("输入修改后的成员号:\n");
scanf("%s", p->num);
break;
case 3: printf("输入修改后的性别:\n");
scanf("%s", p->sex);
break;
case 4: printf("输入修改后的地址:\n");
scanf("%s", p->address);
break;
case 5: printf("输入修改后的电话号码:\n");
scanf("%s", p->phone);
break;
}
printf("修改成功!\n");
break;
}
else p=p->next;
}
if(flag)
printf("查无此人\n");
}
void f4()
{
list *p=NULL;
if (head==NULL)
{
printf("查无此人\n");
return;
}
for (p=head;p->next!=NULL;p=p->next)
show_one(p);
}
void f5()
{
int k;
printf("\n *** 1.按姓名查找 *** \n");
printf("\n *** 2.按成员号查找 *** \n");
printf("\n *** 3.按地址查找 *** \n");
printf("\n *** 4.按电话号码查找 *** \n");
printf("请选择查找方式:");
scanf("%d",&k);
list *p;
switch (k)
{
case 1: p=findbyname();
break;
case 2: p=findbynum();
break;
case 3: p=findbyaddress();
break;
case 4: p=findbyphone();
break;
}
if (p==NULL)
printf("查无此人\n");
else
{
printf("找到该用户!\n");
show_one(p);
}
}
list *findbyname()
{
char name[20];
list *p=NULL;
printf("请输入成员姓名:");
scanf("%s",name);
if (head == NULL)
{
printf("查无此人\n");
return NULL;
}
else
{
for(p=head;p->next!=NULL;p=p->next)
{
if (strcmp(p->next->name, name)==0)
return p;
}
return NULL;
}
}
list *findbynum()
{
char num[40];
list *p = NULL;
printf("请输入成员号:");
scanf("%s",num);
if (head==NULL)
{
printf("查无此人\n");
return NULL;
}
else
{
for(p=head;p->next!=NULL;p=p->next)
{
if (strcmp(p->next->num,num)==0)
return p;
}
return NULL;
}
}
list *findbyaddress()
{
char address[40];
list *p = NULL;
printf("请输入成员地址:");
scanf("%s",address);
if (head==NULL)
{
printf("查无此人\n");
return NULL;
}
else
{
for(p=head;p->next!=NULL;p=p->next)
{
if (strcmp(p->next->address,address)==0)
return p;
}
return NULL;
}
}
list *findbyphone()
{
char phone[20];
list *p = NULL;
printf("请输入成员电话号码:");
scanf("%s",phone);
if (head==NULL)
{
printf("查无此人\n");
return NULL;
}
else
{
for(p=head;p->next!=NULL;p=p->next)
{
if (strcmp(p->next->phone,phone)==0)
return p;
}
return NULL;
}
}
void f6()
{
FILE *fp;
list *p2;
if((fp = fopen("通讯录", "w")) == NULL)
{
printf("cannot open this file\n");
exit(0);
}
while(p2 != NULL)
{
fprintf(fp, "%s\t", p2->name);
fprintf(fp, "%s\t", p2->num);
fprintf(fp, "%s\t", p2->sex);
fprintf(fp, "%s\t", p2->address);
fprintf(fp, "%s\t", p2->phone);
p2 = p2->next;
fputc('\n', fp);
}
printf("\n保存成功\n");
fclose(fp);
}