1、职工工资管理系统课程设计题目:实现一个简单的工资管理系统。系统的主要功能是计算职工当月工资并存档。公司内有5种不同类型的职工:技术人员、销售人员、文秘、技术经理和销售经理,他们的工资计算方式各不相同。技术人员的工资根据他当月工作的小时数来定,时薪35元;销售人员的工资则是根据本人当月销售额来确定,工资为销售额的5;文秘有4000元的基本工资,奖金视为当月工作情况而定;技术经理和销售经理都有6000元的固定工资,技术经理的工作业绩可分为3个等级,每级可获得1000元奖金,销售经理的奖金由他所管理的销售员的销售业绩而定,总销售额的02.%职工工资管理系统的设计:对于整个系统的设计思路是,首先,由员
2、工输入用户信息,包括编号、姓名和职务;然后,在计算某职工的当月工资时,系统先从已输入的职工信息文件中获取职工的工作类型,接着调用不同的处理程序进行计算;最后将结果存档。从用户需求中,可以发现5种类型的职员都可以分别设计为一个类。首先,他们都属于雇员,因此可以设计一个基类employee(雇员),然后从中派生出technician(技术人员)类,salesman(销售人员)类、secretary(文秘)类。对于技术经理和销售经理来说,他们都属于经理,所以设计时可以从employee类中派生出一个manager(经理)类作为techmanager(技术经理)和salesman(销售经理)类的父类。
3、而经理类本身并不对应实际的员工类型,由于技术经理有技术人员和经理的双重特点,因此techmanager类同时继承technician类和manger类;销售经理有销售人员和经理的双重特点,因此salesmanager类同时继承salesman类和manager类.根据用户需要employee类应该拥有的属性有:编号、姓名、职务、月份和工资。Employee类的服务可以包括info()、 search()、countSalary()、recordInfo()和recordSalary()。其中,info()函数用于接收用户输入的职工信息;search()函数用来根据职工名查找职工信息;count
4、Salary()函数为工资计算函数,但在基类中为空,原因是各类人员的工资计算方法不同,无法在基类中统一定义,必须在派生类中分别定义.recordInfo()函数和recordSalary()函数分别是职工信息和职工工资的记录函数,分别将信息存入文件info。txt和salary。txt。有的请发邮件至416459010qq。com 满意追加.满意答案為鉨/xin鈊動 4级 201101-11职工基本信息:如职工号、身份证号、姓名、性别、年龄、工龄、部门、技术职称、技术职称编号、家庭电话号码、手机号码等.l 工资基础信息:技术职称编号、技术职称、基本工资、职务工资、各种补助等。l 费用扣除信息:
5、工资卡号、水费、电费、清洁费(5元/月)、闭路电视费(10元/月)等。工资单数据:工资卡号、姓名、应发工资、水费、电费、清洁费、闭路电视费、税金、实发工资、特别奖励。其中:税金计算方法为:应发工资800元,税金=0;8001400元, 税金=(应发工资1400)10总体设计,要有一个菜单,用于选择各项功能,其中1) 数据录入:输入各种数据;2) 数据统计:工资计算及最终按总工资进行的排序;3) 数据打印:打印上述表格;4) 数据备份:把相关数据写入文件;5) 退出:退出本系统 includeiostream.h#includestdio.h#includeincludestring。h#def
6、ine FILENAME ”staff。txt /数据文件/struct Staff /职工机构体char CarNumber10; /卡号char Name10; /姓名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(F
7、ileName,”w”);cout文件打开失败重新创建记录文件”;return fp;fp=fopen(FileName,r+”);return fp;void FileClose(FILE *fp)if(fclose(fp)=0)cout”安全关闭”endl;elsecout文件关闭失败endl;/void Increase() /添加职工信息FP=FileOpen(FILENAME);Staff temp;coutendl;couttemp。Name;cout”请输入卡号:”;cintemp.CarNumber;couttemp。Month;couttemp。SPWages;couttem
8、p.Water;couttemp。Electrical;if(temp。SPWages=800) temp.Tax=0;if((temp.SPWages800。0)&(temp。SPWages1400)temp。Tax=(temp.SPWages1400)0。1;temp。APWages=temp.SPWages-temp.Watertemp。Electrical-temp.Tax;fwrite(&temp,sizeof(temp),1,FP);cout”信息添加成功,请选择浏览工资信息选项进行查看endl;FileClose(FP);/void PrintInformation() /浏览工
9、资信息FP=FileOpen(FILENAME);rewind(FP);Staff temp;while(fread(&temp,sizeof(Staff),1,FP)=1) cout姓名:temp.Nameendl; cout卡号:”temp.CarNumberendl; cout”月份:temp.Monthendl; cout应发工资:”temp。SPWagesendl; cout”水费:temp。Waterendl; cout电费:”temp.Electricalendl; cout”税金:temp。Taxendl; cout实发工资:”temp.APWagesendl; coutend
10、l;FileClose(FP);/void Statistics() /统计工资信息Staff temp;char nametemp10;float sum=0;int monthstart=0,monthover=0;cout”请输入统计的人员姓名:”nametemp;cout”请输入统计时间段的起始月份(如:3)”;cinmonthstart;cout请输入统计时间段的终止月份(如:3);cinmonthover;FP=FileOpen(FILENAME);while(fread(temp,sizeof(Staff),1,FP)=1) if(strcmp(temp.Name,nametem
11、p)=0) if(temp.Month=monthstarttemp.Month=monthover) sum=sum+temp.APWages; cout”职工”nametemp”从”monthstart”月至”monthover月合计sum元。endl;/void NameSearch()char tempname10;Staff temp;coutendl;couttempname;FP=FileOpen(FILENAME);while(fread(temp,sizeof(Staff),1,FP)=1) if(strcmp(temp。Name,tempname)) cout”姓名:”te
12、mp.Nameendl; cout”卡号:temp.CarNumberendl; cout”月份:temp.Monthendl; cout应发工资:temp.SPWagesendl; cout”水费:temp。Waterendl; cout”电费:temp。Electricalendl; cout”税金:temp.Taxendl; cout”实发工资:”temp。APWagesendl; coutendl; FileClose(FP);int Search()int Choose=0;while(1) coutendl; cout”请选择查询方式endl; cout1、按照卡号查询”endl;
13、 cout”2、按照姓名查询endl; cout”0、返回上级目录endl; coutChoose; switch(Choose) case 1:;break; case 2:NameSearch();break; case 0:return 0;break; /void ShowMenu() /目录显示函数int Choose=0;while(1) coutendl; cout工资信息管理系统”endl; cout”1、添加工资信息。”endl; cout”2、浏览工资信息.endl; cout”3、统计工资信息。endl; cout”4、查询工资信息。endl; cout0、退出系统。”endl; cout请输入服务类型:”; cinChoose; 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();