C语言课程设计某企业职工工资管理系统

2022-04-19 教育 105阅读
我这里有一份我当年坐课程设计的程序,你可以改改
#include
#include
#include
#include
#include
usingnamespacestd;

structworker_inf
{
intmonth;//月份
intcode;//工人编号
stringname;//姓名
floatget[4];//基本工资,津贴,房帖,交通补贴
floatpay[4];//房租,储蓄,交通费,会费
floattax;//个人所得税
floattheory_num;//应发书
floatreduce_num;//应扣数
floatpractice_num;//实发数
worker_inf*next;
};
/////////////////////////////////////////////////////////////////
classworker//定义职工类
{
private:
worker_inf*head;
voidprint(worker_inf*);//输出一条指定职工的工资记录,并返回该记录的指针
worker_inf*find(int);//查找条例条件的记录,并返回该记录的指针

public:
worker(){head=NULL;}
worker_inf*get_head(){returnhead;}
intlistcount();//统计当前链表的记录总数,并返回一个整数
voidadditem(intmonth,intcode,stringname,floatget[4],floatpay[4]);//添加一条工资记录表尾
voidremoveitem(int);//删除一条指定职工的工资记录
intmenu();//修改某职工工资的菜单
voidchangemonth();//修改月份
voidchangeitem(int);//修改职工的工资信息
voidlist();//输出当月全体职工的工资信息
voidsearch(int);//输出指定编号职工的工资信息
floattax_num();//计算职工个人所得税
floattheorynumber();//计算应发工资
floatreducenumber();//计算应扣工资
floatpracticenumber();//计算实发工资
};
//////////////////////////////////////////////////////////////////
intworker::listcount()//统计当前链表数,并返回一个整数
{

if(!head)return0;
worker_inf*p=head;
intn=0;
while(p)
{n++;p=p->next;}
returnn;
}
//////////////////////////////////////////////////////////////////
voidworker::additem(intmonth,intcode,stringname,floatget[4],floatpay[4])//添加一条工资记录到表尾
{
if(!head)
{
head=newworker_inf;
for(inti=0;i<4;i++)
{
head->get[i]=get[i];
head->pay[i]=pay[i];
}
head->code=code;
head->month=month;
head->name=name;
head->next=NULL;
return;
}
worker_inf*t=head;
while(t&&t->code!=code)
t=t->next;
if(t)
{
cout<<"操作失败:编号为"<return;
}
worker_inf*p=head;
while(p->next)p=p->next;
worker_inf*p1=newworker_inf;
p1->code=code;
for(inti=0;i<4;i++)
{
p1->get[i]=get[i];
p1->pay[i]=pay[i];
}
p1->code=code;
p1->month=month;
p1->name=name;
p1->next=NULL;
p->next=p1;
return;
}
////////////////////////////////////////////////////////////////////
voidworker::removeitem(intcode)//删除一条指定职工的工资记录
{
worker_inf*t=find(code);
if(!t)return;
worker_inf*p=head;//如果要删除的记录位于表头
if(head==t)
{
head=head->next;
deletep;
cout<<"成功删除编号为"<return;
}
while(p->next!=t)p=p->next;
worker_inf*p1=p->next;
p->next=p1->next;
deletep1;
cout<<"成功删除编号为"<return;
}
////////////////////////////////////////////////////////////////
intworker::menu()//修改某一职工信息的菜单
{
intselect=-1;
cout<<"\t\t\t\t\t\t**************修改菜单**************"<cout<<"1.基本工资"<cout<<"2.津贴"<cout<<"3.房帖"<cout<<"4.交通补贴"<cout<<"5.房租"<cout<<"6.储蓄"<cout<<"7.交通费"<cout<<"8.会费"<cout<<"0.退出修改系统"<cout<<"[请选择(输入相应数字)]:";
cin>>select;
if(select<0||select>9)
{
cout<<"对不起您输入错误!请重新输入【0-9】:"<cin>>select;
}
returnselect;
}
/////////////////////////////////////////////////////////////////
intmenu();
voidworker::changeitem(intcode)//修改某职工部分工资信息
{
worker_inf*p=find(code);
if(!p){cout<<"不存在职工编号为"<intselect;
while(1)
{
floatm;
select=menu();
if(select==0){system("cls");break;}
cout<<"请输入修改后的值";
cin>>m;
intn;
if(select<=4){
n=select-1;
p->get[n]=m;}
else{
n=select-5;
p->pay[n]=m;}
tax_num();
theorynumber();
reducenumber();
practicenumber();
cout<<"修改成功"<}
}
////////////////////////////////////////////////////////////////////
voidworker::changemonth()//修改月份
{
worker_inf*p=head;
while(p)
{
if(p->month==12)p->month=1;
else
p->month++;
p=p->next;
}
}
//////////////////////////////////////////////////////////////////////
voidworker::print(worker_inf*p)//输出worker_inf制定的记录
{
cout.precision(0);
cout<month<<"";
cout<code<<"";
cout<name<<"\t";
for(inti=0;i<4;i++)
{cout<get[i]<<"\t";}
for(intj=0;j<4;j++)
{cout<pay[j]<<"\t";}
cout<tax<<"\t";
cout<theory_num<<"\t";
cout<reduce_num<<"\t";
cout<practice_num<return;
}

///////////////////////////////////////////////////////////////////////
voidworker::list()//列出当前链表中的所有记录
{
if(listcount==0)
{
cout<<"错误:当前的列表为空!"<return;
}
worker_inf*p=head;
cout<<"共有记录:"<cout<<"月份\t编号\t姓名\t基本工资\t津贴\t房帖\t交通补贴\t房租\t储蓄\t交通费\t会费\t个人所得税\t应发工资\t应扣工资\t实际工资"<while(p)
{
print(p);
p=p->next;
}
cout<return;
}
/////////////////////////////////////////////////////////////////////////
voidworker::search(intcode)//在当前链表查找指定记录并输出
{
cout<<"searching....."<worker_inf*p=find(code);
if(p)
{
cout<<"月份\t编号\t姓名\t基本工资\t津贴\t房帖\t交通补贴\t房租\t储蓄\t交通费\t会费\t个人所得税\t应发工资\t应扣工资\t实际工资"<print(p);
}
cout<}
//////////////////////////////////////////////////////////////////////////
worker_inf*worker::find(intcode)//查找条例条件的记录,并返回该指针
{
if(listcount==0)
{
cout<<"错误:当前列表为空!"<returnNULL;
}
worker_inf*p=head;
while(p)
{
if(p->code==code)break;
p=p->next;
}
if(!p)
{
cout<<"错误:找不到该记录!\n";
returnNULL;
}
returnp;
}
//////////////////////////////////////////////////////////////////////////
floatworker::theorynumber()//计算应发数
{
inti;
if(listcount()==0)
{
cout<<"错误:当前的列表为空!"<return-1;
}
floatsum;
worker_inf*p=head;
while(p)
{
sum=0;
for(i=0;i<4;i++)
sum+=p->get[i];
p->theory_num=sum;
p=p->next;
}
return0;
}
//////////////////////////////////////////////////////////////////
floatworker::tax_num()//计算个人所得税
{
if(listcount==0)
{
cout<<"错误:当前的列表为空!"<return-1;
}
worker_inf*p=head;
while(p)
{
floats;
s=p->theory_num;
if(s<=800)
p->theory_num=0;
elseif(s<=2000)p->theory_num=(s-800)*0.05;
elseif(s<=5000)
p->theory_num=(s-2000)*0.1+60;
elsep->theory_num=(s-5000)*0.2+360;
p=p->next;
}
return0;
}
///////////////////////////////////////////////////////////////////////
floatworker::reducenumber()//计算应扣数
{
inti;
if(listcount==0)
{
cout<<"错误:当前的列表为空!"<}
floatsum;
worker_inf*p=head;
while(p)
{
sum=0;
for(i=0;i<4;i++)
sum+=p->pay[i];
p->reduce_num=p->tax+sum;
p=p->next;
}
return0;
}
/////////////////////////////////////////////////////////////////////////
floatworker::practicenumber()//计算实发数
{
if(listcount()==0)
{
cout<<"错误:当前的列表为空!"<return-1;
}
worker_inf*p=head;
while(p)
{
floata,b;
a=p->theory_num;
b=p->reduce_num;
p->practice_num=a-b;
p=p->next;
}
return0;
}
////////////////////////////////////////////////////////////////////////////
workerworker;//定义全局变量
intmenu()
{
intselect=-1;
cout<<"*****************主菜单***********************"<cout<<"1.添加职工信息;"<cout<<"2.删除职工信息;"<cout<<"3.修改职工的工资信息;"<cout<<"4.按职工编号查找记录;"<cout<<"5.列出所有记录;"<cout<<"6.从数据文件导入当月工资信息;"<cout<<"7.将当月工资信息导出到磁盘文件;"<cout<<"0.安全退出系统;"<cout<<"[请选择(输入相应的数字)]:";
cin>>select;
returnselect;
}
/////////////////////////////////////////////////////////////////////////////
charexit()
{
chars;
cout<<"确定要退出程序吗?[Y/N]:";
cin>>s;
returns;
}
//////////////////////////////////////////////////////////////////////////////
voidinput(int*month,int*code,string*name,floatget[4],floatpay[4])//输入职工信息
{
cout<<"请输入月份编号姓名基本工资津贴房帖交通补贴房租储蓄交通费会费:"<cin>>*month;
cin>>*code;
if(*code==-1)return;
cin>>*name>>get[0]>>get[1]>>get[2]>>get[3]>>pay[0]>>pay[1]>>pay[2]>>pay[3];
return;
}
///////////////////////////////////////////////////////////////////////////////
voidaddnew()//增加记录
{
intmonth=0,code=0;floatget[4]={0},pay[4]={0};
stringname="";
cout<input(&month,&code,&name,get,pay);
while(code!=-1)
{
worker.additem(month,code,name,get,pay);
worker.tax_num();
worker.theorynumber();
worker.reducenumber();
worker.practicenumber();
input(&month,&code,&name,get,pay);
}
return;
}
////////////////////////////////////////////////////////////////////////////////
voiddofind()//按职工编号查找
{
intcode;
cout<do
{
cout<<"请输入要查找的职工的编号:";
cin>>code;
if(code==-1)continue;
worker.search(code);
}while(code!=-1);
return;
}
/////////////////////////////////////////////////////////////////////////////////
voiddodelete()//删除职工信息
{
cout<intcode;
do
{
cout<<"请输入要删除的职工的编号:";
cin>>code;
if(code==-1)continue;
worker.removeitem(code);
}while(code!=-1);
return;
}
///////////////////////////////////////////////////////////////////////////////////
voiddomodify()//修改职工信息
{
intcode;
cout<<"当输入职工编号为-1时表示结束修改"<while(1){
cout<<"请输入所需修改职工编号";
cin>>code;
if(code==-1)return;
else
worker.changeitem(code);
}
return;
}
///////////////////////////////////////////////////////////////////////////////////
voidSaveFilethism()//将当月工资信息写入文件
{
worker_inf*p;
charname[20];
fstreamiofile;
inti=0;
iofile.open("Worker_5th.dat",ios::out|ios::binary);
if(!iofile)
{
cerr<<"openerror!"<abort();
}
p=worker.get_head();
while(p)
{
p->name.copy(name,20,0);
name[p->name.length()]=0;
iofile.write((char*)&p->code,sizeof(int));
iofile.write((char*)&p->month,sizeof(int));
iofile.write((char*)name,20);
for(inti=0;i<4;i++)
{
iofile.write((char*)&p->get[i],sizeof(float));
}
for(intj=0;j<4;j++)
{
iofile.write((char*)&p->pay[j],sizeof(float));
}
p=p->next;
}
iofile.close();
cout<<"成功将工资信息存入文件"<}
////////////////////////////////////////////////////////////////////////
voidLoadfilethism()//读取当月全体职工的工资信息文件
{
intmonth,code;
charname[20]="";
floatget[4],pay[4];
fstreamiofile;
inti=0;
iofile.open("Worker_5th.dat",ios::in|ios::binary);
if(!iofile)
{
cout<<"数据文件不存在,请先建立该文件"<return;
}
if(iofile.eof())
{
cout<<"数据库为空,请先添加数据"<iofile.close();
}
else
{
while(iofile.peek()!=EOF)//peek()是取文件当前指针,EOF是文件尾标符
{
iofile.read((char*)&code,sizeof(int));
iofile.read((char*)&month,sizeof(int));
iofile.read((char*)name,20);
for(inti=0;i<4;i++)
{
iofile.read((char*)&get[i],sizeof(float));
}for(intj=0;j<4;j++)
{
iofile.read((char*)&pay[j],sizeof(float));
}
worker.additem(code,month,name,get,pay);
}
worker.tax_num();
worker.theorynumber();
worker.reducenumber();
worker.practicenumber();
iofile.close();
cout<<"成功导入工资信息"<}
}
/////////////////////////////////////////////////////////////////////////
voidlist()
{
worker.list();
}
/////////////////////////////////////////////////////////////////////////
intmain()
{
cout<<"******************欢迎进入职工工资管理系统*******************"<intselect;
chars;
while(1)
{
select=menu();
switch(select)
{
case0://退出程序
s=exit();
if(s=='y'||s=='Y')return0;
break;
case1://增加新记录
addnew();
break;
case2://删除记录
dodelete();
break;
case3://修改记录
domodify();
break;
case4://按条件查找
dofind();
break;
case5://列出全部记录
list();
break;
case6://导入当月职工记录
Loadfilethism();
break;
case7://将职工记录存入磁盘
SaveFilethism();
break;
default:
cout<<"此输入无效!"<}
}
return0;
}
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com