搜索
查看: 962|回复: 7
打印 上一主题 下一主题

求大家看看哪错了,感激不尽!!!!!

[复制链接]
跳转到指定楼层
楼主
发表于 2015-9-17 15:27:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
25啊哈币
求大家看看哪错了,感激不尽!!!!!
#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);
       

}


}
大神帮帮忙,好人有好报!


根据大师改的.cpp

13.26 KB, 下载次数: 4

沙发
发表于 2015-9-17 18:47:53 | 只看该作者
好晕{:soso__12400ee0679b6e1e-d3e639ff657519ea-0d0721e7746fac538aba5f12d039beb6.jpg_1:}
板凳
 楼主| 发表于 2015-9-18 16:10:12 | 只看该作者
首子道 发表于 2015-9-17 18:47
好晕{:soso__12400ee0679b6e1e-d3e639ff657519ea-0d0721e7746fac538aba5f12d039beb6.jpg_1:}

能解决吗?
地板
 楼主| 发表于 2015-9-18 16:57:18 | 只看该作者
算法没有错误,其他功能都能实现,只有统计有问题,只需要看统计部分,可以的话请帮我单步调试一下统计函数部分,感激不尽
5#
发表于 2015-9-18 19:19:48 | 只看该作者
我是一个小学生,我不知道
6#
发表于 2015-9-18 19:19:59 | 只看该作者
7#
发表于 2015-9-24 20:44:02 | 只看该作者
我是新手混经验
8#
发表于 2015-9-24 20:44:38 | 只看该作者
新手 我是来混经验的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表