#include <iostream>
#include <string>
using namespace std;//类employ
class employ
{
public:
int age;
std::string name;
std::string job;
int number;double monthpay;std::string gender;
employ(){}
employ(int n,int a,int g,int j,string na);
void setgender(int g);
void setjob(int j);
virtual void pay(){}
virtual void showdata(){}
};//类technician
class technician:public employ{
public:
double time;double payrate;
technician(){}
technician(int n,int a,int g,int j,string na);
void pay();
void showdata();
};
//类manager
class manager:virtual public employ{
public:
double salary;
manager(){}
manager(int n,int a,int g,int j,string na);
virtual void pay();
virtual void showdata();
};//类sales
class sales:virtual public employ{
public:
double sale;double payrate;
sales(){}
sales(int n,int a,int g,int j,string na);
virtual void pay();
virtual void showdata();
};
//类salesmanager
class salesmanager:public manager,public sales{
public:
double salesum;
salesmanager(){}
salesmanager(int n,int a,int g,int j,string na);
void pay();
void showdata();
}; //定义employ
employ::employ(int n,int a,int g,int j,string na):number(n),name(na),age(a)
{
setjob(j);
setgender(g);
}void employ::setgender(int g)
{
if(g==1)
gender="man";
else if(g==2)
gender="woman";
else cout<<"error!!!"<<endl;
}void employ::setjob(int j)
{
if(j==1)
job="manager";
else if(j==2)
job="salesmanager";
else if(j==3)
job="technician";
else if(j==4)
job="salesman";
else cout<<"error!!!"<<endl;
}//定义manager
manager::manager(int n,int a,int g,int j,string na):employ(n,a,g,j,na)
{salary=8000;}void manager::pay()
{monthpay=salary;}void manager::showdata()
{cout<<number<<" "<<name<<" "<<gender<<" "<<age<<" "<<job<<" "<<monthpay<<endl;}//定义technician
technician::technician(int n,int a,int g,int j,string na):employ(n,a,g,j,na)
{payrate=100;}void technician::pay()
{
cout<<"Please input you worktime:";
cin>>time;monthpay=time*payrate;}
void technician::showdata(){cout<<number<<" "<<name<<" "<<gender<<" "<<age<<" "<<job<<" "<<monthpay<<endl;}//定义sales
sales::sales(int n,int a,int g,int j,string na):employ(n,a,g,j,na)
{payrate=0.04;}void sales::pay()
{cout<<"please put in your sales:"<<endl;cin>>sale;monthpay=sale*payrate;}void sales::showdata()
{cout<<number<<" "<<name<<" "<<gender<<" "<<age<<" "<<job<<" "<<monthpay<<endl;}
//定义salesmanager
salesmanager::salesmanager(int n,int a,int g,int j,string na):employ(n,a,g,j,na)
{salary=5000;payrate=0.005;}void salesmanager::pay(){cout<<"put in salessum: ";cin>>salesum;monthpay=salary+salesum*payrate;}void salesmanager::showdata()
{cout<<number<<" "<<name<<" "<<gender<<" "<<age<<" "<<job<<" "<<monthpay<<endl;}
class Node
{
public:
employ & emp;
Node * next, *prev;
Node(employ & e):emp(e),next(0),prev(0){}
protected:
private:
};class employList
{
public:
employList():first(0),size(0){}
Node * getFirst() const {return first;}
int getSize() const {return size;}
void add(employ & e);
void remove(int num);
void find(int num) const;
void display() const;
~employList();
protected:
private:
int size;
Node * first;
};void employList::add(employ & e)
{
Node * pN= new Node(e);
if(first)
{
pN->next = first;
first->prev = pN;
}
first = pN;
size++;
}void employList::remove(int num)
{
for(Node* p=first;p;p->next)
if((p->emp).number==num)
{
if(p->prev) p->prev->next = p->next;
if(p->next) p->next->prev = p->prev;
if(p==first) first = p->next;
delete p;
size--;
break;
}
}void employList::display()const
{
cout<<"There are "<<size<<"employee.\n";
for(Node *p=first;p;p=p->next)
(p->emp).showdata();
}employList::~employList()
{
for(Node* p=first;p=first;delete p)
first = first->next;
}void employList::find(int num)const
{
for(Node *p=first;p;p=p->next)
if((p->emp).number==num)
(p->emp).showdata();
else cout<<"No information!\n";
}
class menu
{
public:
int menu1();
void addin(employList &empl);
protected:
private:
};void menu::addin(employList &empl)
{
int n,a,g,j;
std::string na;
cout<<"please put in the number:\n";
cin>>n;
cout<<"please put in the name:\n";
cin>>na;
cout<<"please choose the gender:\n";
cout<<"1. man or 2. woman"<<endl;
cin>>g;
cout<<"please put in the age:\n";
cin>>a;
cout<<"please choose the job:\n";
cout<<"1. manager or 2. salesmanager or 3. technician or 4. salesman "<<endl;
cin>>j;
if(j==1)
{manager newworker1(n,a,g,j,na);
newworker1.pay();
empl.add(newworker1);
}
else if(j==2)
{salesmanager newworker2(n,a,g,j,na);
newworker2.pay();
empl.add(newworker2);
}
else if(j==3)
{technician newworker3(n,a,g,j,na);
newworker3.pay();
empl.add(newworker3);
}
else if(j==4)
{sales newworker4(n,a,g,j,na);
newworker4.pay();
empl.add(newworker4);
}}int menu::menu1()
{
char ch[2];int a;
cout<<" 1. 职工数据录入"<<endl;
cout<<" 2. 打印全部数据"<<endl;
cout<<" 3. 查找单个职工数据"<<endl;
cout<<" 4. 删除单个职工数据"<<endl;
cout<<" 5. 删除全部数据"<<endl;
cout<<" 6. 退出"<<endl<<endl;
while (1) {
cin>>ch;
a=atoi(ch);
if(a<1||a>6)
cout<<"please write in correctly!!"<<endl;
else break;
}
return a;
}int main(void)
{ employList emplist;
menu me;
int n;
for( ; ; )
switch(me.menu1())
{
case 1:
me.addin(emplist);
break;
case 2:
emplist.display();
break;
case 3:
cout<<"请输入要查找的职工的编号:";
cin>>n;
emplist.find(n);
break;
case 4:
cout<<"请输入要删除的职工的编号:";
cin>>n;
emplist.remove(n);
break;
case 5:
emplist.~employList();
case 6:
return 0;
}
return 1;
}
#include <string>
using namespace std;//类employ
class employ
{
public:
int age;
std::string name;
std::string job;
int number;double monthpay;std::string gender;
employ(){}
employ(int n,int a,int g,int j,string na);
void setgender(int g);
void setjob(int j);
virtual void pay(){}
virtual void showdata(){}
};//类technician
class technician:public employ{
public:
double time;double payrate;
technician(){}
technician(int n,int a,int g,int j,string na);
void pay();
void showdata();
};
//类manager
class manager:virtual public employ{
public:
double salary;
manager(){}
manager(int n,int a,int g,int j,string na);
virtual void pay();
virtual void showdata();
};//类sales
class sales:virtual public employ{
public:
double sale;double payrate;
sales(){}
sales(int n,int a,int g,int j,string na);
virtual void pay();
virtual void showdata();
};
//类salesmanager
class salesmanager:public manager,public sales{
public:
double salesum;
salesmanager(){}
salesmanager(int n,int a,int g,int j,string na);
void pay();
void showdata();
}; //定义employ
employ::employ(int n,int a,int g,int j,string na):number(n),name(na),age(a)
{
setjob(j);
setgender(g);
}void employ::setgender(int g)
{
if(g==1)
gender="man";
else if(g==2)
gender="woman";
else cout<<"error!!!"<<endl;
}void employ::setjob(int j)
{
if(j==1)
job="manager";
else if(j==2)
job="salesmanager";
else if(j==3)
job="technician";
else if(j==4)
job="salesman";
else cout<<"error!!!"<<endl;
}//定义manager
manager::manager(int n,int a,int g,int j,string na):employ(n,a,g,j,na)
{salary=8000;}void manager::pay()
{monthpay=salary;}void manager::showdata()
{cout<<number<<" "<<name<<" "<<gender<<" "<<age<<" "<<job<<" "<<monthpay<<endl;}//定义technician
technician::technician(int n,int a,int g,int j,string na):employ(n,a,g,j,na)
{payrate=100;}void technician::pay()
{
cout<<"Please input you worktime:";
cin>>time;monthpay=time*payrate;}
void technician::showdata(){cout<<number<<" "<<name<<" "<<gender<<" "<<age<<" "<<job<<" "<<monthpay<<endl;}//定义sales
sales::sales(int n,int a,int g,int j,string na):employ(n,a,g,j,na)
{payrate=0.04;}void sales::pay()
{cout<<"please put in your sales:"<<endl;cin>>sale;monthpay=sale*payrate;}void sales::showdata()
{cout<<number<<" "<<name<<" "<<gender<<" "<<age<<" "<<job<<" "<<monthpay<<endl;}
//定义salesmanager
salesmanager::salesmanager(int n,int a,int g,int j,string na):employ(n,a,g,j,na)
{salary=5000;payrate=0.005;}void salesmanager::pay(){cout<<"put in salessum: ";cin>>salesum;monthpay=salary+salesum*payrate;}void salesmanager::showdata()
{cout<<number<<" "<<name<<" "<<gender<<" "<<age<<" "<<job<<" "<<monthpay<<endl;}
class Node
{
public:
employ & emp;
Node * next, *prev;
Node(employ & e):emp(e),next(0),prev(0){}
protected:
private:
};class employList
{
public:
employList():first(0),size(0){}
Node * getFirst() const {return first;}
int getSize() const {return size;}
void add(employ & e);
void remove(int num);
void find(int num) const;
void display() const;
~employList();
protected:
private:
int size;
Node * first;
};void employList::add(employ & e)
{
Node * pN= new Node(e);
if(first)
{
pN->next = first;
first->prev = pN;
}
first = pN;
size++;
}void employList::remove(int num)
{
for(Node* p=first;p;p->next)
if((p->emp).number==num)
{
if(p->prev) p->prev->next = p->next;
if(p->next) p->next->prev = p->prev;
if(p==first) first = p->next;
delete p;
size--;
break;
}
}void employList::display()const
{
cout<<"There are "<<size<<"employee.\n";
for(Node *p=first;p;p=p->next)
(p->emp).showdata();
}employList::~employList()
{
for(Node* p=first;p=first;delete p)
first = first->next;
}void employList::find(int num)const
{
for(Node *p=first;p;p=p->next)
if((p->emp).number==num)
(p->emp).showdata();
else cout<<"No information!\n";
}
class menu
{
public:
int menu1();
void addin(employList &empl);
protected:
private:
};void menu::addin(employList &empl)
{
int n,a,g,j;
std::string na;
cout<<"please put in the number:\n";
cin>>n;
cout<<"please put in the name:\n";
cin>>na;
cout<<"please choose the gender:\n";
cout<<"1. man or 2. woman"<<endl;
cin>>g;
cout<<"please put in the age:\n";
cin>>a;
cout<<"please choose the job:\n";
cout<<"1. manager or 2. salesmanager or 3. technician or 4. salesman "<<endl;
cin>>j;
if(j==1)
{manager newworker1(n,a,g,j,na);
newworker1.pay();
empl.add(newworker1);
}
else if(j==2)
{salesmanager newworker2(n,a,g,j,na);
newworker2.pay();
empl.add(newworker2);
}
else if(j==3)
{technician newworker3(n,a,g,j,na);
newworker3.pay();
empl.add(newworker3);
}
else if(j==4)
{sales newworker4(n,a,g,j,na);
newworker4.pay();
empl.add(newworker4);
}}int menu::menu1()
{
char ch[2];int a;
cout<<" 1. 职工数据录入"<<endl;
cout<<" 2. 打印全部数据"<<endl;
cout<<" 3. 查找单个职工数据"<<endl;
cout<<" 4. 删除单个职工数据"<<endl;
cout<<" 5. 删除全部数据"<<endl;
cout<<" 6. 退出"<<endl<<endl;
while (1) {
cin>>ch;
a=atoi(ch);
if(a<1||a>6)
cout<<"please write in correctly!!"<<endl;
else break;
}
return a;
}int main(void)
{ employList emplist;
menu me;
int n;
for( ; ; )
switch(me.menu1())
{
case 1:
me.addin(emplist);
break;
case 2:
emplist.display();
break;
case 3:
cout<<"请输入要查找的职工的编号:";
cin>>n;
emplist.find(n);
break;
case 4:
cout<<"请输入要删除的职工的编号:";
cin>>n;
emplist.remove(n);
break;
case 5:
emplist.~employList();
case 6:
return 0;
}
return 1;
}
解决方案 »
- 如果把开源的源码,修改一下编译为自已的软件,法律有办法约束吗?
- ListBox创建时的object ids
- 最近下visual studio 2005,很多东西都和我以前用的VB和VC++很不一样,有谁能告诉我他们的本质区别?
- 初学者求教.如何保持LineTo()出来的线条不被擦除?????
- dll中无模式对话框被遮盖的问题。
- GetDC一运行就弹出异常,怎么回事
- 一个简单的程序,怎么出现了两个问题??保证结帐!!
- 排列组合问题(老板考验我的题,加急)
- 请问从哪可以找到<<精通Visual C++图像编程>>一本的配套程序?
- 知不知道什么工具可以修改exe文件?望高手指点!
- dll包含dll的问题
- vc SDI中视图区中显示数据文件,最好按照表格的形式实现
{manager newworker1(n,a,g,j,na);
newworker1.pay();
empl.add(newworker1); //这里不能用引用,因为是局部变量,退出函数的时候对象被注销,导致内存非法。改为拷贝即可。下面同理。
}
else if(j==2)
{salesmanager newworker2(n,a,g,j,na);
newworker2.pay();
empl.add(newworker2);
}
else if(j==3)
{technician newworker3(n,a,g,j,na);
newworker3.pay();
empl.add(newworker3);
}
else if(j==4)
{sales newworker4(n,a,g,j,na);
newworker4.pay();
empl.add(newworker4);
}
void add(employ e); //改成这样的
public:
employ emp;
Node * next, *prev;
Node(employ e):emp(e),next(0),prev(0){} //这样的,内存就不会出错了。
另外,display里面调用的是基类的display,要想显示子类的showdata,需要强制转换下对象。