资源描述
职工工资管理系统课程设计题目:
实现一个简单的工资管理系统。系统的主要功能是计算职工当月工资并存档。公司内有5种不同类型的职工:技术人员、销售人员、文秘、技术经理和销售经理,他们的工资计算方式各不相同。
技术人员的工资根据他当月工作的小时数来定,时薪35元;销售人员的工资则是根据本人当月销售额来确定,工资为销售额的5%;文秘有4000元的基本工资,奖金视为当月工作情况而定;技术经理和销售经理都有6000元的固定工资,技术经理的工作业绩可分为3个等级,每级可获得1000元奖金,销售经理的奖金由他所管理的销售员的销售业绩而定,总销售额的02.%
职工工资管理系统的设计:
对于整个系统的设计思路是,首先,由员工输入用户信息,包括编号、姓名和职务;然后,在计算某职工的当月工资时,系统先从已输入的职工信息文件中获取职工的工作类型,接着调用不同的处理程序进行计算;最后将结果存档。
从用户需求中,可以发现5种类型的职员都可以分别设计为一个类。首先,他们都属于雇员,因此可以设计一个基类employee(雇员),然后从中派生出technician(技术人员)类,salesman(销售人员)类、secretary(文秘)类。对于技术经理和销售经理来说,他们都属于经理,所以设计时可以从employee类中派生出一个manager(经理)类作为techmanager(技术经理)和salesman(销售经理)类的父类。而经理类本身并不对应实际的员工类型,由于技术经理有技术人员和经理的双重特点,因此techmanager类同时继承technician类和manger类;销售经理有销售人员和经理的双重特点,因此salesmanager类同时继承salesman类和manager类.
根据用户需要employee类应该拥有的属性有:编号、姓名、职务、月份和工资。Employee类的服务可以包括info()、 search()、countSalary()、recordInfo()和recordSalary()。其中,info()函数用于接收用户输入的职工信息;search()函数用来根据职工名查找职工信息;countSalary()函数为工资计算函数,但在基类中为空,原因是各类人员的工资计算方法不同,无法在基类中统一定义,必须在派生类中分别定义.recordInfo()函数和recordSalary()函数分别是职工信息和职工工资的记录函数,分别将信息存入文件info。txt和salary。txt。
有的请发邮件至416459010@qq。com 满意追加.
满意答案
為鉨/xin鈊動 4级 2011—01-11
职工基本信息:如职工号、身份证号、姓名、性别、年龄、工龄、部门、技术职称、技术职称编号、家庭电话号码、手机号码等.
l 工资基础信息:技术职称编号、技术职称、基本工资、职务工资、各种补助等。
l 费用扣除信息:工资卡号、水费、电费、清洁费(5元/月)、闭路电视费(10元/月)等。
工资单数据:工资卡号、姓名、应发工资、水费、电费、清洁费、闭路电视费、税金、实发工资、特别奖励。其中:税金计算方法为:应发工资<800元,税金=0;800<应发工资£1400元, 税金=(应发工资-800)´5%
应发工资>1400元, 税金=(应发工资—1400)´10%
总体设计,要有一个菜单,用于选择各项功能,其中
1) 数据录入:输入各种数据;
2) 数据统计:工资计算及最终按总工资进行的排序;
3) 数据打印:打印上述表格;
4) 数据备份:把相关数据写入文件;
5) 退出:退出本系统 #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 0;break;
}
}
}
//////////////////////////////////////////////
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();
展开阅读全文