这个管理系统输入信息之后没有办法执行功能

题目:使用链表、文件(合理使用链表,如在插入、删除时使用合理,其它场合未必合理)。(2)职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不相同)。试设计一职工信息管理系统,使之能够提供下列功能:①系统以菜单方式工作②职工信息录入功能(职工信息用文件保存)。③职工信息浏览功能。④职工信息查询功能,查询方式有两种:按学历查询;按职工号查询。⑤职工信息删除、插入、修改功能。⑥基于各种基本数据的统计计算。例如,统计职工总人数、本科以上学历人数等。(代码在下面,调用menu函数后输入了数据,但是在选择下面功能执行的时候总是无法执行,求帮助)

#include 
#include 
#include 
#define SIZEWO sizeof(struct Worker)
#define SIZEJD sizeof(struct Jd)

void creatFile(char *FName);/*创建文件*/
struct Jd*CreatL(char *FName);/*创建链表*/
void WriteToFile(struct Jd*head,char*FName);
void menu();/*菜单*/
void Entry(struct Jd*L);/*录入职工信息*/
void Liulan(struct Jd*L);/*浏览职工信息*/
void Search1(struct Jd*L);/*按照学历查找*/
void Search2(struct Jd*L);/*按照职工号查找*/
void Delete(struct Jd*L);/*删除职工信息*/
void Add(struct Jd*L);/*添加职工信息*/
void Revise(struct Jd*L);/*修改职工信息*/
void WriteToFile(struct Jd *L,char *FName);/*将链表节点数据写往文件*/
void Zong(struct Jd*L);/*计算职工总人数*/
void Ben(struct Jd*L);/*计算本科以上学历的总人数*/

struct Worker
{
    int number;
    char name[20];
    char sex[20];
    int age;
    char xueli[20];
    float gongzi;
    char zhuzhi[20];
    char phone[20];
};

struct Jd
{
    struct Worker yuan;
    struct Jd *next;
};

int main()
{
    while(1)
    {
        menu();
    }
    return 0;
}

void creatFile(char *FName)
{
    int i=1;
    struct Worker zhi;
    FILE *fp;
    if((fp=fopen(FName,"wb"))==NULL)
    {
        printf("cannot open file\n");
        exit(0);
    }
    while(i!=0)
    {
        printf("enter data of worker:\n");
        printf("职工号:");
        scanf("%d",&zhi.number);
        printf("姓名:");
        scanf("%s",zhi.name);
        printf("性别:");
        scanf("%s",zhi.sex);
        printf("年龄:");
        scanf("%d",&zhi.age);
        printf("学历:");
        scanf("%s",zhi.xueli);
        printf("工资:");
        scanf("%f",&zhi.gongzi);
        printf("住址:");
        scanf("%s",zhi.zhuzhi);
        printf("电话号码:");
        scanf("%s",zhi.phone);
        if(fwrite(&zhi,SIZEWO,1,fp)!=1)
            printf("file write error\n");
        printf("还需要输入新的职工数据");
        scanf("%d",&i);
    }
    fclose(fp);
}

struct Jd*CreatL(char *FName)
{
    FILE *fp;
    struct Jd *p1,*p2,*head=NULL;
    struct Worker zhi;
    if((fp=fopen(FName,"rb"))==NULL)
    {
        printf("cannot open file\n");
        exit(0);
    }
    while(fread(&zhi,SIZEWO,1,fp)==1)
    {
        p1=(struct Jd*)malloc(SIZEJD);
        p1->yuan=zhi;
        p1->next=NULL;
        if(head==NULL)
        {
            head=p1;
            p2=p1;
        }
        else
        {
            p2->next=p1;
            p2=p1;
        }
    }
    fclose(fp);
    return (head);
}

void WriteToFile(struct Jd*L,char *FName)
{
    FILE *fp;
    struct Jd *p1;
    if((fp=fopen(FName,"wb"))==NULL)
    {
        printf("cannot open file\n");
        exit(0);
    }
    p1=L;
    while(p1!=NULL)
    {
        fwrite(&(p1->yuan),SIZEWO,1,fp);
        p1=p1->next;
    }
    fclose(fp);
}

void menu()
{
    int i;
    printf("欢迎使用职工管理系统\n");
    printf("1.职工信息录入\n");
    printf("2.职工信息浏览\n");
    printf("3.职工信息查询(按学历)\n");
    printf("4.职工信息查询(按职工号)\n");
    printf("5.职工信息删除\n");
    printf("6.职工信息插入\n");
    printf("7.职工信息修改\n");
    printf("8.统计职工总人数\n");
    printf("9.统计本科以上学历人数\n");
    printf("请输入您想要选择的功能编号:");
    scanf("%d",&i);
    struct Jd*L=NULL;
    char FileName[128]={'\0'};
    strcpy(FileName,"worker.txt");
    switch (i) 
    {
        case 1:
            {
                creatFile(FileName);
                L=CreatL(FileName);
            }
            break;
        case 2:
            Liulan(L);
            break;
        case 3:
            Search1(L);
            break;
        case 4:
            Search2(L);
            break;
        case 5:
            Delete(L);
            break;
        case 6:
            Add(L);
            break;
        case 7:
            Revise(L);
            break;
        case 8:
            Zong(L);
            break;
        case 9:
            Ben(L);
            break;
        default:
            printf("请输入正确的数字才能使用菜单!");
            break;
    }
}

void Liulan(struct Jd*L)
{
    struct Jd*p1;
    p1=L;
    while(p1!=NULL)
    {
        printf("%d %s %s %d %s %.2f %s %s\n",p1->yuan.number,p1->yuan.name,p1->yuan.sex,p1->yuan.age,p1->yuan.xueli,p1->yuan.gongzi,p1->yuan.zhuzhi,p1->yuan.phone);
        p1=p1->next;
    }
}

void Search1(struct Jd*L)
{
    char xue[20];
    printf("请输入您要查询的学历:");
    scanf("%s",xue);
    struct Jd*p1;
    p1=L;
    while(p1!=NULL)
    {
        if(strcmp(p1->yuan.xueli,xue)==0)
            printf("%d %s %s %d %s %.2f %s %s\n",p1->yuan.number,p1->yuan.name,p1->yuan.sex,p1->yuan.age,p1->yuan.xueli,p1->yuan.gongzi,p1->yuan.zhuzhi,p1->yuan.phone);
        p1=p1->next;
    }
}

void Search2(struct Jd *L)
{
    int num;
    printf("请输入您要查询的职工号:");
    scanf("%d",&num);
    struct Jd* p1;
    p1=L;
    while(p1!=NULL)
    {
        if(p1->yuan.number==num)
        {
            printf("%d %s %s %d %s %.2f %s %s\n",p1->yuan.number,p1->yuan.name,p1->yuan.sex,p1->yuan.age,p1->yuan.xueli,p1->yuan.gongzi,p1->yuan.zhuzhi,p1->yuan.phone);
            break;
        }
        p1=p1->next;
    }
}

void Delete(struct Jd*L)
{
    int num,flag=0;
    printf("请输入您要删除的职工号:");
    scanf("%d",&num);
    struct Jd* p1,*p2;
    p1=L;
    p2=L;
    while(p1!=NULL)
    {
        if(p1->yuan.number==num)
        {
            flag=1;
            if(p1==L)
            {
                L=L->next;
                free(p1);
                p1=L;/*L发生了改变,因此一定要给p1,p2重新赋值*/
                p2=L;
            }
            else
            {
                p2->next=p1->next;
                free(p1);
                p1=p2;/*p1被释放了,后续应该从p2所在的节点开始检测*/
            }
        }
        else
        {
            p2=p1;
            p1=p1->next;
        }
    }
    if(flag==0)
        printf("没有您要删除的职工号,请确认后再进行操作!\n");
    else
    {
        printf("删除成功!\n");
        WriteToFile(L,"worker.txt");
    }
}

void Revise(struct Jd*L)
{
    int num,flag=0;
    printf("请输入您要修改信息的职工的职工号:");
    scanf("%d",&num);
    struct Jd *p1;
    p1=L;
    while(p1!=NULL)
    {
        if(p1->yuan.number==num)
        {
            flag=1;
            printf("请输入您要修改的内容:\n");
            scanf("%d %s %s %d %s %f %s %s",&p1->yuan.number,p1->yuan.name,p1->yuan.sex,&p1->yuan.age,p1->yuan.xueli,&p1->yuan.gongzi,p1->yuan.zhuzhi,p1->yuan.phone);
        }
        p1=p1->next;
    }
    if(flag==0)
      printf("没有您要删除的职工号,请确认后再进行操作!\n");
    else
    {
        printf("删除成功!\n");
        WriteToFile(L,"worker.txt");
    }
}

void Revise(struct Jd*L)
{
    int num,flag=0;
    printf("请输入您要修改信息的职工的职工号:");
    scanf("%d",&num);
    struct Jd *p1;
    p1=L;
    while(p1!=NULL)
    {
        if(p1->yuan.number==num)
        {
            flag=1;
            printf("请输入您要修改的内容:\n");
            scanf("%d %s %s %d %s %f %s %s",&p1->yuan.number,p1->yuan.name,p1->yuan.sex,&p1->yuan.age,p1->yuan.xueli,&p1->yuan.gongzi,p1->yuan.zhuzhi,p1->yuan.phone);
        }
        p1=p1->next;
    }
    if(flag==0)
        printf("未能找到您要修改的职工的职工号,请检查后再输入!\n");
    else
    {
        printf("修改成功!\n");
        WriteToFile(L,"worker.txt");
    }
}

void Add(struct Jd*L)
{
    printf("请输入要插入的职工的各项信息:");
    struct Jd *p1,*p2,*p;
    p1=L;
    p2=L;
    p=(struct Jd*)malloc(SIZEJD);
    p->next=NULL;
    scanf("%d %s %s %d %s %f %s %s",&p->yuan.number,p->yuan.name,p->yuan.sex,&p->yuan.age,p->yuan.xueli,&p->yuan.gongzi,p->yuan.zhuzhi,p->yuan.phone);
    while(p1!=NULL)
    {
        p2=p1;
        p1=p1->next;
    }
    p2->next=p;
    p1=L;
    while(p1!=NULL)
    {
        printf("%d %s %s %d %s %.2f %s %s\n",p1->yuan.number,p1->yuan.name,p1->yuan.sex,p1->yuan.age,p1->yuan.xueli,p1->yuan.gongzi,p1->yuan.zhuzhi,p1->yuan.phone);
        p1=p1->next;
    }
    printf("添加成功!\n");
    WriteToFile(L,"worker.txt");
}

void Zong(struct Jd*L)
{
    struct Jd*p1;
    p1=L;
    int count=0;
    while(p1!=NULL)
    {
        count++;
        p1=p1->next;
    }
    printf("职工的总人数为:%d\n",count);
}

void Ben(struct Jd*L)
{
    struct Jd*p1;
    p1=L;
    int count=0;
    while(p1!=NULL)
    {
        if(strcmp(p1->yuan.xueli,"硕士")==0||strcmp(p1->yuan.xueli,"博士")==0||strcmp(p1->yuan.xueli,"博士后")==0)
            count++;
        p1=p1->next;
    }
    printf("本科以上学历的人数为:%d\n",count);
} 

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

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZEWO sizeof(struct Worker)
#define SIZEJD sizeof(struct Jd)
struct Worker{
    int   number;
    char  name[20];
    char  sex[20];
    int   age;
    char  xueli[20];
    float gongzi;
    char  zhuzhi[20];
    char  phone[20];
};

struct Jd{
    struct Worker yuan;
    struct Jd* next;
};

void  creatFile(char* FName);/*创建文件*/
struct Jd* CreatL(char* FName);/*创建链表*/
void  WriteToFile(struct Jd* head, char* FName);
void  menu();/*菜单*/
//void  Entry(struct Jd* L);/*录入职工信息*/
void  Liulan(struct Jd* L);/*浏览职工信息*/
void  Search1(struct Jd* L);/*按照学历查找*/
void  Search2(struct Jd* L);/*按照职工号查找*/
void  Delete(struct Jd** L);/*删除职工信息*/         //修改
void  Add(struct Jd** L);/*添加职工信息*/            //修改
void  Revise(struct Jd* L);/*修改职工信息*/
void  WriteToFile(struct Jd* L, char* FName);/*将链表节点数据写往文件*/
void  Zong(struct Jd* L);/*计算职工总人数*/
void  Ben(struct Jd* L);/*计算本科以上学历的总人数*/

struct Jd* L = NULL;   //L 是全局变量  修改
char FileName[128] = { '\0' };       //修改
int main()
{
    strcpy(FileName, "worker.txt");// 修改 
    L = CreatL(FileName);          // 修改
    while (1)
    {
        menu();
    }
    return 0;
}

void creatFile(char* FName)
{
    int i = 1;
    struct Worker zhi;
    FILE* fp;
    if ((fp = fopen(FName, "a+")) == NULL) //if ((fp = fopen(FName, "wb")) == NULL) //修改
    {
        printf("cannot open file\n");
        exit(0);
    }
    while (i != 0)
    {
        printf("enter data of worker:\n");
        printf("职工号:");
        scanf("%d", &zhi.number);
        printf("姓名:");
        scanf("%s", zhi.name);
        printf("性别:");
        scanf("%s", zhi.sex);
        printf("年龄:");
        scanf("%d", &zhi.age);
        printf("学历:");
        scanf("%s", zhi.xueli);
        printf("工资:");
        scanf("%f", &zhi.gongzi);
        printf("住址:");
        scanf("%s", zhi.zhuzhi);
        printf("电话号码:");
        scanf("%s", zhi.phone);
        if (fwrite(&zhi, SIZEWO, 1, fp) != 1)
            printf("file write error\n");
        printf("还需要输入新的职工数据(0:停止 1:继续)");  //修改
        scanf("%d", &i);
    }
    fclose(fp);
}

struct Jd* CreatL(char* FName)
{
    FILE   *fp;
    struct Jd* p1, * p2, * head = NULL;
    struct Worker zhi;
    if ((fp = fopen(FName, "rb")) == NULL)
    {
        printf("cannot open file\n");
        return  head;  //exit(0);    //修改
    }
    while (fread(&zhi, SIZEWO, 1, fp) == 1)
    {
        p1 = (struct Jd*)malloc(SIZEJD);
        p1->yuan = zhi;                 
        p1->next = NULL;
        if (head == NULL)
        {
            head = p1;
            p2 = p1;
        }
        else
        {
            p2->next = p1;
            p2 = p1;
        }
    }
    fclose(fp);
    return (head);
}

void WriteToFile(struct Jd* L, char* FName)
{
    FILE* fp;
    struct Jd* p1;
    if ((fp = fopen(FName, "wb")) == NULL)
    {
        printf("cannot open file\n");
        exit(0);
    }
    p1 = L;
    while (p1 != NULL)
    {
        fwrite(&(p1->yuan), SIZEWO, 1, fp);
        p1 = p1->next;
    }
    fclose(fp);
}

void menu()
{
    int i;
    printf("欢迎使用职工管理系统\n");
    printf("1.职工信息录入\n");
    printf("2.职工信息浏览\n");
    printf("3.职工信息查询(按学历)\n");
    printf("4.职工信息查询(按职工号)\n");
    printf("5.职工信息删除\n");
    printf("6.职工信息插入\n");
    printf("7.职工信息修改\n");
    printf("8.统计职工总人数\n");
    printf("9.统计本科以上学历人数\n");
    printf("请输入您想要选择的功能编号:");
    scanf("%d", &i);
    //struct Jd* L = NULL;                  //修改
    //char FileName[128] = { '\0' };        //修改
    //strcpy(FileName, "worker.txt");       //修改
    switch (i)
    {
    case 1:
    {
        creatFile(FileName);
        L = CreatL(FileName);
    }
    break;
    case 2:
        Liulan(L);
        break;
    case 3:
        Search1(L);
        break;
    case 4:
        Search2(L);
        break;
    case 5:
        Delete(&L); //修改
        break;
    case 6:
        Add(&L);   //修改
        break;
    case 7:
        Revise(L);
        break;
    case 8:
        Zong(L);
        break;
    case 9:
        Ben(L);
        break;
    default:
        printf("请输入正确的数字才能使用菜单!");
        break;
    }
}

void Liulan(struct Jd* L)
{
    struct Jd* p1;
    p1 = L;
    while (p1 != NULL)
    {
        printf("%d %s %s %d %s %.2f %s %s\n", p1->yuan.number,
            p1->yuan.name, p1->yuan.sex, p1->yuan.age, p1->yuan.xueli,
            p1->yuan.gongzi, p1->yuan.zhuzhi, p1->yuan.phone);
        p1 = p1->next;
    }
}

void Search1(struct Jd* L)
{
    int flag = 0;   //修改
    char xue[20];
    printf("请输入您要查询的学历:");
    scanf("%s", xue);
    struct Jd* p1;
    p1 = L;
    while (p1 != NULL)
    {
        if (strcmp(p1->yuan.xueli, xue) == 0) {
            printf("%d %s %s %d %s %.2f %s %s\n", p1->yuan.number,
                p1->yuan.name, p1->yuan.sex, p1->yuan.age, p1->yuan.xueli,
                p1->yuan.gongzi, p1->yuan.zhuzhi, p1->yuan.phone);
            flag++;
        }
        p1 = p1->next;
    }
    if (!flag)    //修改
        printf("没有找到相关记录!\n");
}

void Search2(struct Jd* L)
{
    int num;
    printf("请输入您要查询的职工号:");
    scanf("%d", &num);
    struct Jd* p1;
    p1 = L;
    while (p1 != NULL)
    {
        if (p1->yuan.number == num)
        {
            printf("%d %s %s %d %s %.2f %s %s\n", p1->yuan.number,
                p1->yuan.name, p1->yuan.sex, p1->yuan.age, p1->yuan.xueli,
                p1->yuan.gongzi, p1->yuan.zhuzhi, p1->yuan.phone);
            break;
        }
        p1 = p1->next;
    }
    if (!p1)   //修改
        printf("没有找到相关记录!\n");
}

void Delete(struct Jd** L)  //修改
{
    int num, flag = 0;
    printf("请输入您要删除的职工号:");
    scanf("%d", &num);
    struct Jd* p1, * p2;
    p1 = (*L);    //修改
    p2 = (*L);     //修改
    while (p1 != NULL)
    {
        if (p1->yuan.number == num)
        {
            flag = 1;
            if (p1 == (*L))   //修改
            {
                (*L) = (*L)->next;   //修改
                free(p1);
                p1 = (*L);/*L发生了改变,因此一定要给p1,p2重新赋值*/
                p2 = (*L);
            }
            else
            {
                p2->next = p1->next;
                free(p1);
                p1 = p2;/*p1被释放了,后续应该从p2所在的节点开始检测*/
            }
        }
        else
        {
            p2 = p1;
            p1 = p1->next;
        }
    }
    if (flag == 0)
        printf("没有您要删除的职工号,请确认后再进行操作!\n");
    else
    {
        printf("删除成功!\n");
        WriteToFile((*L), "worker.txt");   //修改
    }
}

void Revise(struct Jd* L)
{
    int num, flag = 0;
    printf("请输入您要修改信息的职工的职工号:");
    scanf("%d", &num);
    struct Jd* p1;
    p1 = L;
    while (p1 != NULL)
    {
        if (p1->yuan.number == num)
        {
            flag = 1;
            printf("请输入您要修改的内容:\n");
            scanf("%d %s %s %d %s %f %s %s", &p1->yuan.number,
                p1->yuan.name, p1->yuan.sex, &p1->yuan.age, p1->yuan.xueli,
                &p1->yuan.gongzi, p1->yuan.zhuzhi, p1->yuan.phone);
            break;    //修改
        }
        p1 = p1->next;
    }
    if (flag == 0)
        printf("未能找到您要修改的职工的职工号,请检查后再输入!\n");
    else
    {
        printf("修改成功!\n");
        WriteToFile(L, "worker.txt");
    }
}

void Add(struct Jd** L) //修改
{
    printf("请输入要插入的职工的各项信息:");
    struct Jd* p1, * p2, * p;
    p1 = (*L);
    p2 = (*L);
    p = (struct Jd*)malloc(SIZEJD);
    p->next = NULL;
    scanf("%d %s %s %d %s %f %s %s", &p->yuan.number,
        p->yuan.name, p->yuan.sex, &p->yuan.age, p->yuan.xueli,
        &p->yuan.gongzi, p->yuan.zhuzhi, p->yuan.phone);
    if (!p1)                                        //修改
        (*L) = p;                                   //修改 
    else {                                          //修改
        while (p1 != NULL)
        {
            p2 = p1;
            p1 = p1->next;
        }
        p2->next = p;
    }
    p1 = (*L);                                     //修改
    while (p1 != NULL)
    {
        printf("%d %s %s %d %s %.2f %s %s\n", p1->yuan.number,
            p1->yuan.name, p1->yuan.sex, p1->yuan.age, p1->yuan.xueli,
            p1->yuan.gongzi, p1->yuan.zhuzhi, p1->yuan.phone);
        p1 = p1->next;
    }
    printf("添加成功!\n");
    WriteToFile((*L), "worker.txt");   //修改
}

void Zong(struct Jd* L)
{
    struct Jd* p1;
    p1 = L;
    int count = 0;
    while (p1 != NULL)
    {
        count++;
        p1 = p1->next;
    }
    printf("职工的总人数为:%d\n", count);
}

void Ben(struct Jd* L)
{
    struct Jd* p1;
    p1 = L;
    int count = 0;
    while (p1 != NULL)
    {
        if (strcmp(p1->yuan.xueli, "硕士") == 0 ||
            strcmp(p1->yuan.xueli, "博士") == 0 ||
            strcmp(p1->yuan.xueli, "博士后") == 0)
            count++;
        p1 = p1->next;
    }
    printf("本科以上学历的人数为:%d\n", count);
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/1063615
  • 除此之外, 这篇博客: 如何学习单片机——单片机学习的感悟——以简单的外设蜂鸣器为例介绍单片机学习方法中的    压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。无源蜂鸣器利用电磁感应现象,为音圈接入交变电流后形成的电磁铁与永磁铁相吸或相斥而推动振膜发声,接入直流电只能持续推动振膜而无法产生声音,只能在接通或断开时产生声音。无源蜂鸣器的工作原理与扬声器相同。在使用方波信号源驱动的应反向并联一个二极管,防止突然断电时产生的高压反向电动势击穿其他元件以及使用寿命缩短。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    在这里插入图片描述


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^