求大家看看哪错了,感激不尽!!!!!
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#define M 900
#define N 20
void input();
void tongji();
void search();
void modily();
void dele();
void output();
void sear_edit();
float calyfgz(float jbgz, float gwgz, float jj);
float calsfgz(float yfgz, float ylzfjj, float sj);
typedef struct worker //声明存储数据的结构体
{
int num;
char name[10];
int id;
char level[20];
char bumen[20];
char jiguan[20];
float sfgz;
float jbgz;
float gwgz;
float jj;
float yfgz;
float ylzfjj;
float sj;
}wok;
typedef struct node //声明结构体指针
{
worker info;
struct node *next;
}Node,*List;
int main()
{
int a,b;
while(1)
{
puts("*****************************************************");
puts(" <企业人事管理系统__人事工资管理模块> ");
puts(" 1-信息录入,2-信息修改 ");
puts(" 3-信息删除,4-信息查询 ");
puts(" 5-信息统计,6-信息输出 ");
puts(" 0-退出菜单 ");
printf("please input a,1-总经理,2-经理,3-雇员\n");
scanf("%d",&a);
printf("input b,菜单\n");
scanf("%d",&b);
switch(b)
{
case 1:if(a!=3)input();
else printf("error");break;
case 2:if(a!=3)modily();
else printf("error");break;
case 3:if(a!=3)dele();
else printf("error");break;
case 4:search();break;
case 5:tongji();break;
case 6utput();break;
case 0:exit(0);
}
}
return 0;
}
void input()
{
FILE *fp;
int num,id;
char name[10],level[20],bumen[200],jiguan[20];
float jbgz,gwgz,jj,ylzfjj,sj;
wok p;
fp=fopen("D:\\worker.txt","a");
if(fp==NULL)
{printf("cannot open file\n ");exit(0);}
printf("please input num name:\n ");
scanf("%d%s",&num,name);
printf("please input id level\n");
scanf("%d%s",&id,level);
printf("please input bumen jiguan\n");
scanf("%s%s",bumen,jiguan);
printf("please input jbgz gwgz\n");
scanf("%f%f",&jbgz,&gwgz);
printf("please input jj ylzfjj\n");
scanf("%f%f",&jj,&ylzfjj);
printf("please input sj\n");
scanf("%f",&sj);
p.num=num;
strcpy(p.name,name);
p.id=id;
strcpy(p.level,level);
strcpy(p.bumen,bumen);
strcpy(p.jiguan,jiguan);
p.jbgz=jbgz;
p.gwgz=gwgz;
p.jj=jj;
p.ylzfjj=ylzfjj;
p.sj=sj;
p.yfgz=calyfgz(jbgz,gwgz,jj);
p.sfgz=calsfgz(p.yfgz,ylzfjj,sj);
fprintf(fp,"%d %s ",p.num,p.name);
fprintf(fp,"%d %s ",p.id,p.level);
fprintf(fp,"%s %s ",p.bumen,p.jiguan);
fprintf(fp,"%f %f ",p.jbgz,p.gwgz);
fprintf(fp,"%f %f ",p.jj,p.ylzfjj);
fprintf(fp,"%f ",p.sj);
fprintf(fp,"%f ",p.yfgz);
fprintf(fp,"%f ",p.sfgz);
fclose(fp);
}
float calyfgz(float jbgz, float gwgz, float jj) /*应发工资的计算*/
{
float yfgz;
yfgz=jbgz+gwgz+jj;
return yfgz;
}
float calsfgz(float yfgz, float ylzfjj, float sj) /*实发工资的计算*/
{
float sfgz;
sfgz=yfgz-ylzfjj-sj;
return sfgz;
}
void output()
{
FILE *fp;wok p;
fp=fopen("D:\\worker.txt","r");
while(!feof(fp))
{
fscanf(fp,"%d %s %d %s %s %s %f %f %f %f %f %f %f ",&p.num,p.name,&p.id,p.level,p.bumen,p.jiguan,&p.jbgz,&p.gwgz,&p.jj,&p.ylzfjj,&p.sj,&p.yfgz,&p.sfgz);
printf("\n%d %s %d %s %s %s %f %f %f %f %f %f %f \n",p.num,p.name,p.id,p.level,p.bumen,p.jiguan,p.jbgz,p.gwgz,p.jj,p.ylzfjj,p.sj,p.yfgz,p.sfgz);
}
fclose(fp);
}
void search()
{
FILE *fp; wok p;int num;
char name[10];
int n,flag=0; /*标记*/
fp=fopen("D:\\worker.txt","r");
printf("\n1.by num;\t\t2.by name\n");
scanf("%d",&n);
if(n==1)
{
printf("\nplease input the num to be searched:\n");
scanf("%d",&num);
while(!feof(fp)) /*没有结束时进行循环*/
{
fscanf(fp,"%d %s %d %s %s %s %f %f %f %f %f %f %f ",&(p.num),p.name,&(p.id),p.level,p.bumen,p.jiguan,&(p.jbgz),&(p.gwgz),&(p.jj),&(p.ylzfjj),&(p.sj),&(p.yfgz),&(p.sfgz));
if(p.num==num)
{ printf("\n%d %s %d %s %s %s %f %f %f %f %f %f %f \n",p.num,p.name,p.id,p.level,p.bumen,p.jiguan,p.jbgz,p.gwgz,p.jj,p.ylzfjj,p.sj,p.yfgz,p.sfgz);
flag=1;break;
}
}
if(flag==0)printf("\nNot exsit.\n");
}
if(n==2)
{
printf("\nplease input the name to be searched:\n");
scanf("%s",name);
rewind(fp);
while(!feof(fp))
{
fscanf(fp,"%d %s %d %s %s %s %f %f %f %f %f %f %f ",&(p.num),p.name,&(p.id),p.level,p.bumen,p.jiguan,&p.jbgz,&p.gwgz,&p.jj,&p.ylzfjj,&p.sj,&p.yfgz,&p.sfgz);
if(strcmp(p.name,name)==0)
{ printf("\n%d %s %d %s %s %s %f %f %f %f %f %f %f \n",p.num,p.name,p.id,p.level,p.bumen,p.jiguan,p.jbgz,p.gwgz,p.jj,p.ylzfjj,p.sj,p.yfgz,p.sfgz);
flag=1;
}
//rewind(fp); /*文件指针回到文件头*/
}
if(flag==0)printf("\nNot exsit.\n");
}
}
void dele()
{
FILE *fp;
int i;
List head,p,r,q=NULL;
head=(List)malloc(sizeof(Node)); /*申请空间*/
head->next=NULL; /*头文件赋空*/
r=head;
fp=fopen("D:\\worker.txt","r");
while(!feof(fp)) /*建立链表*/
{
p=(List)malloc(sizeof(Node)); /*申请空间*/
fscanf(fp,"%d %s %d %s %s %s %f %f %f %f %f %f %f ",&(p->info.num),p->info.name,&(p->info.id),p->info.level,p->info.bumen,p->info.jiguan,&(p->info.jbgz),&(p->info.gwgz),&(p->info.jj),&(p->info.ylzfjj),&(p->info.sj),&(p->info.yfgz),&(p->info.sfgz));
p->next=NULL;
r->next=p;
r=p;
}
fclose(fp);
fp=fopen("D:\\worker.txt","w");
p=head->next;r=head;
printf("请输入您想删除职工信息的工号:");
scanf("%d",&i);
while(p&&p->info.num!=i) /*走链表 单项链表节点后移*/
{
r=p;
p=p->next;
q=p->next;
}
if(p) /*找到节点*/
{
r->next=q;free(p);p=NULL;
p=head->next;
while(p)
{
fprintf(fp,"%d %s %d %s %s %s %f %f %f %f %f %f %f ",p->info.num,p->info.name,p->info.id,p->info.level,p->info.bumen,p->info.jiguan,p->info.jbgz,p->info.gwgz,p->info.jj,p->info.ylzfjj,p->info.sj,p->info.yfgz,p->info.sfgz);
p=p->next; /*输出链表*/
}
}
else
{
printf("can not find!\n");
exit(0);
}
fclose(fp);
}
void sear_edit() /* 查询编辑模块*/
{
FILE *fp,*fp1;
struct worker wok_people ,wok1[M];
int i,k,m,n,p,j;
printf("\n\t 查 询 编 辑 ");
printf("\n1.by num\t\t2.by name\n");
do
{
scanf("%d",&j);
}while(j<1||j>2);
if(j==1)
{
printf("输入你想查询的人的编号\n");
scanf("%d",&wok_people.num);
if((fp=fopen("d:\\worker.txt","r"))==NULL)
{
printf("\nCannot open file\n"); getchar(); exit(0);
}
for(i=0;!feof(fp);i++) /*查询此人*/
fscanf(fp,"%d %s %d %s %s %s %f %f %f %f %f %f %f ",&wok1[i].num,wok1[i].name,wok1[i].id,&wok1[i].level, wok1[i].bumen,wok1[i].jiguan,&wok1[i ].jbgz,&wok1[i].gwgz,&wok1[i].jj,&wok1[i].ylzfjj,&wok1[i].sj,&wok1[i].yfgz,&wok1[i].sfgz);
k=i;m=1;
for(i=0;i<k;i++)
{
if(wok_people.num==wok1[i].num)
{
printf("%d %s %d %s %s %s %f %f %f %f %f %f %f ",wok1[i].num,wok1[i].name,wok1[i].id,wok1[i].level, wok1[i].bumen,wok1[i].jiguan,wok1[i ].jbgz,wok1[i].gwgz,wok1[i].jj,wok1[i].ylzfjj,wok1[i].sj,wok1[i].yfgz,wok1[i].sfgz);
k=i;m=1;
m=i;
printf("\n");
}
}
}
if(j==2)
{
printf("输入查询的人的姓名:");
scanf("%s",wok_people.name);
if((fp=fopen("d:\\worker.txt","r"))==NULL)
{
printf("\nCannot open file\n"); getchar(); exit(0);
}
rewind(fp);
i=0;
while(!feof(fp))
{
fscanf(fp,"%d %s %d %s %s %s %f %f %f %f %f %f %f ",&wok1[i].num,wok1[i].name,wok1[i].id,&wok1[i].level, wok1[i].bumen,wok1[i].jiguan,&wok1[i ].jbgz,&wok1[i].gwgz,&wok1[i].jj,&wok1[i].ylzfjj,&wok1[i].sj,&wok1[i].yfgz,&wok1[i].sfgz);
i++;
}
k=i;m=1;
for(i=0;i<k;i++)
{
if(strcmp(wok_people.name,wok1[i].name)==0)
{
printf("%d %s %d %s %s %s %f %f %f %f %f %f %f ",wok1[i].num,wok1[i].name,wok1[i].id,wok1[i].level, wok1[i].bumen,wok1[i].jiguan,wok1[i ].jbgz,wok1[i].gwgz,wok1[i].jj,wok1[i].ylzfjj,wok1[i].sj,wok1[i].yfgz,wok1[i].sfgz);
m=i;
printf("\n");
}
}
}
fclose(fp);
if(m==1)
{
do
{
printf("\n这个人不存在\t\t1\t 返回\n");
scanf("%d",&p);
}while(p!=1);
sear_edit();
}
printf("\n你想重新编辑这个人的信息吗\t\t1.想\t\t2.不想\n"); /*编辑此人*/
scanf("%d",&n);
if(n<1||n>2)
{
do
{
printf("输入错误!请重新输入");
scanf("%d",&n);
}while(n<1||n>2);
}
if(n==1)
{
{
printf("这个人的初始信息:\n");
printf("\n%d %s %d %s %s %s %f %f %f %f %f %f %f ",wok1[i].num,wok1[i].name,wok1[i].id,wok1[i].level, wok1[i].bumen,wok1[i].jiguan,wok1[i ].jbgz,wok1[i].gwgz,wok1[i].jj,wok1[i].ylzfjj,wok1[i].sj,wok1[i].yfgz,wok1[i].sfgz);
printf(" 输入新的信息\n");
printf("工号:\n");
scanf("%d",&wok1[m].num);
printf("姓名:\n");
scanf("%s",wok1[m].name);
printf("身份证号:\n");
scanf("%d",&wok1[m].id);
printf("职务:\n");
scanf("%s",&wok1[m].level);
printf("部门:\n");
scanf("%s",wok1[m].bumen);
printf("籍贯:\n");
scanf("%s",wok1[m].jiguan);
printf("基本工资:\n");
scanf("%f",wok1[m].jbgz);
printf("岗位工资:\n");
scanf("%f",wok1[m].gwgz);
printf("奖金:\n");
scanf("%f",&wok1[m].jj);
printf("医疗住房基金:\n");
scanf("%f",&wok1[m].ylzfjj);
printf("税金:\n");
scanf("%f",&wok1[m].sj);
printf("应发工资:\n");
scanf("%f",&wok1[m].yfgz);
printf("实发工资:\n");
scanf("%f",&wok1[m].sfgz);
printf("您刚才输入的人的信息\n");
printf("\n%d %s %d %s %s %s %f %f %f %f %f %f %f ",wok1[i].num,wok1[i].name,wok1[i].id,wok1[i].level, wok1[i].bumen,wok1[i].jiguan,wok1[i ].jbgz,wok1[i].gwgz,wok1[i].jj,wok1[i].ylzfjj,wok1[i].sj,wok1[i].yfgz,wok1[i].sfgz);
if((fp1=fopen("d:\\wok.txt","w"))==NULL)
{
printf("\nCannot open file\n"); exit(0);
}
for(i=0;i<k-1;i++)
fprintf(fp1,"\n%d %s %d %s %s %s %f %f %f %f %f %f %f ",wok1[i].num,wok1[i].name,wok1[i].id,wok1[i].level, wok1[i].bumen,wok1[i].jiguan,wok1[i ].jbgz,wok1[i].gwgz,wok1[i].jj,wok1[i].ylzfjj,wok1[i].sj,wok1[i].yfgz,wok1[i].sfgz);
fclose(fp1);
}
if(n==2)
{
printf("\n是否继续查询吗?\t\t1 继续\t\t2 返回\n");
scanf("%d",&p);
switch(p)
{
case 1:sear_edit();break;
case 2:main();break;
}
}
}
void tongji()//统计
{
int num,id;
float sum=0,pingjun;
float max,min,man=1;
char name[10],level[20],bumen[200],jiguan[20];
float jbgz,gwgz,jj,ylzfjj,sj;
FILE *fp;
int i;
List head,p,r,q=NULL;
head=(List)malloc(sizeof(Node)); //申请空间
head->next=NULL; //头文件赋空
r=head;
fp=fopen("D:\\worker.txt","r");
while(!feof(fp)) //建立链表
{
p=(List)malloc(sizeof(Node)); //申请空间
fscanf(fp,"%d %s %d %s %s %s %f %f %f %f %f %f %f ",&(p->info.num),p->info.name,&(p->info.id),p->info.level,p->info.bumen,p->info.jiguan,&(p->info.jbgz),&(p->info.gwgz),&(p->info.jj),&(p->info.ylzfjj),&(p->info.sj),&(p->info.yfgz),&(p->info.sfgz));
p->next=NULL;
r->next=p;
r=p;
}
fclose(fp);
fp=fopen("D:\\worker.txt","w");
p=head->next;
while(p->next!=NULL)//求总和
{
sum=sum+p->info.sfgz;
p=p->next;
}
p=head->next;
while(p->next!=NULL)//求总人数
{
man++;
p=p->next;
}
pingjun=sum/man;
p=head->next;
max=p->info.sfgz;
while(p->next!=0)//求最高工资
{
if(max>=p->next->info.sfgz)
max=max+0;
else
max=p->next->info.sfgz;
p=p->next;
}
p=head->next;
min=p->info.sfgz;
while(p->next!=0)//求最低工资
{
if(min>=p->next->info.sfgz)
min=p->next->info.sfgz;
else
min=min+0;
p=p->next;
}
printf("平均工资为:%d\n",pingjun);
printf("最高工资为:%d\n",max);
printf("最低工资为:%d\n",min);
int m=0;
float fangcha_sum=0,fangcha;
while(p->next!=0) //求方差
{
fangcha_sum+=(p->info.sfgz-pingjun)*(p->info.sfgz-pingjun);
p=p->next;
m++;
}
fangcha=fangcha_sum/m;
printf("总工资的方差:%f",fangcha);
int n=0;
float pingjun_bumen,min_bumen,max_bumen,sum_bumen,fc_sum,fc;
printf("\n\n\n");
printf("请输入部门:");
scanf("%s",bumen);
while(strcmp(p->info.bumen,bumen)!=0)
{
sum_bumen+=p->info.sfgz;
if(max_bumen<=p->info.sfgz)
max_bumen=p->info.sfgz;
else max_bumen=max_bumen+0;
if(min_bumen>=p->info.sfgz)
min_bumen=p->info.sfgz;
else
min_bumen=min_bumen+0;
p=p->next;
n++;
}
pingjun_bumen=sum_bumen/n;
printf("该部门平均工资:%f",pingjun_bumen);
printf("该部门最高工资:%f",max_bumen);
printf("该部门最低工资:%f",min_bumen);
while(strcmp(p->info.bumen,bumen)!=0)
{ fc_sum+=(p->info.sfgz-pingjun_bumen)*(p->info.sfgz-pingjun_bumen);
p=p->next;
}
fc=fc_sum/n;
printf("该部门工资的方差:%f",fc);
}
}
大神帮帮忙,好人有好报!
|