-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathemployee.cpp
155 lines (142 loc) · 3.35 KB
/
employee.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#include<iostream>
#include<string.h>
using namespace std;
class employee{
public:
employee();
~employee();
virtual void pay() = 0;
virtual void promate(int increment = 0);
virtual void display() = 0;
protected:
char* name;
int individualnum;
int grade;
float accumpay;
static int employeenum;
};
class technician: public employee{
public:
technician();
void pay();
void promate(int);
void display();
private:
float hourlyrate;
int workhour;
};
class salesman: virtual public employee{
public:
salesman();
void pay();
void promate(int);
void display();
protected:
float commerate;
float sales;
};
class manager: virtual public employee{
public:
manager();
void pay();
void promate(int);
void display();
protected:
float monthlypay;
};
class salesmanager: public salesman, public manager{
public:
salesmanager();
void pay();
void promate(int);
void display();
};
int employee::employeenum = 1000;
employee::employee(){
char namestr[20];
cout<<"input next name:";
cin>>namestr;
name = new char[strlen(namestr)+1];
strcpy(name, namestr);
individualnum = employeenum++;
grade = 1;
accumpay = 0;
}
employee::~employee(){
delete name;
}
void employee::promate(int increment){
grade += increment;
}
technician::technician(){
hourlyrate = 100;
}
void technician::pay(){
cout<<"input working hours:";
cin>>workhour;
accumpay = hourlyrate * workhour;
cout<<"technician:"<<name<<"\tindividualnum:"<<individualnum<<"\taccumpay:"<<accumpay<<endl;
}
void technician::promate(int){
employee::promate(2);
}
void technician::display(){
cout<<"technician:"<<name<<"\tgrade:"<<grade<<"\tindividualnum:"<<individualnum<<"\taccumpay:"<<accumpay<<endl;
}
salesman::salesman(){
commerate = 0.04;
}
void salesman::pay(){
cout<<"input sales:";
cin>>sales;
accumpay = commerate * sales;
cout<<"salesman:"<<name<<"\tindividualnum:"<<individualnum<<"\taccumpay:"<<accumpay<<endl;
}
void salesman::promate(int){
employee::promate(0);
}
void salesman::display(){
cout<<"salseman:"<<name<<"\tgrade:"<<grade<<"\tindividualnum:"<<individualnum<<"\taccumpay:"<<accumpay<<endl;
}
manager::manager(){
monthlypay = 8000;
}
void manager::pay(){
accumpay = monthlypay;
cout<<"manager:"<<name<<"\tindividualnum:"<<individualnum<<"\taccumpay:"<<accumpay<<endl;
}
void manager::promate(int){
employee::promate(3);
}
void manager::display(){
cout<<"manager:"<<name<<"\tgrade:"<<grade<<"\tindividualnum:"<<individualnum<<"\taccumpay:"<<accumpay<<endl;
}
salesmanager::salesmanager(){
monthlypay = 5000;
commerate = 0.05;
}
void salesmanager::pay(){
cout<<"input sales:";
cin>>sales;
accumpay = monthlypay + (commerate * sales);
cout<<"salesmanager:"<<name<<"\tindividualnum:"<<individualnum<<"\taccumpay:"<<accumpay<<endl;
}
void salesmanager::promate(int){
employee::promate(3);
}
void salesmanager::display(){
cout<<"salesmanager:"<<name<<"\tgrade:"<<grade<<"\tindividualnum:"<<individualnum<<"\taccumpay:"<<accumpay<<endl;
}
int main(){
technician t1;
salesman s1;
manager m1;
salesmanager sm1;
employee *emp[4] = {&t1, &s1, &m1, &sm1};
for(int i = 0; i < 4; i++){
emp[i]->promate();
emp[i]->pay();
emp[i]->display();
}
return 0;
}