#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct workers
{
char name[20]; //姓名
char sex[20]; // 性别
char workno[20]; // 职工号
char birthday[20]; // 出生年月
char degree[20]; // 学历
char position[20]; // 职务
char salary[20]; // 工资
char address[20]; // 住址
char phone[20]; // 电话号码
};
typedef struct node//定义链表单体
{
struct workers data;
struct node *next;
}Node;
int tianjia(Node *worker)//添加每位职工的数据 ,利用链表实现
{
FILE *fp;
Node *p,*r;
char x[10];
r=worker;
while (r->next != NULL)
{
r=r->next;
}
while(1)
{
printf("输入0返回主界面。");
printf("请输入职工号:");
scanf("%s",x);
if(strcmp(x,"0")==0)
{
return 0;
}
p = (Node *)malloc(sizeof(Node));
strcpy(p->data.workno,x);
printf("请输入姓名;");
scanf("%s",p->data.name);
printf("请输入性别:");
scanf("%s",p->data.sex);
printf("请输入出生年月:");
scanf("%s",p->data.birthday);
printf("请输入学历:");
scanf("%s",p->data.degree);
printf("请输入职务:");
scanf("%s",p->data.position);
printf("请输入住址:");
scanf("%s",p->data.address);
printf("请输入工资:");
scanf("%s",p->data.salary);
printf("请输入电话号码:");
scanf("%s",p->data.phone);
p->next=NULL;
r->next=p;
r=p;
if((fp=fopen("D:\\steam\\职工信息.txt","w"))==NULL)
{
printf("数据无法保存。");
}
fprintf(fp,"%s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t\n",p->data.name, p->data.sex,
p->data.birthday, p->data.degree, p->data.position, p->data.address,p->data.salary,p->data.phone);
fclose(fp);
}
};
int xianshi(Node *worker)//显示当前所有职工的数据
{
Node *p;
FILE *fp;
p=worker->next;
if(p==NULL)
{
printf("尚无信息可以显示。");
}
printf(" \n职工号 姓名 性别 出生年月 学历 职务 工资 住址 电话 \n ");
if((fp=fopen("D:\\steam\\职工信息.txt","r"))==NULL)
{
printf("打开文件失败。");
}
while(p!=NULL)
{
fscanf(fp,"\n %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t\n ", p->data.workno, p->data.name,
p->data.sex, p->data.birthday, p->data.degree, p->data.position,
p->data.salary, p->data.address, p->data.phone);
p = p->next;
}
}
int chaxun(Node *worker)//查询功能
{
Node *p;
char find[20];
int x;
p->next=worker;
if(p==NULL)
{
printf("没有信息可以查询!");
return 0;
}
printf("\n输入1将按职称查询,输入2将按学历查询,输入3将按照工资查询\n");
scanf("%s",&x);
if(x==1)
{
printf("请输入所查询人的职称:");
scanf("%s",find);
while(p!=NULL)
{
if(strcmp(p->data.workno,find)==0)//利用递归,使P指向所查询的人并输出信息
{
printf(" 职工号 姓名 性别 出生年月 学历 职务 工资 住址 电话 \n ");
printf("\n%s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t \n ",p->data.workno,p->data.name,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary,p->data.address,p->data.phone);
}
p=p->next;
}
}
else if(x==2)
{
printf("请输入所要查询的学历。");
scanf("%s",find);
while(p!=NULL)
{
if(strcmp(p->data.degree,find)==0)
{
printf(" 职工号 姓名 性别 出生年月 学历 职务 工资 住址 电话 \n ");
printf("\n%s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t \n ",p->data.workno,p->data.name,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary,p->data.address,p->data.phone);
}
p=p->next;
}
}
else if(x==3)
{
printf("请输入所要查询人的工资:");
scanf("%s",find);
while(p!=NULL)
{
if(strcmp(p->data.salary,find)==0)
{
printf(" 职工号 姓名 性别 出生年月 学历 职务 工资 住址 电话 \n ");
printf("\n%s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t \n ",p->data.workno,p->data.name,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary,p->data.address,p->data.phone);
}
p=p->next;
}
}
else if(x==0)
{
return 0;
}
}
int xiugai(Node *worker)
{
Node *p;
char find[20];
int x,y,z;
p=worker->next;
if(p==NULL)
{
printf("没有信息可以修改!");
return 0;
}
printf("1.进行单个员工的工资修改。\n");
printf("2.进行某一职位全体员工的工资变动。\n");
printf("请输入:");
scanf("%d",&x);
if(x==1)
{
printf("\n请输入该员工的职工号:");
scanf("%s",find);
while (p != NULL) //令指针P指向所要修改的员工
{
if (strcmp(p->data.workno, find) == 0)
{
break;
}
p = p->next;
}
if(p!=NULL)
{
int y;
while (1)
{
}
}
}
}
int main()//主函数
{
Node *worker;
int x;
worker=(Node*)malloc(sizeof(Node));
worker->next=NULL;
while(1)
{
printf("=============主界面============\n") ;
printf("\t1.输入职工信息\n");
printf("\t2.显示所有职工信息\n");
printf("\t3.查询职工信息\n");
printf("\t4.修改职工信息\n");
printf("\t5.删除职工信息\n");
printf("\t0.退出系统\n");
scanf("%d",&x);
switch(x)
{
case 0:printf("感谢使用!"); return 0;
case 1:tianjia(worker); break;
case 2:xianshi(worker);break;
case 3:chaxun(worker);break;
case 4:xiugai(worker);break;
case 5:break;
default :printf("系统错误!");break;
}
}
}
问题出现在第一个tianjia函数中,一旦填写完员工数据后就直接弹出 return value 3221225477