基于控制台的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;
}
- 基于控制台的c++语言编程
- 基于BlueZ的C语言蓝牙编程
- 基于BlueZ的C语言蓝牙编程
- 基于BlueZ的C语言蓝牙编程
- 基于ARM的高效C语言编程
- 基于SQLITE数据库的C语言编程
- 基于sqlite数据库的C语言编程
- 基于SQLITE数据库的C语言编程
- 基于SQLITE数据库的C语言编程
- 基于BlueZ的C语言蓝牙编程
- 基于SQLITE数据库的C语言编程
- 基于SQLITE数据库的C语言编程
- 基于BlueZ的C语言蓝牙编程
- 基于ARM的高效C语言编程
- 基于C语言的面向对象编程
- C语言控制台窗口图形界面编程(
- C语言控制台窗口图形界面编程
- c语言控制台的俄罗斯方块
- ajax无刷新分页
- 同步通信和异步通信
- 从零单排11
- 时间虚拟化(2)
- kvm下虚拟机的管理
- 基于控制台的c++语言编程
- 时间虚拟化(3)
- 20套华丽的应用程序图标,带给你不一样的视觉体验
- 为什么在pl/sql中,for update 不能更新表
- POJ-1251-Jungle Roads
- COM Plus Catalog Requirement error during SQL Server install
- poj1128 Frame Stacking
- 时间虚拟化(4)
- jsp 一个具有两个frame框架的页面在跳转到新页面时,如何使新页面覆盖当前窗口,不跳转到新的页面