基于控制台的c++语言编程

来源:互联网 发布:绿艺园艺三角梅淘宝店 编辑:程序博客网 时间:2024/05/16 13:43

#include<iostream>
#include<stdlib.h>
#include<cstring>
#include<ctype.h>
#include <fstream>    
using   namespace   std;                                   //文件输入/输出
double   Manage/*经理固定工资*/,Sallmanage/*销售经理固定工资*/,Technologe/*技术人员固定工资*/;
double     Sallpercent/*销售人员提成*/,Managead/*销售经理提成*/;
int   ID=0;
class    Person                                         //员工类
{
protected:
 int num;                                         //ID编号
 char     name[10];                                 //姓名
 int      job;                                        //工作
 double   money;                                  //工资
 Person    *next;
public:
    Person(int   n,char  *na,int  j)
  {
   num=n;
   strcpy(name,na);
   job=j;
  }                                       //
 virtual  void  show()=0;                                  //显示信息
    friend   class   Company;                               //声明公司类为友元类,,方便对人员累进行操作
 virtual   int     Money()=0;
};
class     Managy:public    Person                                        //经理类
{
public:
 Managy(int   num,char*mame,int  job):Person(num,name,job){}
 int   Money()
 {
  money=Manage;                                                       //经理固定工资
 }
 void   show()
 {
  cout<<"输出经理相关信息"<<num<<"编号"<<endl;                          //编号
  cout<<name<<"姓名"<<endl;                                             //姓名
  cout<<job<<"工作"<<endl;                                              //工作
  cout<<money<<"工资"<<endl;
 }
};
class     Technology:public   Person                                                //技术人员类
{
private:
 double   t;                                                                   //技术人员工作的时间
public:
 Technology(int   num,char*mame,int  job,double  T):Person(num,name,job)         //构造函数
 {
  this->t=T;
 }
 double   Gett()                                                     
 {
  return  t;
 }
 void  Sett(double  T)
 {
  this->t=T;
 }
 int   Money()
 {
  money=Technologe*t;                                                  //技术人员按时间得到工资
 }
 void   show()
 {
  Money();
  cout<<"输出技术人员相关信息"<<num<<"编号"<<endl;                      //编号
  cout<<name<<"姓名"<<endl;                                             //姓名
  cout<<job<<"工作"<<endl;                                              //工作
  cout<<money<<"工资"<<endl;                                            //工资
 } 
};
class     SallStaff:public    Person                                          //销售经理类
{
public:
 double  Amount;                                                          //销售的数量
 SallStaff(int   num,char*mame,int  job):Person(num,name,job){
 }
 double   GetAmount()
 {
  return   Amount;
 }
 double   SetAmount(double   s)
 {
  Amount=s;
 }
 int  Money()
 {
  money=Sallmanage+Amount*Sallpercent/100;                              //销售经理工资
 }
 void   show()
 {
  Money();
  cout<<"销售经理的情况"<<num<<endl;
  cout<<"姓名"<<name<<endl;
  cout<<"销售数量"<<Amount<<endl;
  cout<<"工资"<<money<<endl;
 }
};
class    Sallperson:public    Person                                                 //销售员类
{
public:
 double   amount;                                                          
 Sallperson(int   num,char  *name,int   job,double  Amount):Person(num,name,job)
 {
  this->amount=Amount;                                                         //初始化销售数量
 }
 double   Getamount()
 {
  return   amount;
 }
 double   Setamount(double   Amount)
 {
  this->amount=Amount;
 }
 int  Money()
 {
  money=amount/100*Sallpercent;
 }
 void   show()                                                             //显示销售员的情况
 {
  Money();
  cout<<"销售人员类"<<num<<endl;
  cout<<"姓名"<<name<<endl;
  cout<<"工作"<<job<<endl;
  cout<<"工资"<<money<<endl;
 }
} ;
class   Company    //公司类
{                                    
private:
 Person   *work;                                                       
 void     Clear();
public: 

 Company()
 {
  work=0;
  Load();
 }
 ~Company()
  {
   Person   *p;
  p=work;
  while(p)
  {
   p=p->next;
   delete  work;
   work=p;
  }
  work=0;
  }
    void   Set();                                                         //数据设置
 void   Add();                                                         //增加员工
 void   Delet();                                                       //删除函数
 void   Modify();                                                      //修改函数
 void   Select();                                                      //查找函数
 void   Save();                                                        //数据存盘
 void   Load();                                                        //数据装入
};
void     Company::Set()
{
 cout<<"设置公司的基础数据"<<endl;
 cout<<"经理固定工资"<<endl;
 cin>>Manage;
 cout<<"销售经理固定工资"<<endl;
 cin>>Sallmanage;
 cout<<"销售经理提成"<<endl;
 cin>>Managead;
 cout<<"技术员工每小时工资"<<endl;
 cin>>Technologe;
 cout<<"销售人员提成"<<endl;
 cin>>Sallpercent;
}
void     Company::Clear()                                                       //清除系统内存
{
 Person    *p=work;
 while(p)
 {
  work=p->next;
  delete  p;
  p=work;                               
 }
}
void   Company::Add()                                               //增加人员                 
{
 Person     *p;                                                   //新结点指针             
 char    name[10];
 int      job;
 double  amount,T;                                                //工作时间及卖出的数量                    
 
 cout<<"输入工作1是经理2是销售经理3是技术人员4是销售人员"<<endl;                              //判断增加的人员类型
 cin>>job;
 ID++;
 if(job==3)
 {
  cout<<"输出工作时间"<<T<<endl;
  cin>>T;
 }
 else  if(job==4)
 {
  cout<<"输出销售额"<<amount<<endl;
  cin>>amount;
 }
 switch(job)                                                                     //新建人员节点
 {
 case 1:
  p=new Managy(ID,name,job);
  break;
 case 2:
  p=new SallStaff(ID,name,job);
  break;
 case  3:
  p=new  Technology(ID,name,job,T);
  break;
 case  4:
  p=new  Sallperson(ID,name,job,amount);
  break;
 }
 if(work)                                                                    //把新增的节点加入链表
 {
  Person *p1=work;
  while(p1)
  {
   p1=p1->next;
  }
  p1->next=p;
 }
 else   p=work;
}
void   Company::Delet()                                                   //删除操作
{
 int  num;
 cout<<"输出要删除的员工号"<<num;
 cin>>num;
 Person  *p1,*p2;
 p1=work;
 if(p1!=NULL)                                                          //找到要插入的位置
 {
  while(p1->num!=num)
  {
   if(p1->num==num)
    break;
   else
   {
    p2=p1;
    p1=p1->next;
   }   
  }
 }
 if(p1!=NULL)
 {
  if(p1==work)
  {
   work=p1->next;
   delete  p1;
  }
  else
  {
   p2->next=p1->next;
   delete  p1;
  }
 }
}
void   Company::Modify()                                                              //修改人员信息
{
 Person   *p1,*p2;
 int   job;
 char  *name;
 double   amount,t;
 int   num;
 cout<<"输入要修改的员工号"<<ID<<endl;
 cin>>num;
 p1=work;
 while(p1)                                                                     
 {
  if(p1->num=num)
  break;
  else
  {
   p2=p1;
   p1=p1->next;
  }
 }
 if(p1!=NULL)
 {
  p1->show();
  cout<<"调整岗位";
  if(p1->job==job)
  {
   p1=work;
   int   num,job;
   double   t,amount;
   char*name;
   cout<<"输出工作1是经理2是销售经理3是技术人员4是销售人员"<<job;
   cin>>job;
  }
  if(job==1)
  {
   cin>>name;
   cin>>num;
  }
  else if(job==2)
  {
   cin>>name;
   cin>>num;
  }
  else  if(job==3)
  {
   cin>>t;
   cin>>name;
   cin>>num;
  }
  else
  {
   cin>>amount;
   cin>>name;
   cin>>num;
  }
  Person *p3;
  switch(job)                                                                     //新建人员节点
  {
  case '1':
   p3=new Managy(p1->num,name,job);
   break;
  case '2':
   p3=new SallStaff(p1->num,name,job);
   break;
  case  '3':
   p3=new  Technology(p1->num,name,job,t);
   break;
  case  '4':
   p3=new  Sallperson(p1->num,name,job,amount);
   break;
  }
  p3->next=p1->next;
  if(p1==work)
  p3=work;
  else
  p2->next=p3;
  delete  p1;
 }
 else
 {
  cout<<"岗位没有变动"<<endl;
  cin>>p1->name;
  if(job==3)
  {
   cin>>t;
   ((Technology*)p1)->Sett(amount);
  }
  if(job==4)
  {
   cin>>amount;
   ((Sallperson*)p1)->Setamount(amount);
  }
 }
}
void     Company::Select()                                                  //查询本月的销售额及公司盈利状况
{
 cout<<"输出本月销售额"<<endl;
 double   sum;
 sum=0;
 Person   *p;
 p=work;
 while(p)
 {
  if(p->job==3)sum+=((Sallperson*)p)->Getamount();
  p=p->next;
 } 
 cout<<"输出销售额"<<sum<<endl;
 double  summ;                                             //工资总和
 while(p)
 {
  if(p->job==2)((SallStaff*)p)->SetAmount(sum);
  p->show();
  summ+=p->money;
  p=p->next;

 }
 cout<<"输出公司盈利状况"<<sum*0.2-summ<<endl;
}
/*保存数据*/
void    Company::Save()
{
 Person   *p;
 p=work;
 ofstream      fPerson,fBase;
 char    a;
 cout<<"是否要保存数据1保存,2不保存"<<endl;
 cin>>a;
 if(a==2)    return;
 fPerson.open("PERSON.txt",ios::out);
 while(p)
 {
  fPerson<<p->name<<p->num<<p->job<<endl;
  if(p->job==3)    fPerson<<((Technology*)p)->Gett();
  else  if(p->job==4)   fPerson<<((Sallperson*)p)->Getamount();
  fPerson<<endl;
  p=p->next;
 } 
 fPerson.close();
 /*保存基础数据*/
 fBase.open("BASE.txt",ios::out);
 fBase<<"保存成功";
}
//装入数据//
void     Company::Load()
{
 //装入基础数据
 ifstream     fBase;
 fBase.open("E:\\person.txt",ios::in);
 char   b[80];                                                              //用来存储基础数据
 fBase>>b>>Manage;
 fBase>>b>>Sallmanage;
 fBase>>b>>Technologe;
 fBase>>b>>Sallpercent;
 fBase>>b>>Managead;
 fBase.close();
 Clear();                                                                         //清除系统内存
//装入员工数据
 ifstream    fPerson;
 Person      *p=work;
 int   num;
 int  job;
 char  *name;
 double   amount,t;
 fPerson.open("E:\\person.txt",ios::in);
 //读一条条节点
 fPerson>>num>>name>>job;
 if(job==3)fPerson>>t;
 else  if(job==4)fPerson>>amount;
 while(fPerson.good())
 {
  //创建员工节点
  switch(job)
  {
  case  '1':
   p=new Managy(num,name,job);
   break;
  case   '2':
   p=new SallStaff(num,name,job);
   break;
  case   '3':
   p=new  Technology(num,name,job,t);
   break;
  case   '4':
   p=new  Sallperson(num,name,job,amount);
  }
  p->next=0;
  if(work)
  {
   Person   *p2;
   p2=work;
   while(p2->next)
   {
    p2=p2->next;

   }
   p2->next=p;
  }
  else   work=p;
  //  读下一条记录
  fPerson>>num>>name>>job;
  if(p->job==3)  fPerson>>t;
  else  if(p->job==4)fPerson>>amount;
 }
 fPerson.close();
}
int   main()
{
 Company   a;
 char   b;
 do
 {
  cout<<endl;
  cout<<"                     人员管理系统"<<endl;
  cout<<"                      1---增加人员"<<endl;
  cout<<"                      2---删除人员"<<endl;
  cout<<"                      3---修改人员"<<endl;
  cout<<"                      4---查询本月经营信息"<<endl;
  cout<<"                      5---基础数据设置"<<endl;
  cout<<"                      6---数据装入"<<endl;
  cout<<"                      7---数据存盘"<<endl;
  cin>>b;
  switch(b)
  {
  case  '1':
    a.Add();                                                         //增加函数
    break;
  case  '2':
    a.Delet();                                                       //删除函数
    break;
    
  case  '3':
    a.Modify();                                                      //修改函数
    break;
  case  '4':
    a.Select();                                                      //查找函数
    break;
  case  '5':
    a.Set();                                                         //数据设置
    break;
  case  '6':
    a.Save();                                                        //数据存盘
    break;
  case  '7':
    a.Load();                                                        //数据装入
    break;
  }
 }while(b!='8');
 return  1;
}

原创粉丝点击