我是一个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;
}
}