📄 cpp1.cpp
字号:
//yuangongguanli.cpp
#include<iostream.h>
#include<string.h>
#include<fstream.h>
#include<iomanip.h>
class yuangong //员工
{public:
void append();//增加员工
void display();//显示所有员工
void search();//查询单个员工
int number;//编号
char name[20];//姓名
char sex[20];//性别
char state[30];//职位
float salary;//工资
int age;//年龄
char xueli[30]; //学历
char dengji[20];//技术等级
char zhicheng[20];//职称
};
void yuangong::append()//增加员工
{
yuangong yg;
fstream f;
//yuangong *a=new yuangong;
f.open("yuangong.dat",ios::in|ios::out);
f.seekg(0,ios::end);
long pos=f.tellg();
int a=1;//辅助变量
int b,c,x,y,z,t,q,m;
do{ f.seekg(0,ios::beg);
cout<<"请输入员工编号:?"<<endl;
cin>>b;
do
{f.read((char *)&yg,sizeof(yuangong)); //搜索编号是否重复
}while(yg.number!=b&&f.tellg()!=pos);
if(yg.number==b)
{ cout<<"编号有重复!!!"<<endl;}
else
{a=0;
}
}while(a==1);
yg.number=b;
cout<<"请输入员工姓名:?";
cin>>yg.name;
l: cout<<"请选择员工性别:?";
cout<<"1.男性"<<'\t'<<"2.女性"<<endl;
cout<<"请选择:?";
cin>>c;
switch(c)
{ case 1: strcpy(yg.sex,"male");break;
case 2: strcpy(yg.sex,"female");break;
default : cout<<"输入错误!!,请重新输入!"<<endl;goto l;
}
cout<<"请输入员工年龄:?"<<endl;
cin>>yg.age;
m: cout<<"请选择员工职位:?"<<endl;
cout<<"1.经理"<<endl;
cout<<"2.行政人员"<<endl;
cout<<"3.技术人员"<<endl;
cout<<"4.钟点工"<<endl;
cout<<"5.工件工"<<endl;
cout<<"请选择:?";
cin>>m;
switch(m)
{ case 1: { strcpy(yg.state,"经理");
n: cout<<"请输入学历"<<endl;
cout<<"1。中学或中专"<<endl;
cout<<"2。大学或大专"<<endl;
cout<<"3。研究生 "<<endl;
cin>>x;
switch(x)
{ case 1: strcpy(yg.xueli,"中学或中专");
strcpy(yg.dengji,"unknow");strcpy(yg.zhicheng,"unkonw");break;
case 2: strcpy(yg.xueli,"大学或大专");
strcpy(yg.dengji,"unknow"); strcpy(yg.zhicheng,"unkonw");break;
case 3: strcpy(yg.xueli,"研究生");
strcpy(yg.dengji,"unknow");strcpy(yg.zhicheng,"unkonw");break;
default : cout<<"输入错误!!请重新输入!"<<endl;goto n;
}
break;}
case 2: { strcpy(yg.state,"行政人员");
o: cout<<"请输入学历"<<endl;
cout<<"1。中学或中专"<<endl;
cout<<"2。大学或大专"<<endl;
cout<<"3。研究生 "<<endl;
cin>>y;
switch(y)
{ case 1: strcpy(yg.xueli,"中学或中专");
strcpy(yg.dengji,"unknow");break;
case 2: strcpy(yg.xueli,"大学或大专");
strcpy(yg.dengji,"unknow");break;
case 3: strcpy(yg.xueli,"研究生");
strcpy(yg.dengji,"unknow");break;
default : cout<<"输入错误!!请重新输入!"<<endl;goto o;
}
p: cout<<"请输入行政人员的职称:"<<endl;
cout<<"1,初级"<<endl;
cout<<"2.中级"<<endl;
cout<<"3.高级"<<endl;
cin>>q;
switch(q)
{case 1:strcpy(yg.zhicheng,"初级");break;
case 2:strcpy(yg.zhicheng,"中级");break;
case 3:strcpy(yg.zhicheng,"高级");break;
default : cout<<"输入错误!!请重新输入!"<<endl;goto p;
}
break;
}
case 3: { strcpy(yg.state,"技术人员");
q: cout<<"请输入学历:?"<<endl;
cout<<"1。中学或中专"<<endl;
cout<<"2。大学或大专"<<endl;
cout<<"3。研究生 "<<endl;
cin>>z;
switch(z)
{ case 1: strcpy(yg.xueli,"中学或中专");
strcpy(yg.zhicheng,"unkonw");break;
case 2: strcpy(yg.xueli,"大学或大专");
strcpy(yg.zhicheng,"unkonw");break;
case 3: strcpy(yg.xueli,"研究生");
strcpy(yg.zhicheng,"unkonw");break;
default : cout<<"输入错误!!请重新输入!"<<endl;goto q;
}
r: cout<<"请输入技术人员的技术等级:?"<<endl;
cout<<"1,初级"<<endl;
cout<<"2.中级"<<endl;
cout<<"3.高级"<<endl;
cin>>t;
switch(t)
{case 1:strcpy(yg.dengji,"初级");break;
case 2:strcpy(yg.dengji,"中级");break;
case 3:strcpy(yg.dengji,"高级");break;
default : cout<<"输入错误!!请重新输入!"<<endl;goto r;
}
break;
}
case 4: { strcpy(yg.state,"钟点工");
strcpy(yg.xueli,"unknow");
strcpy(yg.dengji,"unknow");
strcpy(yg.zhicheng,"unkonw");break;
}
case 5: { strcpy(yg.state,"工件工");
strcpy(yg.xueli,"unkonw");
strcpy(yg.dengji,"unknow");
strcpy(yg.zhicheng,"unkonw");break;}
default : cout<<"输入错误!!请重新输入!"<<endl;goto m;
}
yg.salary=0; //默认工资=0
f.seekg(0,ios::end);
f.write((char *)&yg,sizeof(yuangong)); //写入文件
f.close();
}
void yuangong::display() //输出全部员工基本信息
{ fstream f;
yuangong yg;
f.open("yuangong.dat",ios::in|ios::out);
f.seekg(0,ios::end);
long pos=f.tellg();
f.seekg(0,ios::beg);
cout<<setw(10)<<"编号"<<setw(10)<<"姓名"<<setw(10)<<"性别"<<setw(10)<<"年龄"<<setw(10)<<"职位"<<endl;
do
{ f.read((char *)&yg,sizeof(yuangong)); //读取文件
cout<<setw(10)<<yg.number<<setw(10)<<yg.name<<setw(10)<<yg.sex<<setw(10)<<yg.age<<setw(10)<<yg.state<<endl;
}while(f.tellg()!=pos);
f.close();
}
void yuangong::search() //查询单个员工具体信息
{ yuangong yg;
fstream f;
f.open("yuangong.dat",ios::in|ios::out);
f.seekg(0,ios::end);
long pos=f.tellg();
f.seekg(0,ios::beg);
int a=1;
while(a==1)
{ cout<<"请输入要查询的员工的编号:?"<<endl;
int i;
cin>>i;
do
{f.read((char *)&yg,sizeof(yuangong)); //读搜索
}while(yg.number!=i&&f.tellg()!=pos);
cout<<setw(5)<<"编号"<<setw(8)<<"姓名"<<setw(8)<<"性别"<<setw(5)<<"年龄"<<setw(10)<<"职位"<<setw(10)<<"学历"<<setw(8)<<"职称"<<setw(12)<<"技术等级"<<setw(8)<<"工资"<<endl;
if(yg.number==i)
{
cout<<setw(5)<<yg.number<<setw(8)<<yg.name<<setw(8)<<yg.sex<<setw(5)<<yg.age<<setw(10)<<yg.state<<setw(10)<<yg.xueli<<setw(8)<<yg.zhicheng<<setw(12)<<yg.dengji<<setw(8)<<yg.salary<<endl;
a=0;
}else cout<<"没有此员工!!"<<endl;}
f.close();
}
class ganbu: virtual public yuangong//干部类
{public:
void print();//显示所有干部(包括经理,行政人员,技术人员)
};
void ganbu::print()//显示所有干部(包括经理,行政人员,技术人员)
{ yuangong yg;
fstream f;
f.open("yuangong.dat",ios::in|ios::out);
f.seekg(0,ios::end);
long pos=f.tellg();
f.seekg(0,ios::beg);
cout<<setw(8)<<"编号"<<setw(10)<<"姓名"<<setw(10)<<"性别"<<setw(10)<<"年龄"<<setw(10)<<"职位"<<setw(15)<<"学历"<<endl;
do
{ f.read((char *)&yg,sizeof(yuangong));
if((strcmp(yg.state,"经理")==0)||(strcmp(yg.state,"行政人员")==0)||(strcmp(yg.state,"技术人员")==0))
{
cout<<setw(8)<<yg.number<<setw(10)<<yg.name<<setw(10)<<yg.sex<<setw(10)<<yg.age<<setw(10)<<yg.state<<setw(15)<<yg.xueli<<endl;
}
}while(f.tellg()!=pos);
f.close();
}
class gongren:virtual public yuangong //工人类
{public:
void print();//显示所有工人(包括工件工,钟点工)
};
void gongren::print()//显示所有工人(包括工件工,钟点工)
{ yuangong yg;
fstream f;
f.open("yuangong.dat",ios::in|ios::out);
f.seekg(0,ios::end);
long pos=f.tellg();
f.seekg(0,ios::beg);
cout<<setw(10)<<"编号"<<setw(10)<<"姓名"<<setw(10)<<"性别"<<setw(10)<<"年龄"<<setw(15)<<"职位"<<endl;
do
{ f.read((char *)&yg,sizeof(yuangong));
if((strcmp(yg.state,"工件工")==0)||(strcmp(yg.state,"钟点工")==0))
{
cout<<setw(10)<<yg.number<<setw(10)<<yg.name<<setw(10)<<yg.sex<<setw(10)<<yg.age<<setw(15)<<yg.state<<endl;
}
}while(f.tellg()!=pos);
f.close();
}
class jishurenyuan:public ganbu//技术人员类
{public:
void salary();//计算技术人员工资
void print();//显示所有技术人员
};
void jishurenyuan::print()//显示所有技术人员
{yuangong yg;
fstream f;
f.open("yuangong.dat",ios::in|ios::out);
f.seekg(0,ios::end);
long pos=f.tellg();
f.seekg(0,ios::beg);
cout<<setw(10)<<"编号"<<setw(10)<<"姓名"<<setw(10)<<"性别"<<setw(10)<<"年龄"<<setw(15)<<"职位"<<setw(10)<<"学历"<<setw(10)<<"技术等级"<<endl;
do
{ f.read((char *)&yg,sizeof(yuangong));
if((strcmp(yg.state,"技术人员")==0))
{
cout<<setw(10)<<yg.number<<setw(10)<<yg.name<<setw(10)<<yg.sex<<setw(10)<<yg.age<<setw(15)<<yg.state<<setw(10)<<yg.xueli<<setw(10)<<yg.dengji<<endl;
}
}while(f.tellg()!=pos);
f.close();
}
void jishurenyuan::salary()//计算技术人员工资
{ int i;
fstream f;
yuangong yg;
float m,n;
f.open("yuangong.dat",ios::in|ios::out);
cout<<"请输入要计算工资的员工编号:";
cin>>i;
f.seekg(0,ios::end);
long pos=f.tellg();
f.seekg(0,ios::beg);
do
{f.read((char *)&yg,sizeof(yuangong)); //搜索
}while(yg.number!=i&&f.tellg()!=pos);
if(yg.number==i)
{ if(strcmp(yg.state,"技术人员")==0)
{ if(strcmp(yg.dengji,"初级")==0)
{m=500;}
else if(strcmp(yg.dengji,"中级 ")==0)
{m=700;}
else {m=900;}
if(strcmp(yg.xueli,"中学或中专")==0)
{n=1000;}
else if(strcmp(yg.xueli,"大学或大专")==0)
{n=1200;}
else {n=1500;}
yg.salary=m+n;
f.seekg(-long(sizeof(yuangong)),ios::cur);
f.write((char *)&yg,sizeof(yuangong));
cout<<setw(8)<<"编号"<<setw(8)<<"姓名"<<setw(8)<<"性别"<<setw(8)<<"年龄"<<setw(12)<<"职位"<<setw(12)<<"学历"<<setw(8)<<"职称"<<setw(12)<<"技术等级"<<setw(8)<<"工资"<<endl;
cout<<setw(8)<<yg.number<<setw(8)<<yg.name<<setw(8)<<yg.sex<<setw(8)<<yg.age<<setw(12)<<yg.state<<setw(12)<<yg.xueli<<setw(8)<<yg.zhicheng<<setw(12)<<yg.dengji<<setw(8)<<yg.salary<<endl;}
else cout<<"员工编号非行政人员"<<endl; }
else cout<<"输入错误编号"<<endl;
f.close();
}
class jingli:public ganbu//经理类
{public:
void salary();//计算经理工资
void print();//显示所有经理
};
void jingli::print()//显示所有经理
{yuangong yg;
fstream f;
f.open("yuangong.dat",ios::in|ios::out);
f.seekg(0,ios::end);
long pos=f.tellg();
f.seekg(0,ios::beg);
cout<<setw(10)<<"编号"<<setw(10)<<"姓名"<<setw(10)<<"性别"<<setw(10)<<"年龄"<<setw(15)<<"职位"<<setw(10)<<"学历"<<endl;
do
{ f.read((char *)&yg,sizeof(yuangong));
if((strcmp(yg.state,"经理")==0))
{
cout<<setw(10)<<yg.number<<setw(10)<<yg.name<<setw(10)<<yg.sex<<setw(10)<<yg.age<<setw(15)<<yg.state<<setw(10)<<yg.xueli<<endl;
}
}while(f.tellg()!=pos);
f.close();
}
void jingli::salary()//计算经理工资
{ int i;
fstream f;
yuangong yg;
float m;
f.open("yuangong.dat",ios::in|ios::out);
cout<<"请输入要计算工资的员工编号:";
cin>>i;
f.seekg(0,ios::end);
long pos=f.tellg();
f.seekg(0,ios::beg);
do
{f.read((char *)&yg,sizeof(yuangong)); //搜索
}while(yg.number!=i&&f.tellg()!=pos);
if(yg.number==i)
{ if(strcmp(yg.state,"经理")==0)
{
if(strcmp(yg.xueli,"中学或中专")==0)
{m=3000;}
else if(strcmp(yg.xueli,"大学或大专")==0)
{m=4000;}
else {m=4500;}
yg.salary=m;
f.seekg(-long(sizeof(yuangong)),ios::cur);
f.write((char *)&yg,sizeof(yuangong));
cout<<setw(8)<<"编号"<<setw(8)<<"姓名"<<setw(8)<<"性别"<<setw(8)<<"年龄"<<setw(12)<<"职位"<<setw(12)<<"学历"<<setw(8)<<"工资"<<endl;
cout<<setw(8)<<yg.number<<setw(8)<<yg.name<<setw(8)<<yg.sex<<setw(8)<<yg.age<<setw(12)<<yg.state<<setw(12)<<yg.xueli<<setw(8)<<yg.salary<<endl;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -