C++如何实现职工工资管理系统

C++如何实现职工工资管理系统

本篇内容主要讲解“C++如何实现职工工资管理系统”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++如何实现职工工资管理系统”吧!

题目 职工工资管理系统

功能设计要求

1. 输入记录:将每一个职工的姓名、ID号以及基本工资、职务工资、岗位津贴、医疗保险、公积金的数据作为一个记录。该软件能建立一个新的数据文件或给已建立好的数据文件增加记录。

2. 显示记录:根据用户提供的记录或者根据职工姓名显示一个或几个职工的各项工资和平均工资。

3. 修改记录:可以对数据文件的任意记录的数据进行修改并在修改前后对记录内容进行显示。

4.查找记录:可以对数据文件的任意记录的数据进行查找并在查找前后对记录内容进行显示。

5. 删除记录:可删除数据文件中的任一记录。

6. 统计: (A)计算各项工资平均工资及总工资,(B)统计符合指定条件(如职工工资前三项之和在3000元以上、3000~2000元、2000~1000元) 以内的工资职工人数及占总职工人数的百分比。(C)按字符表格形式打印全部职工工资信息表及平均工资(包括各项总的平均工资)。

7.保存数据文件功能。

下面是我设计的程序功能

功能模块

1.主函数 main(void):调用设计者的相关信息函数、调用 Menu()函数,实现系统的主要功能处理;

2.主菜单Menu()函数:确定如何选择所需功能,调用数据输入、显示、查找、增加、删除、修改、保存等函数,完成职工工资管理系统的数据处理;

3.数据输入Input():完成职工信息添加;

4.数据修改函数 update():修改职工工资等信息数据;

5.数据删除函数Delete():删除职工信息数据;

6.数据查找函数 select():查找某一职工工资等信息情况;

7.数据统计函数tongji():统计职工人数;

8.数据显示函数print():将职工信息数据显示出来;

9.文件保存函数Save():将录入的职工信息保存到文件;

10 文件读取函数Read(): 从文件中读取职工信息;

代码的流程图

代码的实现

头文件:

#ifndef__MONEY__#define__MONEY__#include<iostream>#include<stdlib.h>#include<string.h>usingnamespacestd;#defineMAX_NAME10//定义姓名的最大长度#defineSTART3//初始化为职工开辟的空间#defineADD5//每次为职工增加的空间#defineFILENAME"staff.dat"//存入的文件名//定义一个职工类classStaff{public://显示职工信息voidprint(){cout<<id<<""<<name<<""<<mon1<<""<<mon2<<""<<mon3<<""<<mon4<<""<<mon5<<""<<Staff::summoney()<<""<<Staff::avgmoney()<<endl;}//求每个人的总工资doublesummoney(){doublesum;sum=mon1+mon2+mon3+mon4+mon5;returnsum;}//求每个人的平均工资doubleavgmoney(){doubleavg;avg=(Staff::summoney())/5;returnavg;}charname[MAX_NAME];intid;doublemon1,mon2,mon3,mon4,mon5;};//定一个系统类classSystem{public://显示系统内的职工信息voidprint(){size_ti=0;if(System::len==0){cout<<"系统中没有职工信息"<<endl;}for(i=0;i<System::len;i++){(System::staff+i)->print();}}Staff*staff;//职工类的指针size_tlen;//职工人数size_twidth;//为职工创建的空间大小};//初始化系统voidInitclass(System*my_sys);//添加职工信息voidInput(System*my_sys);//查找职工信息voidSelect(System*my_sys);//修改职工信息voidUpdate(System*my_sys);//删除职工信息voidDelete(System*my_sys);//统计职工信息voidtongji(System*my_sys);//求每一项的平均值voidmoney(System*my_sys);//从文件读取职工信息voidRead(System*my_sys);//将职工信息写入文件voidSave(System*my_sys);//释放动态开辟的空间voidFree(System*my_sys);#endif//__MONEY__

源文件:

#define_CRT_SECURE_NO_WARNINGS1#include"xiaodong.h"//初始化系统voidInitclass(System*my_sys){my_sys->staff=(Staff*)calloc(START,sizeof(Staff));if(my_sys->staff==NULL){cout<<"开辟空间失败"<<endl;exit(EXIT_FAILURE);}my_sys->len=0;my_sys->width=START;}voidIF_space(System*my_sys){if(my_sys->len==my_sys->width){Staff*temp=(Staff*)realloc(my_sys->staff,my_sys->width+ADD);if(temp==NULL){cout<<"职工人数已达系统限定,"<<endl;}else{my_sys->staff=temp;my_sys->width+=ADD;}}}//添加职工信息voidInput(System*my_sys){IF_space(my_sys);cout<<"请输入职工信息:"<<endl;cout<<"姓名基本工资职务工资津贴医疗保险公积金"<<endl;cin>>(my_sys->staff+my_sys->len)->name>>(my_sys->staff+my_sys->len)->mon1>>(my_sys->staff+my_sys->len)->mon2>>(my_sys->staff+my_sys->len)->mon3>>(my_sys->staff+my_sys->len)->mon4>>(my_sys->staff+my_sys->len)->mon5;(my_sys->staff+my_sys->len)->id=my_sys->len+1;my_sys->len+=1;}//查找职工信息voidSelect(System*my_sys){if(my_sys->len==0){cout<<"系统中没有保存职工信息"<<endl;}else{cout<<"请输入所要查询的职工姓名:";charName[10]={0};cin>>Name;size_ti=0;for(i=0;i<my_sys->len;i++){if(strcmp(Name,(my_sys->staff+i)->name)==0){cout<<"该职工信息为:"<<endl;cout<<"ID号姓名基本工资职务工资津贴医疗保险公积金总工资平均工资"<<endl;my_sys->staff->print();break;}}if(i>=my_sys->len)cout<<"系统中没有此职工信息"<<endl;}}voidmenu1(){cout<<"请选择要修改的信息:"<<endl;cout<<"***********************************************"<<endl;cout<<"******1.修改职工姓名******"<<endl;cout<<"******2.修改基本工资******"<<endl;cout<<"******3.修改职务工资******"<<endl;cout<<"******4.修改紧贴******"<<endl;cout<<"******5.修改医疗保险******"<<endl;cout<<"******6.修改公积金******"<<endl;cout<<"***********************************************"<<endl;}//修改职工信息voidUpdate(System*my_sys){if(my_sys->len==0){cout<<"系统中没有保存职工信息"<<endl;}else{cout<<"请输入所要修改的职工姓名:";charName[MAX_NAME]={0};cin>>Name;size_ti=0;for(i=0;i<my_sys->len;i++){if(strcmp(Name,(my_sys->staff+i)->name)==0){menu1();cout<<"请选择对应数字序号进行操作:";inta=0;charname[MAX_NAME]={0};doublemon1=0.0,mon2=0.0,mon3=0.0,mon4=0.0,mon5=0.0;cin>>a;switch(a){<strong></strong>case1:cout<<"请输入新的职工姓名:";cin>>name;strcpy(my_sys->staff->name,name);break;case2:cout<<"请输入新的基本工资:";cin>>mon1;my_sys->staff->mon1=mon1;break;case3:cout<<"请输入新的岗位工资:";cin>>mon2;my_sys->staff->mon2=mon2;break;case4:cout<<"请输入新的岗位工资:";cin>>mon3;my_sys->staff->mon3=mon3;break;case5:cout<<"请输入新的岗位工资:";cin>>mon4;my_sys->staff->mon4=mon4;break;case6:cout<<"请输入新的岗位工资:";cin>>mon5;my_sys->staff->mon5=mon5;break;default:cout<<"输入不合标准"<<endl;break;}break;}}if(i>=my_sys->len)cout<<"系统中没有此职工信息"<<endl;}}//删除职工信息voidDelete(System*my_sys){if(my_sys->len==0){cout<<"系统中没有保存职工信息"<<endl;}else{cout<<"请输入所要删除的职工姓名:";charName[MAX_NAME]={0};cin>>Name;size_ti=0;size_tm=my_sys->len;for(i=0;i<my_sys->len;i++){if(strcmp(Name,(my_sys->staff+i)->name)==0){for(size_tj=i;j<my_sys->len-1;j++)*(my_sys->staff+j)=*(my_sys->staff+j+1);my_sys->len--;break;}}if(i>=m)cout<<"系统中没有此职工信息"<<endl;}}//统计:统计符合指定条件(如职工工资前三项之和在3000元以上、3000~2000元、2000~1000元)//以内的工资职工人数及占总职工人数的百分比。voidtongji(System*my_sys)/*m-n为1000-2000,2000-3000,3000-max*/{doublenumber=0.0;doublemoney=0.0;doublem=0.0;doublen=0.0;if(my_sys->len==0){cout<<"系统中没有保存职工信息"<<endl;}else{cout<<"请输入你要统计的职工信息指定的条件m和n:";cin>>m>>n;for(size_ti=0;i<my_sys->len;i++){money=(my_sys->staff+i)->mon1+(my_sys->staff+i)->mon2+(my_sys->staff+i)->mon3;if((money>=m)&&(money<=n))number++;}cout<<"职工工资前三项之和在"<<m<<"--"<<n<<"职工人数及占总职工人数的百分比为:"<<(double)number/my_sys->len<<endl;}}//求每一项的平均值voidmoney(System*my_sys){doublecount1=0;doublecount2=0;doublecount3=0;doublecount4=0;doublecount5=0;if(my_sys->len>0){for(size_ti=0;i<my_sys->len;i++){count1=count1+my_sys->staff->mon1;count2=count2+my_sys->staff->mon1;count3=count3+my_sys->staff->mon1;count4=count4+my_sys->staff->mon1;count5=count5+my_sys->staff->mon1;}cout<<"各项工资的平均工资为"<<count1/my_sys->len<<""<<count2/my_sys->len<<""<<count3/my_sys->len<<""<<count4/my_sys->len<<""<<count5/my_sys->len<<endl;}}//从文件读取职工信息voidRead(System*my_sys){Staffs;FILE*pf=fopen(FILENAME,"r");if(pf==NULL){perror("error:");Free(my_sys);exit(EXIT_FAILURE);}while(fread(&s,sizeof(Staff),1,pf))//从文件中读取数据,,直到读取的为空{IF_space(my_sys);my_sys->staff[my_sys->len++]=s;}fclose(pf);//记着关闭文件}//将职工信息写入文件voidSave(System*my_sys){FILE*pf=fopen(FILENAME,"w");if(pf==NULL){perror("error:");Free(my_sys);exit(EXIT_FAILURE);}for(size_ti=0;i<my_sys->len;i++){fwrite(my_sys->staff+i,1,sizeof(Staff),pf);}fclose(pf);}voidFree(System*my_sys){if(my_sys->staff!=NULL){free(my_sys->staff);my_sys->staff=NULL;}}

测试代码:

#define_CRT_SECURE_NO_WARNINGS#include"xiaodong.h"voidmenu(){cout<<"#######################################################################"<<endl;cout<<"--------------------------职工工资管理系统()---------------------------"<<endl;cout<<"***********************************************************************"<<endl;cout<<"**1.修改职工信息**"<<endl;cout<<"**2.添加职工信息**"<<endl;cout<<"**3.删除职工信息**"<<endl;cout<<"**4.查找职工信息**"<<endl;cout<<"**5.统计职工信息**"<<endl;cout<<"**6.显示职工信息**"<<endl;cout<<"**0.退出系统**"<<endl;cout<<"#######################################################################"<<endl;}intmain(){Systemmy_system;intinput=1;Initclass(&my_system);Read(&my_system);while(input){menu();cout<<"请输入要选择的功能:>";cin>>input;switch(input){case1:Update(&my_system);break;case2:Input(&my_system);break;case3:Delete(&my_system);break;case4:Select(&my_system);break;case5:tongji(&my_system);break;case6:cout<<"ID号姓名基本工资职务工资津贴医疗保险公积金总工资平均工资"<<endl;my_system.print();money(&my_system);break;case0:break;default:break;}}Save(&my_system);free(my_system.staff);//一定要记得回收system("pause");return0;}

到此,相信大家对“C++如何实现职工工资管理系统”有了更深的了解,不妨来实际操作一番吧!这里是恰卡编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

发布于 2022-03-17 21:15:45
收藏
分享
海报
0 条评论
20
上一篇:SpringBoot+Redis布隆过滤器防恶意流量击穿缓存的方法 下一篇:jQuery如何为函数创建一个基本测试用例
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码