// 852369.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <string.h>
#include <stdlib.h>
#include<time.h>
#include<windows.h>
#include<conio.h>
using namespace std;
class Staff
//声明员工类
{
protected:
int
num,post;
char name[20];
float income;
public:
friend class Boss;//在一个非成员函数中,要想访问类的私有数据成员
//,该函数必须声明为该类的友元函数
Staff(){}
//声明一个无参的构造函数 Staff
Staff (int id,char *Name,int post,double pay);//定义一个有参的构造函数,用参数的初始化表对数据成员初始化
virtual double Pay(){return 0;}
};
Staff ::Staff (int id,char *Name,int Post,double pay)
//在类外定义有参构造函数
{
num=id;
post=Post;
income= pay;
strcpy(name,Name);
}
class TechniqueManager:public Staff
//声明技术经理类
{
public:
TechniqueManager(int id,char *Name,int
post,double pay):Staff (id,Name,post,pay){}
double Pay(){return income=5000;}
void display();
~TechniqueManager(){}
};
void TechniqueManager::display()//构造函数
{
Pay();
cout<<num<<"
"<<name<<"
技术经理
"<<income<<endl;
}
class BusinessManager:public Staff
//声明业务经理类
{
public:
double Amount, Programe;
BusinessManager(int id,char *Name,int post,double amount,double programe,double pay);
void SetAmount(double s,double d);
double Pay();
~BusinessManager(){}
};
BusinessManager::BusinessManager(int id,char *Name,int post,double amount,double programe,double pay):Staff (id,Name,post,pay)
//构造函数
{
Amount=amount;
Programe=programe;
}
void BusinessManager::SetAmount(double s,double d)
{
Amount=s;
Programe=d;
}
double BusinessManager::Pay()
{
return income=2000+Amount*15/100+Programe*10/100;
}
class Secretary:public
Staff
//声明文秘类
{
public:
Secretary(int
id,char *Name,int post,double pay):Staff (id,Name,post,pay){}
double Pay(){return income=1500;}
void display();
~Secretary(){}
};
void Secretary::display()
//构造函数
{
Pay();
cout<<num<<"
"<<name<<"
文 秘
"<<income<<endl;
}
class Financial:public Staff
//声明财务人员类
{
public:
Financial(int id,char *Name,int post,double pay):Staff (id,Name,post,pay){}
double Pay(){return income=2000;}
void display();
~Financial(){}
};
void Financial::display()
//构造函数
{
Pay();
cout<<num<<"
"<<name<<"
财务
"<<income<<endl;}
class Sales:public
Staff
//声明业务人员类
{
public:
double Amount,Programe;
Sales(int id,char *Name,int post,double amount,double programe,double pay);
void SetAmount(double s,double d);
virtual double Pay();
~Sales(){}
};
Sales::Sales(int id,char *Name,int post,double amount,double programe,double pay):Staff (id,Name,post,pay)
//在类外定义有参构造函数
{
Amount=Amount;//销售额
Programe=programe;//项目额
}
double Sales::Pay()
{
return
income=Amount*15/100+Programe*10/100;
}
void Sales::SetAmount(double s,double d)
{Amount=s;Programe=d;}
class Technician:public Staff
//声明技术员类
{
public:
double Line;
Technician(int id,char *Name,int post,double line,double pay):Staff (id,Name,post,pay)
{
Line=line;
}
double Pay();
void display();
~Technician(){}
};
double Technician::Pay()
//在类外定义无参构造函数
{
return income=Line;
}
void Technician::display(){
Pay();cout<<num<<"
"<<name<<"
技术人员
"<<income<<endl; }
class Boss
// 声明老板类
{
public:
Boss(){};
void Add();
void Search();
void Delete();
void Modify();
void DisPlay();
~Boss()
{}
};
void Boss::Add()
{
time_t t = time(0);
char tmp[64];
strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j
天 %z",localtime(&t) );
puts( tmp );
Staff
p,*p1;
int post,id;
char Name[20],ch;
double pay,Amount,sell,programe;
cout<<endl;
cout<<endl;
cout<<"\n\n\n\n\t\t\t"<<"
添加职工信息"<<endl;
cout<<"\t\t\t"<<"1---------技术经理"<<endl;
cout<<"\t\t\t"<<"2---------业务经理"<<endl;
cout<<"\t\t\t"<<"3---------文
秘"<<endl;
cout<<"\t\t\t"<<"4---------业务人员"<<endl;
cout<<"\t\t\t"<<"5---------技术人员"<<endl;
cout<<"\t\t\t"<<"6---------财务人员"<<endl;
do
{
fstream file("company.dat",ios::out|ios::app|ios::binary);//以写,追加,二进制形式打开文件
if(())
{
cout<<"can not open file!"<<endl;
}
cout<<endl<<"输入岗位:";
cin>>post;
cout<<"编号:";
cin>>id;
cout<<"输入姓名:";
cin>>Name;
switch(post)
{
case 1:p1=new TechniqueManager(id,Name,post,0); //声明一个基类的指针指向派生类,用 new 创建了派生类的对象
pay=(*p1).Pay();p=TechniqueManager(id,Name,post,pay);
break;
case 2: cout<<"本月销售额:";
cin>>sell;
cout<<"本月产品额:";
cin>>programe;
cout<<endl;
p1=new BusinessManager(id,Name,post,sell,programe,0);
pay=(*p1).Pay();
p=BusinessManager(id,Name,post,sell,programe,pay); break;
case 3:p1=new Secretary(id,Name,post,0);
pay=(*p1).Pay();p=Secretary(id,Name,post,pay);
break;
case 4:cout<<"本月销售额:";
cin>>sell;
cout<<"本月产品额:";
cin>>programe;
cout<<endl;
p1=new Sales(id,Name, post,sell,programe,0);
pay=(*p1).Pay();
p=Sales(id,Name, post,sell,programe,pay);break;
case 5: cout<<"代码行数:";
cin>>Amount;
p1=new Technician(id,Name,post,Amount,0);
pay=(*p1).Pay();
p=Technician(id,Name,post,Amount,pay);break;
case 6:p1=new Financial(id,Name,post,0);
pay=(*p1).Pay();p=Financial(id,Name,post,pay);
break;
}
((char *)(&p),sizeof(p));//以写的方式读入文件中
();
cout<<"是否继续添加?y 或 Y: 继续
n 或 N:结束并返回主菜单[ ]\b\b";
cin>>ch;
if(ch == "n"||ch == "N")
{
break;
}
}while(ch=="y"||ch=="Y");
system(" cls");
}
void Boss::Search()
//查找员工信息
{
time_t t = time(0);
char tmp[64];
strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天 %z",localtime(&t) );
puts( tmp );
int d;
Staff p;
char ch;
cout<<"\n\n\n\n\n\n
查找员工信息"<<endl;
cout<<"\t\t\t"<<"1----技术经理"<<endl;
cout<<"\t\t\t"<<"2----业务经理"<<endl;
cout<<"\t\t\t"<<"3----文
秘"<<endl;
cout<<"\t\t\t"<<"4----业务人员"<<endl;
cout<<"\t\t\t"<<"5----技术人员"<<endl;
cout<<"\t\t\t"<<"6----财务人员"<<endl;
do{
cout<<"请输入岗位:";
cin>>d;
cout<<endl;
fstream file("company.dat",ios::in|ios::binary);// 以读的方式打开文件,
if(())
{
cout<<"can not open the file!"<<endl;
}
while(((char *)&p,sizeof(p)))//文件中的内容一个一个的读出来,不停止,直到文件尾
{
if(d==1&&p.post==1)
{
cout<<p.num<<"
\t"<<p.name<<"
"<<"技术经理"<<"
"<<p.income<<endl;
}
else if(d==2&&p.post==2)
{
cout<<p.num<<"
"<<p.name<<"
"<<"财务经理"<<"
"<<p.income<<endl;
}
else if(d==3&&p.post==3)
{
cout<<p.num<<"
"<<p.name<<"
"<<" 文
秘"<<"
"<<p.income<<endl;
}
else if(d==4&&p.post==4)
{
cout<<p.num<<"
"<<p.name<<"
"<<"业务人员"<<"
"<<p.income<<endl;
}
else if(d==5&&p.post==5)
{
cout<<p.num<<"
"<<p.name<<"
"<<"技术人员"<<"
"<<p.income<<endl;
}
else if(d==6&&p.post==6)
{
cout<<p.num<<"
"<<p.name<<"
"<<"财务人员"<<"
"<<p.income<<endl;
}
}
();
cout<<"是否继续添加?y 或 Y: 继续
n 或 N:结束并返回主菜单[ ]\b\b";
cin>>ch;
if(ch == "n"||ch == "N")
{
break;
}
}while(ch=="y"||ch=="Y");
system(" cls");
}
void Boss::Modify()
//-----修改信息-----
{
time_t t = time(0);
char tmp[64];
strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天 %z",localtime(&t) );
puts( tmp );
char Name[20];
Staff p3[10];
Staff *p1;
Staff p;
int post,id,i=0,j=0;
double pay,Amount,sell,programe;
cout<<"\n\n\n\n\n\n
修改员工信息"<<endl;
cout<<"\t\t\t"<<"1--------------------技术经理"<<endl;
cout<<"\t\t\t"<<"2-------------------- 业 务 经 理"<<endl;
cout<<"\t\t\t"<<"3--------------------文
秘"<<endl;
cout<<"\t\t\t"<<"4--------------------业务人员"<<endl;
cout<<"\t\t\t"<<"5--------------------技术人员"<<endl;
cout<<"\t\t\t"<<"6--------------------财务人员"<<endl;
cout<<"输入所要修改员工的编号:";
cin>>id;
fstream file("company.dat",ios::in|ios::binary);
if(())
{
cout<<"can not open the file!"<<endl;
}
(0,ios::beg);
//把文件指针放在文件的开始
while(((char *)&p,sizeof(p)))
{
p3[i]=p;
if(p3[i].num==id)
{
cout<<"修改岗位为:
";
cin>>post;
cout<<"修改名字为:
";
cin>>Name;
cout<<endl;
switch(post)
{
case 1:p1=new TechniqueManager(id,Name,post,0); pay=(*p1).Pay();p3[i]=TechniqueManager(id,Name,post,pay);
break;
case 2:cout<<"销售额:
";
cin>>sell;
cout<<"产品额:";
cin>>programe;
cout<<endl;
p1=new BusinessManager(id,Name, post,sell,programe,0);
pay=(*p1).Pay();
p3[i]=BusinessManager(id,Name, post,sell,programe,pay); break;
case 3:p1=new Secretary(id,Name,post,0);pay=(*p1).Pay();p3[i]=Secretary(id,Name,post,pay);
break;
case 4:cout<<"销售额:
";
cin>>sell;
cout<<"产品额:
";
cin>>programe;
cout<<endl;
p1=new Sales(id,Name, post,sell,programe,0);
pay=(*p1).Pay();
p3[i]=Sales(id,Name, post,sell,programe,pay); break;
case 5:cout<<"代码行数:";
cin>>Amount;
cout<<endl;
p1=new Technician(id,Name,post,Amount,0);
pay=(*p1).Pay();
p3[i]=Technician(id,Name,post,Amount,pay);
case 6:p1=new Financial(id,Name,post,0);pay=(*p1).Pay();p3[i]=Financial(id,Name,post,pay);
break;
}
}
i++;
}
();
ofstream file1("company.dat",ios::out|ios::binary);
if(())
{
cout<<"can not open the file!"<<endl;
}
for(j=0;j<i;j++)
//把修改后的信息存入文件中
{
((char *)&p3[j],sizeof(p3[j]));
}
();
system(" cls");
}
void Boss::Delete()
//-----删除人员----
{
time_t t = time(0);
char tmp[64];
strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天 %z",localtime(&t) );
puts( tmp );
int num,i,j=0;
Staff
p1[10];
Staff
p;
char ch;
do{
i=0;
cout<<"
删除员工信息";
cout<<"编号:";
cin>>num;
fstream file("company.dat",ios::in|ios::binary);
//输入文件流类
if(())
{
cout<<"can not open the file!"<<endl;
}
while(((char *)&p,sizeof(p)))
{
if(p.num==num)
{
switch(p.post)
{
case 1:
cout<<p.num<<"
"<<p.name<<"
"<<"技术经理"<<"
"<<p.income<<endl;break;
case 2:
cout<<p.num<<"
"<<p.name<<"
"<<"财务经理"<<"
"<<p.income<<endl;break;
case 3:
cout<<p.num<<"
"<<p.name<<"
"<<" 文
秘"<<"
"<<p.income<<endl; break;
case 4:
cout<<p.num<<"
"<<p.name<<"
"<<"业务人员"<<"
"<<p.income<<endl;break;
case 5:
cout<<p.num<<"
"<<p.name<<"
"<<"技术员"<<"
"<<p.income<<endl;break;
case 6:
cout<<p.num<<"
"<<p.name<<"
"<<"财务人员"<<"
"<<p.income<<endl;break;
}
}
else
{
p1[i]=p;
i++;
}
}
();
fstream file1("company.dat",ios::out|ios::binary);
//输出文件流类
if(())
{
cout<<"can not open the file!"<<endl;
}
for(j=0;j<i;j++)
{
((char *)&p1[j],sizeof(p1[j]));
}
();
cout<<"是否继续添加?y 或 Y: 继续
n 或 N:结束并返回主菜单[ ]\b\b";
cin>>ch;
if(ch == "n"||ch == "N")
{
break;
}
}while(ch=="y"||ch=="Y");
system(" cls");
}
void Boss::DisPlay()
//------显示人员信息-----
{
Staff
p;//P 是职员类的对象
cout<<"
编号
"<<"│"<<"
员工姓名
"<<"│"<<"
级别
"<<"│"<<"
工资
"<<"│"<<endl;
fstream file("company.dat",ios::in|ios::out|ios::binary);
if(())
{
cout<<"can not open the file!"<<endl;
}
while(((char *)(&p),sizeof(p)))
{
// cout<<"
编号
"<<"
姓名
"<<"
岗位
"<<"
工资
"<<endl;
switch(p.post)
{
case 1:cout<<"
"<<p.num<<"
"<<setw(6)<<p.name<<"
"<<setw(6)<<"技术经理"<<"
"<<p.income<<endl;break;
case 2:cout<<"
"<<p.num<<"
"<<setw(6)<<p.name<<"
"<<setw(6)<<"业务经理"<<"
"<<p.income<<endl; break;
case 3:cout<<"
"<<p.num<<"
"<<setw(6)<<p.name<<"
"<<setw(6)<<" 文秘
"<<"
"<<p.income<<endl;
break;
case 4:cout<<"
"<<p.num<<"
"<<setw(6)<<p.name<<"
"<<setw(6)<<"业务人员"<<"
"<<p.income<<endl;
break;
case 5:cout<<"
"<<p.num<<"
"<<setw(6)<<p.name<<"
"<<setw(6)<<"技术人员"<<"
"<<p.income<<endl; break;
case 6:cout<<"
"<<p.num<<"
"<<setw(6)<<p.name<<"
"<<setw(6)<<"财务人员"<<"
"<<p.income<<endl; break;
}
}
();
cout << "\n 按任意键返回主菜单..............\n";
getch();
getchar();
}
void menu()
//-------菜单函数-------
{
system(" cls");
time_t t = time(0);
char tmp[64];
strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天 %z",localtime(&t) );
puts( tmp );
cout<<"
欢迎进入公司管理系统
"<<endl;
cout<<"
*******************************************"<<endl;
cout<<"
★★★★★★公司管理系统 ★★★★★★"<<endl;
cout<<"
*******************************************"<<endl;
cout<<"\t\t|--------------1 录 入 职 工 信 息-----------------|"<<endl;
cout<<"\t\t|--------------2 查 询 职 工 信 息-----------------|"<<endl;
cout<<"\t\t|--------------3 修 改 职 工 信 息-----------------|"<<endl;
cout<<"\t\t|--------------4 删 除 职 工 信 息-----------------|"<<endl;
cout<<"\t\t|--------------5 显 示 职 工 信 息-----------------|"<<endl;
cout<<"\t\t|--------------6 退 出
-----------------|"<<endl;
cout<<"\t\t|*********************************************|"<<endl;
cout<<"输入所要实现的功能:[ ]\b\b";
}
int main()
//-----主函数----
{
cout<<"\n\n\n\n\n\n\n\n\n\n\t\t\t 系统正在启动,请稍候 ";
for(int i=0;i<7;i++)
{
system("color B");
cout<<" .";
Sleep(200);
}
system(" cls");
int a;
Boss boss;
system("color B");
do
{
menu();
cin>>a;
switch(a)
{
case 1:
system(" cls"); boss.Add();
break;
case 2:
system(" cls"); boss.Search();
break;
case 3:
system(" cls"); boss.Modify();
break;
case 4:
system(" cls"); boss.Delete();
break;
case 5:
system(" cls"); boss.DisPlay(); break;
}
}while(a!=6);
system(" cls");
cout<<"\n\n\n\n\n\n\n\n\n\n\t\t\t 欢迎使用,谢谢 ";
for(int i=0;i<7;i++)
{
system("color B");
cout<<" .";
Sleep(200);
}
system(" cls");
return 0;
}
(学习的目的是增长知识,提高能力,相信一分耕耘一分收获,努力就一定可以获得应有的回报)
(学习的目的是增长知识,提高能力,相信一分耕耘一分收获,努力就一定可以获得应有的回报)