标题:【求助】c语言工资管理系统问题
只看楼主
jobs19951130
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-12-12
结帖率:100%
已结贴  问题点数:20 回复次数:12 
【求助】c语言工资管理系统问题
代码如下,保存数据的函数是不是有错,每次关闭程序,再进去  之前输入的工资数据就没有了,求助大神。谢谢
#include <stdio.h>
#include <stdlib.h>
void menu();
void menu1();
void input(int *n,struct information *p);
void save(int *n,struct information *p);
void calcu(int *n,struct information *p);
void write(int *n,struct information *p);
void find(int *n,struct information *p);
void load();
void view(int *n,struct information *p);
struct information
{

long num;

float base;

float fact;

float jin;

float gin;

float bin;

float fin;

float jbin;

float save;

float hin;
}a[1000];
main()
{
    struct information a[1000];

int amd,n;

menu();

scanf("%d",&amd);

while(amd!=0)

{

if(amd==1)

{

system("cls");

input(&n,a);

system("cls");

        menu();

}

if(amd==2)

{

system("cls");

calcu(&n,a);

system("cls");

menu();

}

if(amd==3)

{

system("cls");

write(&n,a);

system("cls");

menu();

}

if(amd==4)

{

system("cls");

find(&n,a);

system("cls");

menu();

}

if(amd==5)

{

system("cls");

view(&n,a);

system("cls");

menu();

}

scanf("%d",&amd);

}

}
void menu()
{
    printf("************************************主菜单************************************\n\n\n\n");

printf("    1.添加职工工资信息\t");

printf("            2.计算个人所得税\n\n");

printf("    3.修改工人记录\t");

printf("            4.查询工资信息\n\n");

printf("    5.统计工资信息\t");

printf("            6.删除个人工资信息\n\n\n");

printf("******************************************************************************\n");

printf("    \n\n\n输入序号选择功能\n");

}
void menu1()
{

printf("按任意数字返回主菜单\n");
}
void input(int *n,struct information *p)
{

int i,amd,j,k,l;

l=*n;

printf("输入职工人数");

scanf("%d",n);


for(i=0;i<*n;i++)

{

printf("请按职工工号 基本工资 实发工资 津贴 岗贴 补贴 房帖 交通补贴 储蓄 汇费的顺序输入数据");

scanf("%ld,%f,%f,%f,%f,%f,%f,%f,%f,%f",&p->num,&p->base,&p->fact,&p->jin,&p->gin,&p->bin,&p->fin,&p->jbin,&p->save,&p->hin);

}

for(i=0;i<*n-1;i++)

{

for(j=0;j<*n-1-i;j++)

{

if(p[j].base<p[j+1].base)

{

k=p[j].base;

p[j].base=p[j+1].base;

p[j+1].base=k;

}

}

}

save(&l,a);

menu1();

scanf("%d",&amd);
}
void save(int *n,struct information *p)  
{
   int i;
   FILE*fp;
   if ((fp=fopen("gongzi_list","wb"))==NULL)
   {
     printf ("cannot open file\n");
     exit(0);
   }
   for (i=0;i<*n;i++)
   if (fwrite(&a[i],sizeof(struct information),1,fp)!=1)
   printf("file write error\n");
   fclose(fp);
}

void calcu(int *n,struct information *p)
{

float tax[1000]={0};

int i=0,j,amd;

while(i<*n)

{

if(p->base-1000<0)

{

tax[i]=0;

}

else if(p->base-1000>=0&&p->base-5000<=0)

{

tax[i]=(p->base-1000)/100;

}

else

{

tax[i]=(p->base-5000)/100*3+3000/100;


}


i++;

}

j=0;
    while(j<*n)

{

printf("%4ld    %f\n",p[j].num,tax[j]);

    j++;

}

menu1();

scanf("%d",&amd);
}
void write(int *n,struct information *p)
{

long input;

int i,amd;

printf("请输入工号");
here:
scanf("%ld",&input);

for(i=0;i<*n;i++)

{

if(p->num==input)

{

printf("修改信息,把新信息按职工工号 基本工资 实发工资 津贴 岗贴 补贴 房帖 交通补贴 储蓄 汇费的顺序输入");

scanf("%ld,%f,%f,%f,%f,%f,%f,%f,%f,%f",&p->num,&p->base,&p->fact,&p->jin,&p->gin,&p->bin,&p->fin,&p->jbin,&p->save,&p->hin);

}

else

{

printf("无此工号,请重新输入");
            goto here;

}

}

menu1();

scanf("%d",&amd);
}
void find(int *n,struct information *p)
{

long input;

int i,j,amd;

printf("输入要查询的工号");
here:
scanf("%ld",&input);

for(i=0;i<*n;i++)

{
        load();

if(input==p->num)

{

printf("工号:%ld\n%基本工资:%f\n实发工资:%f\n津贴:%f\n岗贴:%f\n补贴:%f\n房帖:%f\n交通补贴:%f\n储蓄:%f\n汇费:%f\n",p->num,p->base,p->fact,p->jin,p->gin,p->bin,p->fin,p->jbin,p->save,p->hin);

}

else

{

printf("无此工号,请重新输入");
            goto here;

}

}

menu1();

scanf("%d",&amd);
}
void load()
{
     int i;
     FILE*fp;
     if((fp=fopen("gongzi_list","rb"))==NULL)
         {
     printf ("cannot open file\n");
     exit(0);
         }
else
{
  do
  {
        i=0;
        fread(&a[i],sizeof(struct information),1,fp);
        i++;
  }
  while(feof(fp)==0);
}
fclose(fp);
}
void view(int *n,struct information *p)
{

int i,amd;

load();

printf("工号  基本工资  实发工资  津贴  岗贴  补贴  房帖  交通补贴  储蓄  汇费\n");

for(i=0;i<*n;i++)

{

printf("\n%ld  %5f  %5f  %5f  %5f  %5f  %5f  %5f  %5f  %5f  ",p->num,p->base,p->fact,p->jin,p->gin,p->bin,p->fin,p->jbin,p->save,p->hin);

printf("\n");

}

menu1();

scanf("%d",&amd);
}

[此贴子已经被作者于2015-12-13 21:54编辑过]

搜索更多相关主题的帖子: 管理系统 include c语言 write 
2015-12-13 17:31
jobs19951130
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-12-12
得分:0 
一下午了  求帮助
2015-12-13 17:32
jobs19951130
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-12-12
得分:0 
求大神
2015-12-13 17:32
jobs19951130
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-12-12
得分:0 
2015-12-13 17:36
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
得分:0 
目测save函数只保存了第一条记录。
你的&a改成&a[i]试试。。load函数里你得和写一样做循环读取啊。
2015-12-13 17:48
jobs19951130
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-12-12
得分:0 
回复 5楼 newdos
改了,还是不行。求帮助
2015-12-13 21:55
jobs19951130
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-12-12
得分:0 
回复 5楼 newdos
而且我就是输入一个数据,只要程序关闭,再打开,记录就没了
2015-12-13 21:56
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
得分:0 
明天再说。。
2015-12-13 23:52
jobs19951130
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-12-12
得分:0 
回复 8楼 newdos
等你
2015-12-14 10:57
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
得分:20 
#include <stdio.h>
#include <stdlib.h>
struct information
{
    long num;
   
    float base;
   
    float fact;
   
    float jin;
   
    float gin;
   
    float bin;
   
    float fin;
   
    float jbin;
   
    float save;
   
    float hin;
}a[1000] = {0};

void menu();
void menu1();
void input(int *n);
void save(int *n);

void calcu(int *n,struct information *p);
void write(int *n,struct information *p);
void find(int *n,struct information *p);
void load(int *n);
void view(int *n,struct information *p);

void main()
{
    //struct information a[1000];
   
    int amd, n =0;

    menu();
   
    scanf("%d",&amd);
   
    while(amd!=0)
    {
        if(amd==1)
            
        {
            
            system("cls");
            
            input(&n);
            
            system("cls");
            
            menu();
            
        }
        
        if(amd==2)
            
        {
            
            system("cls");
            
            calcu(&n,a);
            
            system("cls");
            
            menu();
            
        }
        
        if(amd==3)
            
        {
            
            system("cls");
            
            write(&n,a);
            
            system("cls");
            
            menu();
            
        }
        
        if(amd==4)
            
        {
            
            system("cls");
            
            find(&n,a);
            
            system("cls");
            
            menu();
            
        }
        
        if(amd==5)
            
        {
            
            system("cls");
            
            view(&n,a);
            
            system("cls");
            
            menu();
            
        }
        
        scanf("%d",&amd);
        
    }
   
}
void menu()
{
    printf("************************************主菜单************************************\n\n\n\n");
   
    printf("    1.添加职工工资信息\t");
   
    printf("            2.计算个人所得税\n\n");
   
    printf("    3.修改工人记录\t");
   
    printf("            4.查询工资信息\n\n");
   
    printf("    5.统计工资信息\t");
   
    printf("            6.删除个人工资信息\n\n\n");
   
    printf("******************************************************************************\n");
   
    printf("    \n\n\n输入序号选择功能, 0退出\n");
   
}
void menu1()
{
   
    printf("按任意数字返回主菜单\n");
}
void input(int *n)
{

    int i,amd,j;
    float k;
   
    //l=*n;
   
    printf("输入职工人数");
   
    scanf("%d",n);
   
   
    for(i=0;i<*n;i++)
        
    {
        
        printf("请按职工工号 基本工资 实发工资 津贴 岗贴 补贴 房帖 交通补贴 储蓄 汇费的顺序输入数据");
        
        scanf("%ld,%f,%f,%f,%f,%f,%f,%f,%f,%f",&a[i].num,&a[i].base,&a[i].fact,&a[i].jin,&a[i].gin,&a[i].bin,&a[i].fin,&a[i].jbin,&a[i].save,&a[i].hin);
        
    }
   
    for(i=0;i<*n-1;i++)
        
    {
        
        for(j=0;j<*n-1-i;j++)
            
        {
            
            if(a[j].base<a[j+1].base)
               
            {
               
                k=a[j].base;
               
                a[j].base=a[j+1].base;
               
                a[j+1].base=k;
               
            }
            
        }
        
    }
   
    save(n);
   
    menu1();
   
    scanf("%d",&amd);
}
void save(int *n)  
{
    int i;
    FILE*fp;
    if ((fp=fopen("gongzi_list","wb"))==NULL)
    {
        printf ("cannot open file\n");
        exit(0);
    }
    for (i=0;i<*n;i++)
    {
        if (fwrite(&a[i],sizeof(struct information),1,fp)!=1)
            printf("file write error\n");
    }
    fclose(fp);
}

void calcu(int *n,struct information *p)
{
   
    float tax[1000]={0};
   
    int i=0,j,amd;
   
    while(i<*n)
        
    {
        
        if(p->base-1000<0)
            
        {
            
            tax[i]=0;
            
        }
        
        else if(p->base-1000>=0&&p->base-5000<=0)
            
        {
            
            tax[i]=(p->base-1000)/100;
            
        }
        
        else
            
        {
            
            tax[i]=(p->base-5000)/100*3+3000/100;
            
            
        }
        
        
        i++;
        
    }
   
    j=0;
    while(j<*n)
        
    {
        
        printf("%4ld    %f\n",p[j].num,tax[j]);
        
        j++;
        
    }
   
    menu1();
   
    scanf("%d",&amd);
}
void write(int *n,struct information *p)
{
   
    long input;
   
    int i,amd;
   
    printf("请输入工号");
here:
    scanf("%ld",&input);
   
    for(i=0;i<*n;i++)
        
    {
        
        if(p->num==input)
            
        {
            
            printf("修改信息,把新信息按职工工号 基本工资 实发工资 津贴 岗贴 补贴 房帖 交通补贴 储蓄 汇费的顺序输入");
            
            scanf("%ld,%f,%f,%f,%f,%f,%f,%f,%f,%f",&p->num,&p->base,&p->fact,&p->jin,&p->gin,&p->bin,&p->fin,&p->jbin,&p->save,&p->hin);
            
        }
        
        else
            
        {
            
            printf("无此工号,请重新输入");
            goto here;
            
        }
        
    }
   
    menu1();
   
    scanf("%d",&amd);
}
void find(int *n,struct information *p)
{
   
    long input;
   
    int i,j,amd;
   
    printf("输入要查询的工号");
    load(n);
here:
    scanf("%ld",&input);
    j = 0;
    for(i=0;i<*n;i++)
        
    {
        
        if(input==a[i].num)
            
        {
            j = 1;   
            printf("工号:%ld\n%基本工资:%10.2f\n实发工资:%f\n津贴:%f\n岗贴:%f\n补贴:%f\n房帖:%f\n交通补贴:%f\n储蓄:%f\n汇费:%f\n",p->num,p->base,p->fact,p->jin,p->gin,p->bin,p->fin,p->jbin,p->save,p->hin);
            
        }
    }
    if(!j)
    {
        printf("无此工号,请重新输入");
        goto here;
    }
   
    menu1();
   
    scanf("%d",&amd);
}
void load(int *n)
{
    int i = 0;
    FILE*fp;
    if((fp=fopen("gongzi_list","rb"))==NULL)
    {
        printf ("cannot open file\n");
        exit(0);
    }
    else
    {
        for(i = 0; !feof(fp); i++)
        {
            fread(&a[i],sizeof(struct information),1,fp);
        }
    }
    *n = i-1;
    fclose(fp);
}
void view(int *n,struct information *p)
{
   
    int i,amd;
   
    load(n);
   
    printf("工号  基本工资  实发工资  津贴  岗贴  补贴  房帖  交通补贴  储蓄  汇费\n");
   
    for(i=0;i<*n;i++)
        
    {
        
        printf("\n%ld  %5f  %5f  %5f  %5f  %5f  %5f  %5f  %5f  %5f  ",p->num,p->base,p->fact,p->jin,p->gin,p->bin,p->fin,p->jbin,p->save,p->hin);
        
        printf("\n");
        
    }
   
    menu1();
   
    scanf("%d",&amd);
}

只简单的修改了一下1,4功能,其它没有改,这代码真的是你自己写的吗?太多的错误,太多的逻辑问题。
就拿查询来说,逻辑都是错的,另外没有找到结果时,用户不想查询了想退回到主菜单你怎么办?
按你这个goto逻辑就是直到用户输入正确了,才能回去?自己改吧。
2015-12-14 12:15



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-460189-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.343943 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved