hyzz1017 2022-12-19 22:34 采纳率: 37.5%
浏览 38
已结题

函数不能正常运行,求看看,求zhidian

除了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);
} 
  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-12-21 23:12
    关注

    修改完善如下,改动处见注释,供参考:

    #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 = 1;//修改
        readfile();
        while(k)  //修改
        {
            mainmenu();
            printf("请选择您的操作:");
            scanf("%d",&k);
            //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:k=0;break; //mainmenu(); 修改
                    default:break;
                }
                system("pause"); //修改
            //} 修改
        }
        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(head==NULL){ //if(p1!=NULL)
                head=(list*)malloc(len); //修改
                p2=head;                 //修改
            }
            else                         //修改
                for(p2=head;p2->next;p2=p2->next);//修改
            while(1)
            {
                //if(!feof(fp))修改
                //{            修改
                p1=(list *)malloc(len);  //修改
                p1->next=NULL;           //修改
                if (fscanf(fp, "%s%s%s%s%s", p1->name, p1->num,
                                    p1->sex, p1->address, p1->phone) != 5){ //修改
                    free(p1);
                    break;
                }
                p2->next=p1;
                //p3=p2; 修改
                p2=p1;
                //p1=(list *)malloc(len);修改
                //}
                //else 修改
                //{     修改
                //    p3->next = NULL;修改
                //    break;       修改
                //}                修改
            }
            fclose(fp); //修改
        }
        //fclose(fp);
    }
    void show_one(list *p) 
    {
        printf("姓名:%s\t\t", p->name);
        printf("成员号:%s\n", p->num); //printf("成员号:%d\n", p->num); 修改
        printf("性别:%s\t", p->sex);
        printf("住址:%s\t", p->address);
        printf("电话号码:%s\n", p->phone);// 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->next); //show_one(p);修改
            t=p->next;                   
            p->next=p->next->next;
            free(t);                 //修改
            printf("删除成功!\n");
        }    
    }
    void f3()
    {
        if (head == NULL || head->next == NULL)  return;  //修改
        list *p = head->next; // 修改
        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->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 = NULL;
        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->next); //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;
        if (head == NULL || head->next == NULL)  return;  //修改
        list *p2 = head->next; //修改
        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);
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月28日
  • 已采纳回答 12月28日
  • 创建了问题 12月19日

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向