职工工资管理系统

职工工资管理系统

暑假学校实习,要求做个工资管理系统。写这篇博客来记录下过程,以及在做的过程中的一些总结!提前说下这是基于C语言写的管理系统!

话不多说,先上图介绍下有哪些功能!

在这里插入图片描述

1.首先来开下数据结构吧

#define N 100
struct Worker
{
   
    char workernum[10];//员工编号
    char workername[20];//员工姓名
    int basicwage;//员工基本工资
    int allowance;//津贴
    int Bonus;//员工工资
    int totalwage;//员工总工资
}Worker_Infor[N];
struct Worker temp;
int m;//定义全局变量控制人数

结构体数组这块没啥太多东西,一些员工的基本属性就OK了,其实在这里本来想用动态数组的但是C语言这学期学完后没往深了看,就没使用动态赋值!?

2. ? 看看第一个功能吧,信息录入。这个功能比较好弄,而且方法也比较多。

那就不多说了,上代码!
void Input_Infor()
{
   
    char c,nums[20];
    int i,j,flag=1;
    if(m==0)
        i=0;
    else i=m;
    printf("  ------------------------| 员工信息录入 |------------------------------\n");
    printf("  ======================================================================\n");
    while(1)
    {
   
        printf("  ||                     -第%d位职工的编号:",i+1);
        TO:
            if(m==0)
            {
   
                gets(Worker_Infor[m].workernum);
            }
            else
            {
   
                gets(nums);
                for(j=0;j<m;j++)
                {
   
                    if(strcmp(nums,Worker_Infor[j].workernum)==0)
                    {
   
                        printf("  ||                     -已存在!请重输:");
                        goto TO;
                    }
                    else
                    {
   
                        strcpy(Worker_Infor[i].workernum,nums);
                    }
                }
            }
        printf("\n  ||                    -工号为%s职工的姓名:",Worker_Infor[i].workernum);
        gets(Worker_Infor[i].workername);
        printf("\n  ||                      -%s职工基本工资:",Worker_Infor[i].workername);
        while(1)
        {
   
            scanf("%d",&Worker_Infor[i].basicwage);
            if(Worker_Infor[i].basicwage>=0) break;
            else printf("\n  ||                      输入错误,请重试:");
        }
        printf("\n  ||                        -%s职工的津贴:",Worker_Infor[i].workername);
        while(1)
        {
   
            scanf("%d",&Worker_Infor[i].allowance);
            if(Worker_Infor[i].allowance>=0) break;
            else printf("\t输入错误,请重试:");
        }
        printf("\n  ||                        -%s职工的奖金:",Worker_Infor[i].workername);
        while(1)
        {
   
            scanf("%d",&Worker_Infor[i].Bonus);
            if(Worker_Infor[i].Bonus>=0) break;
            else printf("\t输入错误,请重试:");
        }
        i++;
        m=i;
        getchar();
        printf("\n  ||                       -是否继续输入:Y or N 或者 y or n:");
        scanf("%c",&c);
        getchar();
        if(c=='N'||c=='n')
        {
   

            system("cls");
            printf("  =========================================================================================\n");
            printf("  ||                                                                                      ||\n");
            printf("  ||                                     感谢您的使用!                                   ||\n");
            printf("  ||                                                                                      ||\n");
            printf("  ||                                   信息更新完毕请保存!                                ||\n");
            printf("  ||                                                                                      ||\n");
            printf("  ||                                 - @author by---Zdde丶 -                              ||\n");
            printf("  =========================================================================================\n");
            break;
        }
    }
}

这部分有一个点,就是在录入编号的时候,要检查数据文件里面是否有重复的。开始弄这个时觉得这个功能很简单,想着用个while(1)循环里面套for循环,遍历结构体数组。也就是把现在代码里面的goto换成了while(1)来做的,结果出现了一个很不可思议的问题,就是if else语句居然if和else里面的东西同时满足并且执行了。后来也发现了问题所在。但是这个问题真的很隐蔽。

3. 再就是保存数据到硬盘的功能了

保存文件就用到了C语言的文件管理。课堂上老师也就一笔带过,再弄这块也是疯狂的百度资料。
主要是查询fread fwrite ,fscanf以及fprintf这四个函数的用法。想来想去还是用了fscanf和fprintf这两个。毕竟是刚自学不久,我就不讲二者用法了。上代码看看这个功能吧

void Save_Infor()
{
   
    int i,n=0;
    FILE *pk;
    FILE *pf;
    Cal_Wages();
    pk=fopen("Worker.txt","w");
    pf=fopen("sumpeo.txt","w");
    n += m;//这里其实是多余的直接使用m即可
    fprintf(pf,"%d",n);
    if(pk==NULL||pf==NULL);
    {
   
        printf("文件打开失败\n");
        exit(0);
    }
    for(i=0;i<m;i++)
    {
   
        fprintf(pk,"\t%10s\t%8s\t%10d\t%8d%8d%6d\t\n",Worker_Infor[i].workernum,Worker_Infor[i].workername,Worker_Infor[i].basicwage,Worker_Infor[i].allowance,Worker_Infor[i].Bonus,Worker_Infor[i].totalwage);
    }

    fclose(pf);
    fclose(pk);

        printf("  =======================================================================================\n");
        printf("  ||                                                                                    ||\n");
        printf("  ||                                  文件保存成功                                      ||\n");
        printf("  ||                                                                                    ||\n");
        printf("  =======================================================================================\n");

}

保存文件这块,也就这点代码,但是真的让我查了很久的资料!

4.数据载入

功能快捷键

int Up_infor()
{
   
    FILE *fp;
    FILE *pk;

    int i;
    fp = fopen("Worker.txt","r");
    pk = fopen("sumpeo.txt","rb");
    if(pk==NULL)
    {
   
        printf("  =======================================================================================\n");
        printf("  ||                                                                                    ||\n");
        printf("  ||                                  文件打开失败                                      ||\n");
        printf("  ||                                                                                    ||\n");
        printf("  =======================================================================================\n");

    }
    else
    {
   
        fscanf(pk,"%d",&m);
        //printf("%d",m);
    }
    for(i=0;i<m;i++)
    {
   
        fscanf(fp,"\t%10s\t%8s",Worker_Infor[i].workernum,Worker_Infor[i].workername)
  • 22
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
工资发放系统 某公司按月给其雇员发放工资,该公司有4种雇员:  固定薪金的雇员:不管工作多长时间,总拿固定月薪;(但如果请假,要扣除相应的薪金,请假次数×每次扣除金额30)  小时工:以小时计算,加上加班费;(每月基本工作时间为160小时,其余为加班时间)  销售员:按销售收入提成计算;(每月基本销售额度为30000元,低于此额度,在月薪里扣除少于30000部分的千分之二)  带薪销售员:底薪加上销售收入提成(要求同上,若有请假,也要扣除相应的薪金) 如果雇员的生日所在的月份在本月,那么公司无条件补贴200元。 设计一工资发放系统,完成各种工资的计算,并实现以下功能: 1) 初始化系统 创建存储该公司职工信息的存储系统(Employee.dat),并进行职工信息的输入,注意:公司的职工编号由系统按顺序自动生成,并且员工号一旦分配好就不可以再修改! 第一次运行系统,根据系统提示从键盘输入员工的相应信息进行初始化操作,并保存至Employee.dat文件中。以后每次运行程序,初始化时都从文件Employee.dat中读取员工数据即可。 2) 职工信息输出 要求可以输出: 某类职工当月的薪水发放信息 分类输出全体职工当月的薪水发放信息 某一名职工当月的薪水发放信息 格式如下: ******************************** 固定薪金职员********************************* 编号 姓名 出生年月 工种 奖励薪金 固定月薪 请假天数 应扣 实发工资 是否领取 **********************************计时职员*********************************** 编号 姓名 出生年月 工种 奖励薪金 工作时长 时薪 加班时长 实发工资 是否领取 **********************************普通销售员*********************************** 编号 姓名 出生年月 工种 奖励薪金 销售额 提成比例 应扣 实发工资 是否领取*********************************带薪销售员************************************ 编号 姓名出生年月工种奖励薪金固定月薪销售额提成比例请假天数应扣实发工资是否领取 3) 添加职工 通过键盘输入相应的职工信息,添加职工,并保存至Employee.dat文件中。 4) 删除职工 通过输入职工的工号,首先输出要删除的职工相应的信息,经确认后删除,要考虑职工不存在的情况。删除后保存至Employee.dat文件中。 5) 修改信息 要求可以修改: 除编号外的所有职工信息,包括工种以及由修改工种带来的各项操作 修改某一类工种的信息,如销售人员的提成比例,统一提高0.05; 输出修改前的职工信息,经确认后修改后,输出修改后的职工信息,考虑职工不存在的情况,修改后保存至Employee.dat文件中。 6) 工资发放 通过输入职工号方式,输出查询到的职工相应的信息,经确认发放工资,将员工是否领取工资信息设置为是(即真),考虑所要查询的职工编号不存在和已经发放过工资的情况。 7) 保存退出 通过确认,保存修改的信息至文件Employee.dat中,退出系统,结束运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值