用c语言写一个职工工资管理程序

用c语言写一个职工工资管理程序,第1张

思路:

使用结构体保存职工信息,设计单独的函数,实现录入,按职工工资排序,分解单双数职工,读取和写入文件,显示数据等功能。

1 - 从键盘录入信息到数组结构并保存至文件,录入+写入文件。

2 - 从磁盘文件中读出这些数据,依次打印出来, 读取文件+显示数据。

3 - 对职工数据按工资高低排序,将排好序的各记录存放在文件worker2.dat中, 排序+写入文件。

4 - 将职工号为单数和偶数的职工信息分别存放另两个磁盘文件worker3.dat和worker4.dat中, 分解单双数职工+写入文件。

5 - 并从这两个文件中读出职工信息在显示器上显示出来, 读取文件+显示数据。

代码片段如下:

int main(int argc, char* argv[])

{

    worker arr[WORKER_NUMBER]

    int cnt = WORKER_NUMBER

    worker odd[WORKER_NUMBER]

    int oddnum = 0

    worker even[WORKER_NUMBER]

    int evennum = 0

    clear_worker_array(arr, cnt)

    clear_worker_array(odd, cnt)

    clear_worker_array(even, cnt)

    //1.录入并保存至worker1.dat

    entering_data(arr, cnt)

    if( save_file(arr, cnt, filename[0]) == 0 )

    {

        printf("原始记录已成功保存至文件 - %s\n", filename[0])

    }

    //2.读取worker1.dat并显示

    clear_worker_array(arr, cnt)

    if( load_file(arr, &cnt, filename[0]) == 0 )

    {

        printf("载入文件 - %s\n", filename[0])

    }

    show_data(arr, cnt)

    //3.排序并保存至worker2.dat

    sort_by_salary(arr, cnt)

    if( save_file(arr, cnt, filename[1]) ==0 )

    {

        printf("按工资排序后的记录已成功保存至文件 - %s\n", filename[1])

    }

    //4.保存单数和双数职工号信息至worker3.dat和worker4.dat

    filter_workers(arr, cnt, odd, &oddnum, even, &evennum)

    if( save_file(odd, oddnum, filename[2]) == 0 )

    {

        printf("职工号为单数的记录已成功保存至文件 - %s\n", filename[2])

    }

    if( save_file(even, evennum, filename[3]) == 0 )

    {

        printf("职工号为双数的记录已成功保存至文件 - %s\n", filename[3])

    }

    //5.读取worker3.dat和worker4.dat并显示

    clear_worker_array(odd, oddnum)

    oddnum = 0

    if( load_file(odd, &oddnum, filename[2]) == 0 )

    {

        printf("载入文件 - %s\n", filename[2])

    }

    show_data(odd, oddnum)

    clear_worker_array(even, oddnum)

    evennum = 0

    if( load_file(even, &evennum, filename[3]) == 0 )

    {

        printf("载入文件 - %s\n", filename[3])

    }

    show_data(even, evennum)

    return 0

}

为了测试方便,此处的宏只指定了5个职工的信息,若要达到你要求的,直接改成10即可。运行结果如下:

完整代码请参考附件 - worker_manager.c

:by never715

是否需要数据库?

这是没有数据库的

#include<iostream.h>

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#define FILENAME "staff.txt" //数据文件

/////////////////////////////////////////////

struct Staff //职工机构体

{

char CarNumber[10]//卡号

char Name[10]//姓名

int Month//月份

float SPWages//应发工资

float APWages//实发工资

float Water//水费

float Electrical//电费

float Tax//税金

}

////////////////////////////////////////////// 文件 *** 作模块

FILE *FP//全局文件指针

FILE * FileOpen(char FileName[]) //文件打开函数

{

FILE *fp

if((fp=fopen(FileName,"r"))==NULL)

{

fp=fopen(FileName,"w")

cout<<"文件打开失败重新创建记录文件"

return fp

}

fp=fopen(FileName,"r+")

return fp

}

void FileClose(FILE *fp)

{

if(fclose(fp)==0)

cout<<"安全关闭"<<endl

else

cout<<"文件关闭失败"<<endl

}

////////////////////////////////////////////////

void Increase() //添加职工信息

{

FP=FileOpen(FILENAME)

Staff temp

cout<<endl

cout<<"请输入姓名:"

cin>>temp.Name

cout<<"请输入卡号:"

cin>>temp.CarNumber

cout<<"请输入月份:"

cin>>temp.Month

cout<<"请输入应发工资:"

cin>>temp.SPWages

cout<<"请输入水费:"

cin>>temp.Water

cout<<"请输入电费:"

cin>>temp.Electrical

if(temp.SPWages<=800) temp.Tax=0

if((temp.SPWages>800.0)&&(temp.SPWages<1400.0)) temp.Tax=(temp.SPWages-800)*0.05

if(temp.SPWages>1400){temp.Tax=(temp.SPWages-1400)*0.1}

temp.APWages=temp.SPWages-temp.Water-temp.Electrical-temp.Tax

fwrite(&temp,sizeof(temp),1,FP)

cout<<"信息添加成功,请选择浏览工资信息选项进行查看"<<endl

FileClose(FP)

}

//////////////////////////////////////////////

void PrintInformation() //浏览工资信息

{

FP=FileOpen(FILENAME)

rewind(FP)

Staff temp

while(fread(&temp,sizeof(Staff),1,FP)==1)

{

cout<<"姓名:"<<temp.Name<<endl

cout<<"卡号:"<<temp.CarNumber<<endl

cout<<"月份:"<<temp.Month<<endl

cout<<"应发工资:"<<temp.SPWages<<endl

cout<<"水费:"<<temp.Water<<endl

cout<<"电费:"<<temp.Electrical<<endl

cout<<"税金:"<<temp.Tax<<endl

cout<<"实发工资:"<<temp.APWages<<endl

cout<<endl

}

FileClose(FP)

}

//////////////////////////////////////////////////

void Statistics() //统计工资信息

{

Staff temp

char nametemp[10]

float sum=0

int monthstart=0,monthover=0

cout<<"请输入统计的人员姓名:"<<endl

cin>>nametemp

cout<<"请输入统计时间段的起始月份(如:3)"

cin>>monthstart

cout<<"请输入统计时间段的终止月份(如:3)"

cin>>monthover

FP=FileOpen(FILENAME)

while(fread(&temp,sizeof(Staff),1,FP)==1)

{

if(strcmp(temp.Name,nametemp)==0)

{

if(temp.Month>=monthstart&&temp.Month<=monthover)

{

sum=sum+temp.APWages

}

}

}

cout<<"职工"<<nametemp<<"从"<<monthstart<<"月至"<<monthover<<"月合计"<<sum<<"元。"<<endl

}

////////////////////////////////////////////////

void NameSearch()

{

char tempname[10]

Staff temp

cout<<endl

cout<<"请输入要查询的职工的名称:"

cin>>tempname

FP=FileOpen(FILENAME)

while(fread(&temp,sizeof(Staff),1,FP)==1)

{

if(strcmp(temp.Name,tempname))

{

cout<<"姓名:"<<temp.Name<<endl

cout<<"卡号:"<<temp.CarNumber<<endl

cout<<"月份:"<<temp.Month<<endl

cout<<"应发工资:"<<temp.SPWages<<endl

cout<<"水费:"<<temp.Water<<endl

cout<<"电费:"<<temp.Electrical<<endl

cout<<"税金:"<<temp.Tax<<endl

cout<<"实发工资:"<<temp.APWages<<endl

cout<<endl

}

}

FileClose(FP)

}

int Search()

{

int Choose=0

while(1)

{

cout<<endl

cout<<"请选择查询方式"<<endl

cout<<"1、按照卡号查询"<<endl

cout<<"2、按照姓名查询"<<endl

cout<<"0、返回上级目录"<<endl

cout<<"请输入查询方式:"<<endl

cin>>Choose

switch(Choose)

{

case 1:break

case 2:NameSearch()break

case 0:return 0break

}

}

}

//////////////////////////////////////////////

void ShowMenu() //目录显示函数

{

int Choose=0

while(1)

{

cout<<endl

cout<<"工资信息管理系统"<<endl

cout<<"1、添加工资信息。"<<endl

cout<<"2、浏览工资信息。"<<endl

cout<<"3、统计工资信息。"<<endl

cout<<"4、查询工资信息。"<<endl

cout<<"0、退出系统。"<<endl

cout<<"请输入服务类型:"

cin>>Choose

switch(Choose)

{

case 1:Increase()break

case 2:PrintInformation()break

case 3:Statistics()break

case 4:Search()break

case 0:exit(0)break

}

}

}

void main()

{

ShowMenu()

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11302714.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存