谁能帮助我添加一个功能
高校有五类职工:教师,实验员,行政人员,教师兼职实验员,行政人员兼职教师。为了实现工资发放的自动功能,现要求编写程序来自动完成此功能。同时注意生成的相关数据结果以文件方式存放在硬盘中。程序应具备从键盘录入,文件的可继续录入,任意职工的工资查询(可由职工编号和职工姓名来实现),若有职工由于工作调动,则可进行相对应的调整动作。我的程序最后一个功能既工作调动的功能无法实现,如果添加一个删除功能怎么添加?
程序源代码:
#include<iostream>
#include<string>
#include<fstream>
#include<iomanip>
using namespace std;
ofstream outfile; //输出文件
ifstream infile; //输入文件
class worker //基类
{
public:
int No_;
string name;
protected:
float bsalary; //基本工资
float salary; //应发工资
public:
void input() //输入职工姓名和编号
{
cout<<"职工编号:";
cin>>No_;
cout<<"职工姓名:";
cin>>name;
}
void output() //输出职工编号,姓名及应发工资
{
cout<<"职工编号:";
cout<<No_<<endl;
cout<<"职工姓名:";
cout<<name<<endl;
cout<<"工资:";
cout<<salary<<endl;
}
};
class teacher:virtual public worker //教师类
{
protected:
float tsalary; //课时费
int bwork; //基本工作量
int work; //上学期工作量
public:
teacher() //给基本工作量和基本工资赋值
{
bwork=120;
bsalary=800;
}
void inputt() //输入上学期工作量
{
cout<<"上学期工作量:";
cin>>work;
}
void settsalary() //计算课时费
{
tsalary=(work-bwork)*20;
}
void set1() //计算工资
{
salary=bsalary+tsalary;
}
void save1() //保存教师信息与应发工资
{
outfile.open("f1.dat",ios::app);
outfile<<setw(10)<<No_<<setw(20)<<name<<setw(10)<<salary<<endl;
outfile.close();
}
void read1() //读出教师信息与应发工资并分别赋值给No_,name,salary
{
infile.open("f1.dat",ios::in);
infile>>No_>>name>>salary;
infile.close();
}
};
class researcher:virtual public worker //实验员类
{
protected:
float rsalary; //实验室补助
public:
researcher() //给实验室补助和基本工资赋值
{
rsalary=150;
bsalary=650;
}
void set2() //计算工资
{
salary=rsalary+bsalary;
}
void save2() //保存信息与应发工资
{
outfile.open("f2.dat",ios::app);
outfile<<setw(10)<<No_<<setw(20)<<name<<setw(10)<<salary<<endl;
outfile.close();
}
void read2() //读出信息与应发工资
{
infile.open("f2.dat",ios::in);
infile>>No_>>name>>salary;
infile.close();
}
};
class officer:virtual public worker //行政人员类
{
protected:
float osalary; //行政人员补贴
public:
officer() //给行政人员补贴和基本工资赋值
{
osalary=250;
bsalary=750;
}
void set3() //计算工资
{
salary=osalary+bsalary;
}
void save3() //保存信息与应发工资
{
outfile.open("f3.dat",ios::app);
outfile<<setw(10)<<No_<<setw(20)<<name<<setw(10)<<salary<<endl;
outfile.close();
}
void read3() //读出信息与应发工资并分别赋值给No_,name,salary
{
infile.open("f3.dat",ios::in);
infile>>No_>>name>>salary;
infile.close();
}
};
class tandr:virtual public teacher,public researcher //教师兼职实验员类
{
public:
tandr() //给实验室补助和基本工资赋值
{
bsalary=800;
rsalary=150;
}
void set4() //计算工资
{
salary=bsalary+rsalary;
}
void save4() //保存信息与应发工资
{
outfile.open("f4.dat",ios::app);
outfile<<setw(10)<<No_<<setw(20)<<name<<setw(10)<<salary<<endl;
outfile.close();
}
void read4() //读出信息与应发工资并分别赋值给No_,name,salary
{
infile.open("f4.dat",ios::in);
infile>>No_>>name>>salary;
infile.close();
}
};
class tando:virtual public teacher,public officer //行政人员兼职教师类
{
public:
tando() //给行政人员补贴和基本工资赋值
{
bsalary=750;
osalary=250;
}
void set5() //计算工资
{
salary=bsalary+osalary+tsalary;
}
void save5() //保存信息与应发工资
{
outfile.open("f5.dat",ios::app);
outfile<<setw(10)<<No_<<setw(20)<<name<<setw(10)<<salary<<endl;
outfile.close();
}
void read5() //读出信息与应发工资并分别赋值给No_,name,salary
{
infile.open("f5.dat",ios::in);
infile>>No_>>name>>salary;
infile.close();
}
};
void main()
{
teacher t[100];
researcher r[100];
officer o[100];
tandr tr[100];
tando to[100]; //分别定义各类的对象数组,就相当于人员的容量,定义为100,表明能容100人
int x,n,a=0,b=0,c=0,d=0,e=0,j=1,k=1;
string m;
cout<<"1:输入教师信息"<<endl;
cout<<"2:输入实验员信息"<<endl;
cout<<"3:输入行政人员信息"<<endl;
cout<<"4:输入教师兼职实验员信息"<<endl;
cout<<"5:输入行政人员兼职教师信息"<<endl;
cout<<"6:以姓名输入查看人员工资"<<endl;
cout<<"7:以编号输入查看人员工资"<<endl;
cout<<"0:退出系统"<<endl;
cout<<endl;
while(x!=0) //执行循环,只要X不为0就一直循环下去
{
cout<<"输入数字执行操作:";
cin>>x;
switch(x) //执行switch语句,分别对输入的X值执行不同的操作
{case 1:t[a].input(); //输入教师信息计算工资后保存
t[a].inputt();
t[a].settsalary();
t[a].set1();
t[a].save1();
a++;
break;
case 2:r[b].input(); //输入实验员信息计算工资后保存
r[b].set2();
r[b].save2();
b++;
break;
case 3:o[c].input(); //输入行政人员信息计算工资后保存
o[c].set3();
o[c].save3();
c++;
break;
case 4:tr[d].input(); //输入教师兼职实验员信息计算工资后保存
tr[d].inputt();
tr[d].settsalary();
tr[d].set4();
tr[d].save4();
d++;
break;
case 5:to[e].input(); //输入行政人员兼职教师信息计算工资后保存
to[e].inputt();
to[e].settsalary();
to[e].set5();
to[e].save5();
e++;
break;
case 6:cout<<"输入姓名:"; //以姓名输入查看人员工资
cin>>m;
j=1;
while(j==1)
{
for(int i=0;i<a;i++) //读出并检查教师类,如果符合if语句,执行输出函数
{t[i].read1();
if(t[i].name==m)
{
t[i].output();
j=0;
}
}
for(i=0;i<b;i++) //读出并检查实验员类,如果符合if语句,执行输出函数
{r[i].read2();
if(r[i].name==m)
{
r[i].output();
j=0;
}
}
for(i=0;i<c;i++) //读出并检查行政人员类,如果符合if语句,执行输出函数
{o[i].read3();
if(o[i].name==m)
{
o[i].output();
j=0;
}
}
for(i=0;i<d;i++) //读出并检查教师兼职实验员类,如果符合if语句,执行输出函数
{tr[i].read4();
if(tr[i].name==m)
{
tr[i].output();
j=0;
}
}
for(i=0;i<e;i++) //读出并检查行政人员教师类,如果符合if语句,执行输出函数
{to[i].read5();
if(to[i].name==m)
{
to[i].output();
j=0;
}
}
if(j==1) //没找到
{cout<<"没找到!"<<endl;
}
break;
}
break;
case 7:cout<<"输入编号:"; //以编号输入查看人员工资
cin>>n;
k=1;
while(k==1)
{
for(int i=0;i<a;i++) //读出并检查教师类,如果符合if语句,执行输出函数
{t[i].read1();
if(t[i].No_==n)
{
t[i].output();
k=0;
}
}
for(i=0;i<b;i++) //读出并检查实验员类,如果符合if语句,执行输出函数
{r[i].read2();
if(r[i].No_==n)
{
r[i].output();
k=0;
}
}
for(i=0;i<c;i++) //读出并检查行政人员类,如果符合if语句,执行输出函数
{o[i].read3();
if(o[i].No_==n)
{
o[i].output();
k=0;
}
}
for(i=0;i<d;i++) //读出并检查教师兼职实验员类,如果符合if语句,执行输出函数
{tr[i].read4();
if(tr[i].No_==n)
{
tr[i].output();
k=0;
}
}
for(i=0;i<e;i++) //读出并检查行政人员教师类,如果符合if语句,执行输出函数
{to[i].read5();
if(to[i].No_==n)
{
to[i].output();
k=0;
}
}
if(k==1) //没找到
{cout<<"没找到!"<<endl;
k=0;
}
break;
}
break;
}
}
cout<<"退出系统"<<endl; //输入X值为0的后果
}