简单的使用链表的系统,为什么无法实现数据输入功能?

我是一个c语言萌新,这里我做了个简单的使用链表的系统,在输入数据之后无法在后面操作中找出数据,找了很久都找不到哪里出错,希望能够得到解答。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node
{
    char name[20];                       //姓名
    char age[3];                            //年龄
    char native[20];                        //籍贯
    char sex[20];                          //性别
    char phone[20];                      //联系电话 
    char pro[50];                          //专业 
    char pos[50];                       //报考职位 
    char yeargra[4];                        //毕业年份 
    char pol[50];                          //政治面貌 
    int number;                          //考生编号 
}table;
typedef struct List
{
    table data;
    struct List *next;
}list;
int meau_1();
int meau_2();
int meau_3();
int meau_4();
void read_file(list *);
void meau_total(list *);
void add_one_list(list *);
void del_one_list(list *,int);
void mod_one_list(list *,int);
void out_one_list(list *,int);
void out_all_list(list *);
void out_nape_list(list *,int);
void write_file(list *);

int main()
{
    list *head;
    head=(list *)malloc(sizeof(list *));
    head=NULL;
    read_file(head);
    meau_total(head);
    return 0;
}

void meau_total(list *head)
{   
    int n,m,k,nap;
    for(m=meau_1();m!=3;m=meau_1()) //菜单一 选择合法用户 
    {
        if(m==1)    //菜单二 选择查询考生信息 
        {
            for(n=meau_2();n!=3;n=meau_2())//查询单一考生信息 
            {
                if(n==1)
                {   
                     printf("请输入考生编号:");//输入考生编号 
                     scanf("%d",&n);
                     out_one_list(head,n);//输出考生信息 
                }
                if(n==2)//浏览所有考生信息  
               out_all_list(head);//输出所有考生信息 
            }                                
       }
       if(m==2)
       {
            for(n=meau_3();n!=5;n=meau_3())
            {   
                if(n==1)
                {
                    for(k=meau_4();k!=4;k=meau_4())                                         
                    {   
                        if(k==1)//查询单一考生信息 
                        {
                            printf("请输入考生编号:");//输入考生编号 
                            scanf("%d",&n);
                            out_one_list(head,n);//输出考生信息 
                        }
                        if(k==2)
                        {
                            printf("\t1--姓名  2--年龄      3--籍贯      4--性别      5--联系电话\n");
                            printf("\t6--专业  7--报考职位  8--毕业年份  9--政治面貌  10-考生编号\n");
                            printf("请输入需要查询的项:");
                            scanf("%d",&nap);
                            out_nape_list(head,nap);
                        }
                        if(k==3)
                            out_all_list(head);
                        if(k==5)
                            exit(0);
                    }
                }  
                if(n==2)
                {
                    printf("请输入要插入的考生的信息:\n");                //输入插入考生信息 
                    add_one_list(head); 
                }
                if(n==3)
                {
                    printf("请输入要修改的考生的编号:");                                          //输入修改考生编号 
                    scanf("%d",&n);
                    mod_one_list(head,n);                   
                }
                if(n==4)
                {
                    printf("请输入要删除的考生的编号:");            //输入删除考生编号
                    scanf("%d",&n);
                    del_one_list(head,n); 
                }
            }               
       }
    }
    write_file(head);
} 

int meau_1()
{
    int i;
    while(1)
    {
        system("cls"); 
        printf("\n\t\t\t 公务员管理系统\n\n");
        printf("\t\t **********************************************\n\n");
        printf("\t\t 1--合法用户 2--管理员\n\n");
        printf("\t\t 3--退出系统\n\n");
        printf("\t\t **********************************************\n\n");
        printf("请选择(1-3): ");
        scanf("%d",&i);
        if(i<4&&i>=1)break;
    }
    return i;
}

int meau_2()
{
    int i;
    while(1)
    {
        system("cls"); 
        printf("\n\t\t\t 公务员管理系统(合法用户栏)\n\n");
        printf("\t\t **********************************************\n\n");
        printf("\t\t 1--查询考生信息 2--浏览考生信息\n\n");
        printf("\t\t 3--返回上一层\n\n");
        printf("\t\t **********************************************\n\n");
        printf("请选择(1-): ");
        scanf("%d",&i);
        if(i<4&&i>=1)break;
    }
    return i;
}

int meau_3()
{
    int i;
    while(1)
    {
        system("cls"); 
        printf("\n\t\t\t 公务员管理系统(管理员栏)\n\n");
        printf("\t\t **********************************************\n\n");
        printf("\t\t 1--查询考生信息 2--插入考生信息\n\n");
        printf("\t\t 3--修改考生信息 4--删除考生信息\n\n");
        printf("\t\t 5--返回上一层   \n\n");
        printf("\t\t **********************************************\n\n");
        printf("请选择(1-6): ");
        scanf("%d",&i);
        if(i<7&&i>=1)break;
    }
    return i;
}

int meau_4()
{
    int i;
    while(1)
    {
        system("cls"); 
        printf("\n\t\t\t 公务员管理系统(管理员查询栏)\n\n");
        printf("\t\t **********************************************\n\n");
        printf("\t\t 1--查询单一考生信息 2--查询某项总考生信息\n\n");
        printf("\t\t 3--查询所有考生信息 4--返回上一层\n\n");
        printf("\t\t **********************************************\n\n");
        printf("请选择(1-4): ");
        scanf("%d",&i);
        if(i<5&&i>=1)break;
    }
    return i;
}

void read_file(list *head)
{
    list *p1,*p2,*p3;
    FILE *inFile;
    if((inFile=fopen("公务员数据.txt","f"))==NULL)
    {
        printf("文件不存在或无法打开!\n");
        return;
    }
    head=p1=(list *)malloc(sizeof(list));
    p1->next=NULL;
    while(!feof(inFile))
    {
        fscanf(inFile,"%s %s %s %s %s %s %s %s %s %d",p1->data.name,p1->data.age,p1->data.native,p1->data.sex,p1->data.phone,p1->data.pro,p1->data.pos,p1->data.yeargra,p1->data.pol,&p1->data.number);
        p2=(list *)malloc(sizeof(list));
        p1->next=p2;
        p3=p1;
        p1=p2;
        p1->next=NULL;
    }
    free(p2);
    p3->next=NULL;
    fclose(inFile);
    return;
}

void write_file(list *head)
{
    list *p1;
    FILE *outFile=fopen("公务员数据.txt","w");
    p1=head;
    while(p1!=NULL)
    {
        fprintf(outFile,"%s %s %s %s %s %s %s %s %s %d\n",p1->data.name,p1->data.age,p1->data.native,p1->data.sex,p1->data.phone,p1->data.pro,p1->data.pos,p1->data.yeargra,p1->data.pol,&p1->data.number);
        p1=p1->next;
    }
    fclose(outFile);
    printf("\n 保存完毕 \n");
    system("pause");
}

void add_one_list(list *head)
{
    list *p1,*p2;
    p2=(list *)malloc(sizeof(list));
    if(head!=NULL)
    {
        p1=head;
        while(p1->next!=NULL)
            p1=p1->next;
        p2->data.number=p1->data.number+1;
    }
    else
    {
        head=p1=(list *)malloc(sizeof(list));
        p2->data.number=1;
    }
    printf("请输入姓名:");scanf("%s",p2->data.name);
    printf("请输入年龄:");scanf("%s",p2->data.age);
    printf("请输入籍贯:");scanf("%s",p2->data.native);
    printf("请输入性别:");scanf("%s",p2->data.sex);
    printf("请输入电话:");scanf("%s",p2->data.phone);
    printf("请输入专业:");scanf("%s",p2->data.pro);
    printf("请输入报考职位:");scanf("%s",p2->data.pos);
    printf("请输入毕业年份:");scanf("%s",p2->data.yeargra);
    printf("请输入政治面貌:");scanf("%s",p2->data.pol);
    p1->next=p2;
    p1=p2;
    p1->next=NULL;

}

void del_one_list(list *head,int num)
{
    list *p1,*p2,*p3;
    p1=head;
    while(p1->next!=NULL&&p1->next->data.number!=num)
        {
            p3=p1;
            p1=p1->next;
        }
    if(p1->next==NULL&&p1->data.number!=num)
    {
        printf("查无此人!!");
        system("pause");
    }
    else
    {
        p3->next=p1->next;
        p1->next=NULL;
        free(p1);
        while(p3->next!=NULL)
        {
            p3=p3->next;
            p3->data.number--;
        }
    }
}

void mod_one_list(list *head,int num)
{
    list *p1;
    char flag;
    int nap;
    p1=head;
    while(p1->next!=NULL&&p1->data.number!=num)
        p1=p1->next;
    if(p1->next==NULL&&p1->data.number!=num)
    {
        printf("查无此人!!");
        system("pause");
    }
    else
    {            
        printf("\t1--姓名  2--年龄      3--籍贯      4--性别      5--联系电话\n");
        printf("\t6--专业  7--报考职位  8--毕业年份  9--政治面貌  \n");
        printf("请输入要修改的项:");
        scanf("%d",&nap);
        for(flag='y';flag!='n'||flag!='N';)
        {   
            switch(nap)
            {
                case 1:
                        {
                            printf("请输入修改数据:");
                            scanf("%s",p1->data.name);
                            break;
                        }
                case 2:
                        {
                            printf("请输入修改数据:");
                            scanf("%s",p1->data.age);
                            break;
                        }
                case 3:
                        {
                            printf("请输入修改数据:");
                            scanf("%s",p1->data.native);
                            break;
                        }
                case 4:
                        {
                            printf("请输入修改数据:");
                            scanf("%s",p1->data.sex);
                            break;
                        }
                case 5:
                        {
                            printf("请输入修改数据:");
                            scanf("%s",p1->data.phone);
                            break;
                        }               
                case 6:
                        {
                            printf("请输入修改数据:");
                            scanf("%s",p1->data.pro);
                            break;
                        }               
                case 7:
                        {
                            printf("请输入修改数据:");
                            scanf("%s",p1->data.pos);
                            break;
                        }               
                case 8:
                        {
                            printf("请输入修改数据:");
                            scanf("%s",p1->data.yeargra);
                            break;
                        }               
                case 9:
                        {
                            printf("请输入修改数据:");
                            scanf("%s",p1->data.pol);
                            break;
                        }                                                                                   
            }
            if(nap>9||nap<1)
            {
                printf("输入错误!!请重新输入!\n");
                system("pause");
            }
            else
            {
                printf("是否再次查询?\n");
                printf("y/Y 或者 n/N");
                scanf("%c",&flag);
                for(;flag!='y'&&flag!='Y'&&flag!='N'&&flag!='n';)
                {
                    printf("输入错误!!请重新输入!\n");
                    scanf("%c",&flag);
                }       
            } 
                if(flag=='y'&&flag=='Y')
                {
                    system("cls");
                    printf("\t1--姓名  2--年龄      3--籍贯      4--性别      5--联系电话\n");
                    printf("\t6--专业  7--报考职位  8--毕业年份  9--政治面貌  \n");
                    printf("请输入要修改的项:");
                    scanf("%d",&nap);
                }
                if(flag=='n'&&flag=='N')
                    break;
        }
    }
}

void out_one_list(list *head,int num)
{
    list *p1;
    if(head==NULL)
    {
        printf("没有数据!");
        system("pause");
        return;
    }
    else
    {
        p1=head;
        while(p1->next!=NULL&&p1->data.number!=num)
            p1=p1->next;
        if(p1->next==NULL&&p1->data.number!=num)
        {
            printf("查无此人!!");
            system("pause");
        }
        else
        {   
            printf("姓名:%s",p1->data.name);
            printf("年龄:%s",p1->data.age);
            printf("籍贯:%s",p1->data.native);
            printf("性别:%s",p1->data.sex);
            printf("电话:%s",p1->data.phone);
            printf("专业:%s",p1->data.pro);
            printf("报考职位:%s",p1->data.pos);
            printf("毕业年份:%s",p1->data.yeargra);
            printf("政治面貌:%s",p1->data.pol);
            printf("编号:%d",p1->data.number);
            system("pause");
        }
        return;
    }
}

void out_all_list(list *head)
{
    list *p1;
    if(head==NULL)
    {
        printf("没有数据!");
        system("pause");
        return;
    }
    else
    {   
        p1=head;
        printf("姓名 年龄  籍贯  性别   联系电话     专业   报考职位   毕业年份   政治面貌  编号\n");
        while(p1->next!=NULL)
        {
            printf("%s %s %s %s %s %s %s %s %s %d",p1->data.name,p1->data.age,p1->data.native,p1->data.sex,p1->data.phone,p1->data.pro,p1->data.pos,p1->data.yeargra,p1->data.pol,p1->data.number);
            p1=p1->next;
        }
        system("pause"); 
        return;
    }
}

void out_nape_list(list *head,int nape)
{
    list *p1;
    char nap[50];
    if(head==NULL)
    {
        printf("没有数据!");
        system("pause");
        return;
    }
    else
    {
        p1=head;
        while(p1->next!=NULL)
            switch(nape)
                {
                    case 1:
                            {
                                printf("请输入查询的数据:");
                                scanf("%s",nap);
                                if(strcmp(p1->data.name,nap)==0)
                                {
                                    printf("姓名:%s",p1->data.name);
                                    printf("年龄:%s",p1->data.age);
                                    printf("籍贯:%s",p1->data.native);
                                    printf("性别:%s",p1->data.sex);
                                    printf("电话:%s",p1->data.phone);
                                    printf("专业:%s",p1->data.pro);
                                    printf("报考职位:%s",p1->data.pos);
                                    printf("毕业年份:%s",p1->data.yeargra);
                                    printf("政治面貌:%s",p1->data.pol);
                                    printf("编号:%d",p1->data.number);
                                }
                                break;
                            }
                    case 2:
                            {
                                printf("请输入查询的数据:");
                                scanf("%s",nap);
                                if(strcmp(p1->data.age,nap)==0)
                                {
                                    printf("姓名:%s",p1->data.name);
                                    printf("年龄:%s",p1->data.age);
                                    printf("籍贯:%s",p1->data.native);
                                    printf("性别:%s",p1->data.sex);
                                    printf("电话:%s",p1->data.phone);
                                    printf("专业:%s",p1->data.pro);
                                    printf("报考职位:%s",p1->data.pos);
                                    printf("毕业年份:%s",p1->data.yeargra);
                                    printf("政治面貌:%s",p1->data.pol);
                                    printf("编号:%d",p1->data.number);
                                }
                                break;
                            }
                    case 3:
                            {
                                printf("请输入查询的数据:");
                                scanf("%s",nap);
                                if(strcmp(p1->data.native,nap)==0)
                                {
                                    printf("姓名:%s",p1->data.name);
                                    printf("年龄:%s",p1->data.age);
                                    printf("籍贯:%s",p1->data.native);
                                    printf("性别:%s",p1->data.sex);
                                    printf("电话:%s",p1->data.phone);
                                    printf("专业:%s",p1->data.pro);
                                    printf("报考职位:%s",p1->data.pos);
                                    printf("毕业年份:%s",p1->data.yeargra);
                                    printf("政治面貌:%s",p1->data.pol);
                                    printf("编号:%d",p1->data.number);
                                }
                                break;
                            }
                    case 4:
                            {
                                printf("请输入查询的数据:");
                                scanf("%s",nap);
                                if(strcmp(p1->data.sex,nap)==0)
                                {
                                    printf("姓名:%s",p1->data.name);
                                    printf("年龄:%s",p1->data.age);
                                    printf("籍贯:%s",p1->data.native);
                                    printf("性别:%s",p1->data.sex);
                                    printf("电话:%s",p1->data.phone);
                                    printf("专业:%s",p1->data.pro);
                                    printf("报考职位:%s",p1->data.pos);
                                    printf("毕业年份:%s",p1->data.yeargra);
                                    printf("政治面貌:%s",p1->data.pol);
                                    printf("编号:%d",p1->data.number);
                                }
                                break;
                            }
                    case 5:
                            {
                                printf("请输入查询的数据:");
                                scanf("%s",nap);
                                if(strcmp(p1->data.phone,nap)==0)
                                {
                                    printf("姓名:%s",p1->data.name);
                                    printf("年龄:%s",p1->data.age);
                                    printf("籍贯:%s",p1->data.native);
                                    printf("性别:%s",p1->data.sex);
                                    printf("电话:%s",p1->data.phone);
                                    printf("专业:%s",p1->data.pro);
                                    printf("报考职位:%s",p1->data.pos);
                                    printf("毕业年份:%s",p1->data.yeargra);
                                    printf("政治面貌:%s",p1->data.pol);
                                    printf("编号:%d",p1->data.number);
                                }
                                break;
                            }               
                    case 6:
                            {
                                printf("请输入查询的数据:");
                                scanf("%s",nap);
                                if(strcmp(p1->data.pro,nap)==0)
                                {
                                    printf("姓名:%s",p1->data.name);
                                    printf("年龄:%s",p1->data.age);
                                    printf("籍贯:%s",p1->data.native);
                                    printf("性别:%s",p1->data.sex);
                                    printf("电话:%s",p1->data.phone);
                                    printf("专业:%s",p1->data.pro);
                                    printf("报考职位:%s",p1->data.pos);
                                    printf("毕业年份:%s",p1->data.yeargra);
                                    printf("政治面貌:%s",p1->data.pol);
                                    printf("编号:%d",p1->data.number);
                                }
                                break;
                            }               
                    case 7:
                            {
                                printf("请输入查询的数据:");
                                scanf("%s",nap);
                                if(strcmp(p1->data.pos,nap)==0)
                                {
                                    printf("姓名:%s",p1->data.name);
                                    printf("年龄:%s",p1->data.age);
                                    printf("籍贯:%s",p1->data.native);
                                    printf("性别:%s",p1->data.sex);
                                    printf("电话:%s",p1->data.phone);
                                    printf("专业:%s",p1->data.pro);
                                    printf("报考职位:%s",p1->data.pos);
                                    printf("毕业年份:%s",p1->data.yeargra);
                                    printf("政治面貌:%s",p1->data.pol);
                                    printf("编号:%d",p1->data.number);
                                }
                                break;
                            }               
                    case 8:
                            {
                                printf("请输入查询的数据:");
                                scanf("%s",nap);
                                if(strcmp(p1->data.yeargra,nap)==0)
                                {
                                    printf("姓名:%s",p1->data.name);
                                    printf("年龄:%s",p1->data.age);
                                    printf("籍贯:%s",p1->data.native);
                                    printf("性别:%s",p1->data.sex);
                                    printf("电话:%s",p1->data.phone);
                                    printf("专业:%s",p1->data.pro);
                                    printf("报考职位:%s",p1->data.pos);
                                    printf("毕业年份:%s",p1->data.yeargra);
                                    printf("政治面貌:%s",p1->data.pol);
                                    printf("编号:%d",p1->data.number);
                                }
                                break;
                            }               
                    case 9:
                            {
                                printf("请输入查询的数据:");
                                scanf("%s",nap);
                                if(strcmp(p1->data.pol,nap)==0)
                                {
                                    printf("姓名:%s",p1->data.name);
                                    printf("年龄:%s",p1->data.age);
                                    printf("籍贯:%s",p1->data.native);
                                    printf("性别:%s",p1->data.sex);
                                    printf("电话:%s",p1->data.phone);
                                    printf("专业:%s",p1->data.pro);
                                    printf("报考职位:%s",p1->data.pos);
                                    printf("毕业年份:%s",p1->data.yeargra);
                                    printf("政治面貌:%s",p1->data.pol);
                                    printf("编号:%d",p1->data.number);
                                }
                                break;
                            }
                }   
        system("pause");
        return;
    }
}

记得点赞哦。主要问题是头结点的使用不一致,代码中有的地方直接存储数据,当数据节点使用,有的地方则当做纯粹的头结点使用,还有其他的一些问题,我修改了部分,可以使用beyondcompare 对比下代码修改的地方。


#include<stdlib.h>
#include<string.h>
typedef struct node
{
    char name[20];                       //姓名
    char age[3];                            //年龄
    char native[20];                        //籍贯
    char sex[20];                          //性别
    char phone[20];                      //联系电话 
    char pro[50];                          //专业 
    char pos[50];                       //报考职位 
    char yeargra[4];                        //毕业年份 
    char pol[50];                          //政治面貌 
    int number;                          //考生编号 
}table;
typedef struct List
{
    table data;
    struct List *next;
}list;
int meau_1();
int meau_2();
int meau_3();
int meau_4();
void read_file(list *);
void meau_total(list *);
void add_one_list(list *);
void del_one_list(list *, int);
void mod_one_list(list *, int);
void out_one_list(list *, int);
void out_all_list(list *);
void out_nape_list(list *, int);
void write_file(list *);

int main()
{
    list *head;
    head = (list *)malloc(sizeof(list *));
    //head = NULL;
    read_file(head);
    meau_total(head);
    return 0;
}

void meau_total(list *head)
{
    int n, m, k, nap;
    for (m = meau_1(); m != 3; m = meau_1()) //菜单一 选择合法用户 
    {
        if (m == 1)    //菜单二 选择查询考生信息 
        {
            for (n = meau_2(); n != 3; n = meau_2())//查询单一考生信息 
            {
                if (n == 1)
                {
                    printf("请输入考生编号:");//输入考生编号 
                    scanf("%d", &n);
                    out_one_list(head, n);//输出考生信息 
                }
                if (n == 2)//浏览所有考生信息  
                    out_all_list(head);//输出所有考生信息 
            }
        }
        if (m == 2)
        {
            for (n = meau_3(); n != 5; n = meau_3())
            {
                if (n == 1)
                {
                    for (k = meau_4(); k != 4; k = meau_4())
                    {
                        if (k == 1)//查询单一考生信息 
                        {
                            printf("请输入考生编号:");//输入考生编号 
                            scanf("%d", &n);
                            out_one_list(head, n);//输出考生信息 
                        }
                        if (k == 2)
                        {
                            printf("\t1--姓名  2--年龄      3--籍贯      4--性别      5--联系电话\n");
                            printf("\t6--专业  7--报考职位  8--毕业年份  9--政治面貌  10-考生编号\n");
                            printf("请输入需要查询的项:");
                            scanf("%d", &nap);
                            out_nape_list(head, nap);
                        }
                        if (k == 3)
                            out_all_list(head);
                        if (k == 5)
                            exit(0);
                    }
                }
                if (n == 2)
                {
                    printf("请输入要插入的考生的信息:\n");                //输入插入考生信息 
                    add_one_list(head);
                }
                if (n == 3)
                {
                    printf("请输入要修改的考生的编号:");                                          //输入修改考生编号 
                    scanf("%d", &n);
                    mod_one_list(head, n);
                }
                if (n == 4)
                {
                    printf("请输入要删除的考生的编号:");            //输入删除考生编号
                    scanf("%d", &n);
                    del_one_list(head, n);
                }
            }
        }
    }
    write_file(head);
}

int meau_1()
{
    int i;
    while (1)
    {
        system("cls");
        printf("\n\t\t\t 公务员管理系统\n\n");
        printf("\t\t **********************************************\n\n");
        printf("\t\t 1--合法用户 2--管理员\n\n");
        printf("\t\t 3--退出系统\n\n");
        printf("\t\t **********************************************\n\n");
        printf("请选择(1-3): ");
        scanf("%d", &i);
        if (i < 4 && i >= 1)break;
    }
    return i;
}

int meau_2()
{
    int i;
    while (1)
    {
        system("cls");
        printf("\n\t\t\t 公务员管理系统(合法用户栏)\n\n");
        printf("\t\t **********************************************\n\n");
        printf("\t\t 1--查询考生信息 2--浏览考生信息\n\n");
        printf("\t\t 3--返回上一层\n\n");
        printf("\t\t **********************************************\n\n");
        printf("请选择(1-): ");
        scanf("%d", &i);
        if (i < 4 && i >= 1)break;
    }
    return i;
}

int meau_3()
{
    int i;
    while (1)
    {
        system("cls");
        printf("\n\t\t\t 公务员管理系统(管理员栏)\n\n");
        printf("\t\t **********************************************\n\n");
        printf("\t\t 1--查询考生信息 2--插入考生信息\n\n");
        printf("\t\t 3--修改考生信息 4--删除考生信息\n\n");
        printf("\t\t 5--返回上一层   \n\n");
        printf("\t\t **********************************************\n\n");
        printf("请选择(1-6): ");
        scanf("%d", &i);
        if (i < 7 && i >= 1)break;
    }
    return i;
}

int meau_4()
{
    int i;
    while (1)
    {
        system("cls");
        printf("\n\t\t\t 公务员管理系统(管理员查询栏)\n\n");
        printf("\t\t **********************************************\n\n");
        printf("\t\t 1--查询单一考生信息 2--查询某项总考生信息\n\n");
        printf("\t\t 3--查询所有考生信息 4--返回上一层\n\n");
        printf("\t\t **********************************************\n\n");
        printf("请选择(1-4): ");
        scanf("%d", &i);
        if (i < 5 && i >= 1)break;
    }
    return i;
}

void read_file(list *head)
{
    list *p1, *p2, *p3;
    FILE *inFile;
    if ((inFile = fopen("公务员数据.txt", "r")) == NULL)
    {
        printf("文件不存在或无法打开!\n");
        return;
    }

    p3 = p1 = (list *)malloc(sizeof(list));
    head->next = p1;
    p1->next = NULL;
    while (!feof(inFile))
    {
        fscanf(inFile, "%s %s %s %s %s %s %s %s %s %d", p1->data.name, p1->data.age, p1->data.native, p1->data.sex, p1->data.phone, p1->data.pro, p1->data.pos, p1->data.yeargra, p1->data.pol, &p1->data.number);
        p2 = (list *)malloc(sizeof(list));
        p1->next = p2;
        p3 = p1;
        p1 = p2;
        p1->next = NULL;
    }

    free(p1);
    p3->next = NULL;
    fclose(inFile);
    return;
}

void write_file(list *head)
{
    list *p1;
    FILE *outFile = fopen("公务员数据.txt", "w");
    p1 = head->next;
    while (p1 != NULL)
    {
        fprintf(outFile, "%s %s %s %s %s %s %s %s %s %d\n", p1->data.name, p1->data.age, p1->data.native, p1->data.sex, p1->data.phone, p1->data.pro, p1->data.pos, p1->data.yeargra, p1->data.pol, p1->data.number);
        p1 = p1->next;
    }
    fclose(outFile);
    printf("\n 保存完毕 \n");
    system("pause");
}

void add_one_list(list *head)
{
    list *p1, *p2;

    p1 = head;
    p2 = (list *)malloc(sizeof(list));

    if (p1->next != NULL)
    {
        p1 = head;
        while (p1->next != NULL)
            p1 = p1->next;
        p2->data.number = p1->data.number + 1;
    }
    else
    {
        //head = p1 = (list *)malloc(sizeof(list));
        p2->data.number = 1;
    }
    printf("请输入姓名:"); scanf("%s", p2->data.name);
    printf("请输入年龄:"); scanf("%s", p2->data.age);
    printf("请输入籍贯:"); scanf("%s", p2->data.native);
    printf("请输入性别:"); scanf("%s", p2->data.sex);
    printf("请输入电话:"); scanf("%s", p2->data.phone);
    printf("请输入专业:"); scanf("%s", p2->data.pro);
    printf("请输入报考职位:"); scanf("%s", p2->data.pos);
    printf("请输入毕业年份:"); scanf("%s", p2->data.yeargra);
    printf("请输入政治面貌:"); scanf("%s", p2->data.pol);
    p1->next = p2;
    p1 = p2;
    p1->next = NULL;

}

void del_one_list(list *head, int num)
{
    list *p1, *p2, *p3;
    p3 = p1 = head->next;
    while (p1 != NULL && p1->data.number != num)
    {
        p3 = p1;
        p1 = p1->next;
    }
    if (p1 == NULL)
    {
        printf("查无此人!!");
        system("pause");
    }
    else
    {
        p3->next = p1->next;
        //p1->next = NULL;
        p1 = NULL;
        free(p1);
        while (p3->next != NULL)
        {
            p3 = p3->next;
            p3->data.number--;
        }
    }
}

void mod_one_list(list *head, int num)
{
    list *p1;
    char flag;
    int nap;
    p1 = head->next;
    while (p1 != NULL && p1->data.number != num)
        p1 = p1->next;
    if (p1 == NULL)
    {
        printf("查无此人!!");
        system("pause");
    }
    else
    {
        printf("\t1--姓名  2--年龄      3--籍贯      4--性别      5--联系电话\n");
        printf("\t6--专业  7--报考职位  8--毕业年份  9--政治面貌  \n");
        printf("请输入要修改的项:");
        scanf("%d", &nap);
        for (flag = 'y'; flag != 'n' || flag != 'N';)
        {
            switch (nap)
            {
            case 1:
            {
                printf("请输入修改数据:");
                scanf("%s", p1->data.name);
                break;
            }
            case 2:
            {
                printf("请输入修改数据:");
                scanf("%s", p1->data.age);
                break;
            }
            case 3:
            {
                printf("请输入修改数据:");
                scanf("%s", p1->data.native);
                break;
            }
            case 4:
            {
                printf("请输入修改数据:");
                scanf("%s", p1->data.sex);
                break;
            }
            case 5:
            {
                printf("请输入修改数据:");
                scanf("%s", p1->data.phone);
                break;
            }
            case 6:
            {
                printf("请输入修改数据:");
                scanf("%s", p1->data.pro);
                break;
            }
            case 7:
            {
                printf("请输入修改数据:");
                scanf("%s", p1->data.pos);
                break;
            }
            case 8:
            {
                printf("请输入修改数据:");
                scanf("%s", p1->data.yeargra);
                break;
            }
            case 9:
            {
                printf("请输入修改数据:");
                scanf("%s", p1->data.pol);
                break;
            }
            }
            if (nap > 9 || nap < 1)
            {
                printf("输入错误!!请重新输入!\n");
                system("pause");
            }
            else
            {
                printf("是否再次查询?\n");
                printf("y/Y 或者 n/N");
                scanf("%c", &flag);
                for (; flag != 'y'&&flag != 'Y'&&flag != 'N'&&flag != 'n';)
                {
                    printf("输入错误!!请重新输入!\n");
                    scanf("%c", &flag);
                }
            }
            if (flag == 'y'&&flag == 'Y')
            {
                system("cls");
                printf("\t1--姓名  2--年龄      3--籍贯      4--性别      5--联系电话\n");
                printf("\t6--专业  7--报考职位  8--毕业年份  9--政治面貌  \n");
                printf("请输入要修改的项:");
                scanf("%d", &nap);
            }
            if (flag == 'n'&&flag == 'N')
                break;
        }
    }
}

void out_one_list(list *head, int num)
{
    list *p1;
    if (head == NULL)
    {
        printf("没有数据!");
        system("pause");
        return;
    }
    else
    {
        p1 = head->next;
        while (p1 != NULL && p1->data.number != num)
            p1 = p1->next;
        if (p1 == NULL)
        {
            printf("查无此人!!");
            system("pause");
        }
        else
        {
            printf("姓名:%s", p1->data.name);
            printf("年龄:%s", p1->data.age);
            printf("籍贯:%s", p1->data.native);
            printf("性别:%s", p1->data.sex);
            printf("电话:%s", p1->data.phone);
            printf("专业:%s", p1->data.pro);
            printf("报考职位:%s", p1->data.pos);
            printf("毕业年份:%s", p1->data.yeargra);
            printf("政治面貌:%s", p1->data.pol);
            printf("编号:%d", p1->data.number);
            system("pause");
        }
        return;
    }
}

void out_all_list(list *head)
{
    list *p1;
    if (head == NULL)
    {
        printf("没有数据!");
        system("pause");
        return;
    }
    else
    {
        p1 = head->next;
        printf("姓名 年龄  籍贯  性别   联系电话     专业   报考职位   毕业年份   政治面貌  编号\n");
        while (p1 != NULL)
        {
            printf("%s %s %s %s %s %s %s %s %s %d\n", p1->data.name, p1->data.age, p1->data.native, p1->data.sex, p1->data.phone, p1->data.pro, p1->data.pos, p1->data.yeargra, p1->data.pol, p1->data.number);
            p1 = p1->next;
        }
        system("pause");
        return;
    }
}

void out_nape_list(list *head, int nape)
{
    list *p1;
    char nap[50];
    if (head == NULL)
    {
        printf("没有数据!");
        system("pause");
        return;
    }
    else
    {
        p1 = head->next;
        while (p1->next != NULL)
            switch (nape)
            {
            case 1:
            {
                printf("请输入查询的数据:");
                scanf("%s", nap);
                if (strcmp(p1->data.name, nap) == 0)
                {
                    printf("姓名:%s", p1->data.name);
                    printf("年龄:%s", p1->data.age);
                    printf("籍贯:%s", p1->data.native);
                    printf("性别:%s", p1->data.sex);
                    printf("电话:%s", p1->data.phone);
                    printf("专业:%s", p1->data.pro);
                    printf("报考职位:%s", p1->data.pos);
                    printf("毕业年份:%s", p1->data.yeargra);
                    printf("政治面貌:%s", p1->data.pol);
                    printf("编号:%d", p1->data.number);
                }
                break;
            }
            case 2:
            {
                printf("请输入查询的数据:");
                scanf("%s", nap);
                if (strcmp(p1->data.age, nap) == 0)
                {
                    printf("姓名:%s", p1->data.name);
                    printf("年龄:%s", p1->data.age);
                    printf("籍贯:%s", p1->data.native);
                    printf("性别:%s", p1->data.sex);
                    printf("电话:%s", p1->data.phone);
                    printf("专业:%s", p1->data.pro);
                    printf("报考职位:%s", p1->data.pos);
                    printf("毕业年份:%s", p1->data.yeargra);
                    printf("政治面貌:%s", p1->data.pol);
                    printf("编号:%d", p1->data.number);
                }
                break;
            }
            case 3:
            {
                printf("请输入查询的数据:");
                scanf("%s", nap);
                if (strcmp(p1->data.native, nap) == 0)
                {
                    printf("姓名:%s", p1->data.name);
                    printf("年龄:%s", p1->data.age);
                    printf("籍贯:%s", p1->data.native);
                    printf("性别:%s", p1->data.sex);
                    printf("电话:%s", p1->data.phone);
                    printf("专业:%s", p1->data.pro);
                    printf("报考职位:%s", p1->data.pos);
                    printf("毕业年份:%s", p1->data.yeargra);
                    printf("政治面貌:%s", p1->data.pol);
                    printf("编号:%d", p1->data.number);
                }
                break;
            }
            case 4:
            {
                printf("请输入查询的数据:");
                scanf("%s", nap);
                if (strcmp(p1->data.sex, nap) == 0)
                {
                    printf("姓名:%s", p1->data.name);
                    printf("年龄:%s", p1->data.age);
                    printf("籍贯:%s", p1->data.native);
                    printf("性别:%s", p1->data.sex);
                    printf("电话:%s", p1->data.phone);
                    printf("专业:%s", p1->data.pro);
                    printf("报考职位:%s", p1->data.pos);
                    printf("毕业年份:%s", p1->data.yeargra);
                    printf("政治面貌:%s", p1->data.pol);
                    printf("编号:%d", p1->data.number);
                }
                break;
            }
            case 5:
            {
                printf("请输入查询的数据:");
                scanf("%s", nap);
                if (strcmp(p1->data.phone, nap) == 0)
                {
                    printf("姓名:%s", p1->data.name);
                    printf("年龄:%s", p1->data.age);
                    printf("籍贯:%s", p1->data.native);
                    printf("性别:%s", p1->data.sex);
                    printf("电话:%s", p1->data.phone);
                    printf("专业:%s", p1->data.pro);
                    printf("报考职位:%s", p1->data.pos);
                    printf("毕业年份:%s", p1->data.yeargra);
                    printf("政治面貌:%s", p1->data.pol);
                    printf("编号:%d", p1->data.number);
                }
                break;
            }
            case 6:
            {
                printf("请输入查询的数据:");
                scanf("%s", nap);
                if (strcmp(p1->data.pro, nap) == 0)
                {
                    printf("姓名:%s", p1->data.name);
                    printf("年龄:%s", p1->data.age);
                    printf("籍贯:%s", p1->data.native);
                    printf("性别:%s", p1->data.sex);
                    printf("电话:%s", p1->data.phone);
                    printf("专业:%s", p1->data.pro);
                    printf("报考职位:%s", p1->data.pos);
                    printf("毕业年份:%s", p1->data.yeargra);
                    printf("政治面貌:%s", p1->data.pol);
                    printf("编号:%d", p1->data.number);
                }
                break;
            }
            case 7:
            {
                printf("请输入查询的数据:");
                scanf("%s", nap);
                if (strcmp(p1->data.pos, nap) == 0)
                {
                    printf("姓名:%s", p1->data.name);
                    printf("年龄:%s", p1->data.age);
                    printf("籍贯:%s", p1->data.native);
                    printf("性别:%s", p1->data.sex);
                    printf("电话:%s", p1->data.phone);
                    printf("专业:%s", p1->data.pro);
                    printf("报考职位:%s", p1->data.pos);
                    printf("毕业年份:%s", p1->data.yeargra);
                    printf("政治面貌:%s", p1->data.pol);
                    printf("编号:%d", p1->data.number);
                }
                break;
            }
            case 8:
            {
                printf("请输入查询的数据:");
                scanf("%s", nap);
                if (strcmp(p1->data.yeargra, nap) == 0)
                {
                    printf("姓名:%s", p1->data.name);
                    printf("年龄:%s", p1->data.age);
                    printf("籍贯:%s", p1->data.native);
                    printf("性别:%s", p1->data.sex);
                    printf("电话:%s", p1->data.phone);
                    printf("专业:%s", p1->data.pro);
                    printf("报考职位:%s", p1->data.pos);
                    printf("毕业年份:%s", p1->data.yeargra);
                    printf("政治面貌:%s", p1->data.pol);
                    printf("编号:%d", p1->data.number);
                }
                break;
            }
            case 9:
            {
                printf("请输入查询的数据:");
                scanf("%s", nap);
                if (strcmp(p1->data.pol, nap) == 0)
                {
                    printf("姓名:%s", p1->data.name);
                    printf("年龄:%s", p1->data.age);
                    printf("籍贯:%s", p1->data.native);
                    printf("性别:%s", p1->data.sex);
                    printf("电话:%s", p1->data.phone);
                    printf("专业:%s", p1->data.pro);
                    printf("报考职位:%s", p1->data.pos);
                    printf("毕业年份:%s", p1->data.yeargra);
                    printf("政治面貌:%s", p1->data.pol);
                    printf("编号:%d", p1->data.number);
                }
                break;
            }
            }
        system("pause");
        return;
    }
}

部分运行结果:图片说明

好一个链表,神来之笔