Разработать простое приложение для расчета заработной платы для компании; В системе есть три типа сотрудников:
- наемный работник,
- почасовой работник,
- и наемный работник.
Подробная информация об этих сотрудниках приведена ниже:
- Наемные сотрудники: имя, налоговая ставка, зарплата, название набора, название набора, получение имени, расчет зарплаты, конструктор, деструктор
- почасовые сотрудники : имя, налоговая ставка, часы, почасовая ставка, получить имя, рассчитать зарплату, конструктор, деструктор
- Уполномоченный сотрудник: имя, налоговая ставка, продажи, ставка комиссии, получить имя, рассчитать зарплату, конструктор, деструктор
Вам необходимо выполнить следующие задачи:
- Нарисовать объектно-ориентированную модель системы с использованием иерархии классов.
- Реализовать соответствующий конструктор и деструктор.
- Написать вниз соответствующие функции установки / получения. Включите класс String в иерархию классов для работы с именем сотрудника.
- Реализуйте другие функции-члены, описанные выше.
- Система должна принимать входные данные как массив, содержащий объекты сотрудников, полиморфно рассчитывает зарплату ( в соответствии с объектом сотрудника) и генерирует отчет.
- Демонстрация (5) с использованием основной функции.
#include<iostream>
#include<string.h>
using namespace std;
class string
{
char* s;
public:
string()
{
}
string(const char* a)
{
if (a != NULL)
{
a = new char[strlen(a) + 1];
strcpy(a, a);
}
else
a = NULL;
}
void setstring(const char* a)
{
if (a != NULL)
{
delete[] a;
a = NULL;
}
if (a != NULL)
{
a = new char[strlen(a) + 1];
strcpy(s, a);
}
}
const char* getString() const
{
return s;
}
string& operator = (const char* p)
{
delete[] s;
if (p != NULL)
{
s = new char[strlen(p) + 1];
strcpy(s, p);
}
else
s = NULL;
return *this;
}
friend ostream& operator << (ostream& os, const string& a)
{
os << a.s;
return os;
}
~string()
{
s = NULL;
delete[] s;
}
};
class Employee
{
private:
string firstname;
string lastname;
string number;
public:
Employee()
{
}
Employee(string first, string last, string n)
{
firstname = first;
lastname = last;
number = n;
}
void setfirstname(string first)
{
firstname = first;
}
string getfirstname()
{
return firstname;
}
void setlastname(string last)
{
lastname = last;
}
string getlastname()
{
return lastname;
}
void setnumber(string n)
{
number = n;
}
string getnumber()
{
return number;
}
virtual double earnings()=0;
};
class salariedemployee :public Employee
{
private:
double weeklysalary;
public:
salariedemployee()
{
}
salariedemployee(string first, string last, string n, float salary):Employee(first, last, n)
{
this->weeklysalary = salary;
setweeklysalary(salary);
}
void setweeklysalary(double salary)
{
if (salary >= 0.0)
{
weeklysalary = salary;
}
else
cout << "Weekly salary must be greater than or equal to 0.0"<<endl;
}
double getweeklysalary()
{
return weeklysalary;
}
double earnings()
{
return getweeklysalary();
}
};
class hourlyemployee :public Employee
{
private:
double wage;
double hours;
public:
hourlyemployee()
{
}
hourlyemployee(string first, string last, string n, double hourlywage, double hoursworked) :Employee(first, last, n)
{
setwage(hourlywage);
sethours(hoursworked);
}
void setwage(double hourlywage)
{
if (hourlywage >= 0.0)
{
wage = hourlywage;
}
else
cout << "Hourly wage must be greater than or equal to 0.0"<<endl;
}
double getwage()
{
return wage;
}
void sethours(double hoursworked)
{
if ((hoursworked >= 0.0) && (hoursworked <= 168.0))
{
hours = hoursworked;
}
else
cout << "Hours must be greater than or equal to 0.0 and less than or equal to 168.0"<<endl;
}
double gethours()
{
return hours;
}
double earnings()
{
if (gethours() <= 40) //no overtime
{
return getwage() * gethours();
}
else
return 40 * getwage() + (gethours() - 40) * getwage() * 1.5;
}
};
class commisionedemployee :public Employee
{
private:
double grossSales;
double commisionedrate;
public:
commisionedemployee()
{
}
commisionedemployee(string first, string last, string n, double sales, double rates) :Employee(first, last, n)
{
setgrossSales(sales);
setcommisionedrate(rates);
}
void setgrossSales(double sales)
{
if (sales >= 0.0)
{
grossSales = sales;
}
else
cout << "Gross sales must be greater than or equal to 0.0"<<endl;
}
double getgrossSales()
{
return grossSales;
}
void setcommisionedrate(double rates)
{
if (rates > 0.0 && rates < 1.0)
{
commisionedrate = rates;
}
else
cout << "Comminsioned rate must be greater than 0.0 and less than 1.0"<<endl;
}
double getcommisionedrate()
{
return commisionedrate;
}
double earnings()
{
return getcommisionedrate() * getgrossSales();
}
};
int main()
{
/*salariedemployee SE("John", "Smith", "111", 80009);
hourlyemployee HE("Kashif", "Gulzar", "5555", 4.2, 7.7);
commisionedemployee CE("Sajid", "Bhatti", "444", 2.3, 3.3);
cout << "Employee processed individually as:";
cout <<"Salaried employee earned" << SE.earnings()<<endl;
cout << "Hourly employee earned" << HE.earnings()<<endl;
cout << "Commisioned employee earned" << CE.earnings() << endl;*/
Employee* employees[3];
employees[0] = new salariedemployee("John", "Smith", "111", 80009);
employees[1] = new hourlyemployee("Kashif", "Gulzar", "5555", 4.2, 7.7);
employees[2] = new commisionedemployee("Sajid", "Bhatti", "444", 2.3, 3.3);
for (int i = 0; i < 3; i++)
{
cout << "Name:" << employees[i]->getfirstname() << " " << employees[i]->getlastname() << endl;
cout << "Salary:" << employees[i]->earnings() << endl;
}
system("pause");
return 0;
}
Это дает мне ошибку, что строка неоднозначна. как я могу это исправить?