weixin_51768502 2021-06-29 02:33 采纳率: 25%
浏览 24

职工信息读取不成功(C语言)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct staff * Linklist;
struct staff 
{
    int number,age,income;
    char name[50],gender[10],xueli[20],address[100],telephone[20];
    struct staff *next;
};
Linklist input(Linklist p);//输入员工信息 
void preserve(Linklist p);//将员工信息保存到文件中 
void view(Linklist p);//浏览 
void searchnumber(Linklist p);//按工号查询 
void searchxueli(Linklist p);//按学历查询 
struct staff *deletem(Linklist L);//删除职工
Linklist insert(Linklist L);//插入职工信息 
Linklist revise(Linklist L);//修改职工信息
void countstaff(Linklist L); //统计职工人数 
void countxueli(Linklist L);//统计各学历人数 
void countincome(Linklist L);//统计各阶段收入人数 
void read (Linklist p);       //从文件中读取职工信息

int main()
{
    
    printf("\n=============================职 工 信 息 管 理 系 统===========================\n\n");
    printf("======================================菜 单============================================\n\n ");
    printf("————————————————-选择要进行的操作————————————————\n\n");
    int sign;Linklist p=NULL;
    while(sign!=12)
    {
    printf("\n(1)录入职工信息;(2)浏览所有职工信息;(3)按工号查询;(4)按学历查询;(5)删除职工信息;(6)插入职工;\n(7)修改职工信息;(8)统计职工人数;(9)统计各学历人数;(10)统计各阶段收入人数;(11)读取;(12)退出\n"); 
    scanf("%d",&sign);
        switch(sign)
     {
         case 1:p=input(p);break;//p是所有员工信息的链表 
         case 2:view(p);break;
         case 3:searchnumber(p);break;
         case 4:searchxueli(p);break;
         case 5:p=deletem(p); break;//删除后的职工信息链表 
        case 6:insert(p);break;
        case 7:revise(p); break;
        case 8:countstaff(p);break;
        case 9:countxueli(p);break;
        case 10:countincome(p);break;
        case 11:read(p);break;
        default:break;
    }
    }    
    preserve(p);//将链表保存到文件中 
    printf("\n——————————————————程序已退出————————————————\n\n");
    return 0;                                                                                                                                        

Linklist input(Linklist p)
{
    int a;
    struct staff *head=NULL,*tail; 
    printf("请输入职工号:");
    scanf("%d",&a);     
    while(a!=0)
    {
        p=(struct staff*)malloc(sizeof(struct staff));
        p->number=a;p->next=NULL;
        printf("请分别输入姓名 性别 年龄 学历 收入 住址 电话号码\n");
        scanf("%s %s %d %s %d %s %s",p->name,p->gender,&p->age,p->xueli,&p->income,p->address,p->telephone);
        if(head==NULL)
        {
            head=p;tail=p;
        }
        else
        {
            tail->next=p;tail=p;
        }
        printf("请输入职工号:");scanf("%d",&a);
    }
    printf("信息录入成功!\n"); 
    return head;
}

void view(Linklist p)
{
    if(p==NULL)
    printf("\n未录入任何职工信息\n") ;
    else
    {
        printf("\n所有职工信息如下:\n");
        printf("工号     姓 名      性别     年龄     学 历        收 入      地址      电话号码\n") ;
    while(p!=NULL)
    {
        printf("%03d      %2s       %s      %d      %s      %d      %s      %s\n",p->number,p->name,p->gender,p->age,p->xueli,p->income,p->address,p->telephone);
        p=p->next;
    }
    }

void searchnumber(Linklist p)
{
    
    if(p==NULL)
    {
        printf("\n未录入任何职工信息\n") ;
    }
    else
    {
        printf("\n请输入您要查询的员工号:\n");
        int  number; //要查询的工号
        scanf("%d",&number);
        while(p)
    {
        if(p->number==number)
        {
            printf("查询到的员工信息为:\n工号     姓 名      性别     年龄     学 历        收 入      地址      电话号码\n%03d      %s       %s      %d      %s      %d      %s      %s\n",p->number,p->name,p->gender,p->age,p->xueli,p->income,p->address,p->telephone);
            break;
        }
        else
        p=p->next;
    }    
    if(p==NULL)
    printf("未查询到的员工信息,请检查是否输入错误\n");
    }
}
void searchxueli(Linklist p)
{
    if(p==NULL)
    {
        printf("\n未录入任何职工信息\n") ;
    }
    else
    {
        printf("\n请输入您要查询的学历:\n");
        char str[1000];//要查询的学历 
        scanf("%s",str);
        int c=0;
    while(p)
    {
        if(strcmp(p->xueli,str)==0)
        {
            printf("查询到该员工信息为:%03d      %s       %s      %d      %s      %d      %s      %s\n%03d      %s       %s      %d      %s      %d      %s      %s\n",p->number,p->name,p->gender,p->age,p->xueli,p->income,p->address,p->telephone);
            p=p->next;
            c++;
        }
        else
        p=p->next;
    }    
    if(p==NULL&&c==0)
    printf("未查询到该员工信息,请检查是否输入错误\n");
    }
}
Linklist deletem(Linklist L)

    Linklist p, q;
    char k[15];
    printf("请输入要删除的员工姓名:\n");
    scanf("%s",k); 
    p = L;
    p=L;
    q=NULL;
    while(p)
    {
        if(strcmp(p->name,k)==0)
        {
            if(q)
            {
                q->next=p->next;free(p);
            }
            else
            {
            L=p->next;free(p);
            }
        }
        else
        q=p;
        p=p->next;
    }
    return L;
}
Linklist insert(Linklist L)
{
    if(L==NULL)
    {printf("\n未录入任何职工信息\n") ;    }
    printf("\n请输入新加入员工的信息\n") ;
    struct staff *p,*head=NULL,*tail,*h=L;
        p=(struct staff*)malloc(sizeof(struct staff));
        p->next=NULL;
        scanf("%d %s %s %d %s %d %s %s",&p->number,p->name,p->gender,&p->age,p->xueli,&p->income,p->address,p->telephone);
        if(L==NULL)
        {
            L=p;
        }
        while(L->next!=NULL)
        {
            L=L->next;
        }
        L->next=p;
        return h;
}
Linklist revise(Linklist L)
{
    if(L==NULL)
    printf("\n未录入任何职工信息\n") ;
    char str[100];//被修改的员工姓名 
    printf("\n请输入您要修改信息的员工姓名:\n"); 
    scanf("%s",str); 
    Linklist p=L;
    while(p!=NULL)
    {
        if(strcmp(p->name,str)==0)
        {
            printf("该员工的信息为:\n工号     姓 名      性别     年龄     学 历        收 入      地址      电话号码\n%03d      %s       %s      %d      %s      %d      %s      %s\n",p->number,p->name,p->gender,p->age,p->xueli,p->income,p->address,p->telephone);break;
        }
        else 
        p=p->next;
     } 
     if(p==NULL)
     {
         printf("无该员工信息,请检查是否姓名输入错误\n");return L;
     }
     
     int c;//选择修改的信息 
     printf("1:修改姓名;2:修改工号;3:修改性别;4:修改年龄;5:修改学历;6:修改收入;7:修改地址;8:修改电话号码;9:结束\n");
      scanf("%d",&c);
     switch(c)
     {
         case 1:
            printf("姓名修改为:");
            scanf("%s",p->name);break;
        case 2:
            printf("工号修改为:");
            scanf("%d",&p->number);break;
        case 3:
            printf("性别修改为:");
            scanf("%s",p->gender);break;
        case 4:
            printf("年龄修改为:");
            scanf("%d",&p->age);break;
        case 5:
            printf("学历修改为:");
            scanf("%s",p->xueli);break;
        case 6:
            printf("收入修改为:");
            scanf("%d",&p->income);break;
        case 7:
            printf("地址修改为:");
            scanf("%s",p->address);
            break;
        case 8:
            printf("电话修改为:");
            scanf("%s",p->telephone);break;
        case 9:
               break; 
     } 
     printf("信息修改成功!\n") ;
     return p;
}
void countstaff(Linklist L)
{
    if(L==NULL)
    printf("\n未录入任何职工信息\n") ;
    int c=0;
    while(L!=NULL)
    {
        c++;L=L->next;
    }
    printf("\n一共有%d名职工\n",c); 
}
void countxueli(Linklist L)
{
    if(L==NULL)
    printf("\n未录入任何职工信息\n") ;
    int a=0,b=0,c=0,d=0,e=0; 
    while(L!=NULL)
    {
        a++;
        if(strcmp(L->xueli,"大学本科")==0)
        b++; 
        else if(strcmp(L->xueli,"硕士研究生")==0)
        c++;
        else if(strcmp(L->xueli,"博士研究生")==0)
        d++;
        else if(strcmp(L->xueli,"博士后")==0)
        e++;
        L=L->next;
    }
    printf("\n大学本科以下:%d名;大学本科:%d名;硕士研究生:%d名;博士研究生:%d名;博士后:%d名\n",a-b-c-d-e,b,c,d,e);
 } 
 void countincome(Linklist L)
 {
     if(L==NULL)
    printf("\n未录入任何职工信息\n") ;
     int a=0,b=0,c=0,d=0; 
     while(L!=NULL)
     {
         if(L->income<=5000)
         a++;
         else if(L->income>5000&&L->income<=10000)
         b++;
         else if(L->income>10000&&L->income<=20000)
         c++;
         else
         d++;
         L=L->next;
     }
     printf("\n工资在5000以下:%d名;5000-10000:%d名;10000-20000:%d名;20000以上:%d名\n",a,b,c,d);
 }
 void preserve(Linklist p)
{
    FILE *fp;//定义文件
    fp=fopen("staff.txt","wb");//以二进制方式打开文件供写
    if(fp==NULL)
    {
        printf("不能打开文件"); 
        exit(0);
    }
    while(p!=NULL)
    {
        fprintf(fp,"%d\t %s\t %s\t %d\t %s\t %d\t %s\t %s\t",p->number,p->name,p->gender,p->age,p->xueli,p->income,p->address,p->telephone);     
        p=p->next;
    }
        fclose(fp);
}
void read (Linklist p)
{
    FILE *fp;
    fp=fopen("staff.txt","rb"); //以只读方式打开当前目录下的.txt
    if(fp==NULL)
    {
        printf("无法打开文件\n");
        exit(0);                   //-------- 终止程序 ---------
    }
    while(1)
    {
        Linklist p=(Linklist )malloc(sizeof(struct staff)),head=NULL,tail; 
        if(fscanf(fp,"%d",&p->number)==EOF)
        break;
        fscanf(fp,"%d\t %s\t %s\t %d\t %s\t %d\t %s\t %s\t",&p->number,p->name,p->gender,&p->age,p->xueli,&p->income,p->address,p->telephone);
        p->next=NULL;
        if(head==NULL)
        head=p;
        else
        tail->next=p;tail=p; 
    }
    fclose(fp);
}
 
球球了,有没有大佬帮忙看一看,输入信息了之后,从文件中读取内容的时候为什么还是空的啊。球球了,救救孩子吧,我一个女生已经快秃头了,现在是凌晨两点半,我还是没找出来问题在哪里

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-07 15:56
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 如何构建全国统一的物流管理平台?
  • ¥100 ijkplayer使用AndroidStudio/CMake编译,如何支持 rtsp 直播流?
  • ¥20 和学习数据的传参方式,选择正确的传参方式有关
  • ¥15 这是网络安全里面的poem code
  • ¥15 用js遍历数据并对非空元素添加css样式
  • ¥15 使用autodl云训练,希望有直接运行的代码(关键词-数据集)
  • ¥50 python写segy数据出错
  • ¥20 关于线性结构的问题:希望能从头到尾完整地帮我改一下,困扰我很久了
  • ¥30 3D多模态医疗数据集-视觉问答
  • ¥20 设计一个二极管稳压值检测电路