Создать класс, описывающий понятие работник, со свойствами:
фамилия;
стаж;
часовая заработная плата;
количество отработанных часов.
C помощью метода реализовать ввод данных работника с клавиатуры. Рассчитать с помощью методов заработную плату, за отработанное время, и премию, размер которой определяется в зависимости от стажа (при стаже до 1 года 0%, до 3 лет 5%, до 5 лет 8%, свыше 5 лет 15%).
С помощью метода печати, реализовать вывод информации о работнике на экран. Предусмотреть метод для записи в файл данных о работнике.
Данное решение нам предоставил пользователь нашего сайта — Андрей Калачёв. Огромное ему за это спасибо.
#include<iostream>
#include<cstring>
#include<fstream>
using namespace std;
class Worker
{
string surname;
int experience, salaryh, hours, salary;
double premy;
public:
void setWorker(string sn, int exp, int sh, int h)
{
surname = sn;
experience = exp;
salaryh = sh;
hours = h;
double p;
int s;
s = sh*h;
salary = s;
if (exp<1) p=0;
else
{
if (exp>=1 && exp<3) p=0.05*s;
else
{
if (exp>=3 && exp<5) p=0.08*s;
else
{
if (exp>=5) p=0.15*s;
}
}
}
premy = p;
}
void getWorker()
{
cout<<surname<<endl<<"Experience is "<<experience<<endl<<"Hourly wage is "<<salaryh<<endl<<surname<<" has worked "<<hours<<" hours"<<endl<<"Salary is "<<salary<<endl<<"Premy is "<<premy<<endl;
cout<<"Information about "<<surname<<" was written in file 'Workers.txt'"<<endl;
ofstream file;
file.open("Workers.txt", ios_base::app);
file<<surname<<endl<<"Experience is "<<experience<<endl<<"Hourly wage is "<<salaryh<<endl<<surname<<" has worked "<<hours<<" hours"<<endl<<"Salary is "<<salary<<endl<<"Premy is "<<premy<<endl<<endl<<endl;
file.close();
}
};
int main()
{
string surname;
int experience, salaryh, hours, salary, premy;
cout<<"Enter worker's name: "; cin>>surname; cout<<endl;
cout<<"Enter worker's experience: "; cin>>experience; cout<<endl;
cout<<"Enter worker's hourly wag: "; cin>>salaryh; cout<<endl;
cout<<"Enter how much hours "<<surname<<" has worked: "; cin>>hours; cout<<endl;
Worker objWorker;
objWorker.setWorker(surname, experience, salaryh, hours);
objWorker.getWorker();
system ("pause");
return 0;
}
Постараюсь в нескольких предложениях описать этот код. Обратите, внимание на то, что реализация класса выполнена внутри, то есть все методы определены внутри тела класса, строки: 7 — 47. Такой способ утилизации классов — не самое лучшее решение, но очень удобный, в качестве обучающего материала. То есть код находится в одном файле, любому новичку будет несложно его скопировать и запустить на своей машине.
Еще один интересный момент в программе, строки 9 -11. В этих строках объявлены элемент-данные класса, то есть, по правилам хорошего стиля программирования, эти данные должны быть в закрытой области класса — private. По определению, элемент данные класса должны быть сокрыты от внешнего доступа, что, собственно, и было сделано. Но если они не объявлены явно в области доступа — private, тогда в какой области они находятся? Если область доступа явно не задается, по умолчанию им присваивается область — private (закрытая).
А методы класса явно определены в области - public, то есть все члены класса в области public, значит строку 12 можно либо совсем убрать, либо поставить в самое начало тела класса.
Для работы со строками, Андрей использовал заголовочный файл <cstring>, функционал которого намного сокращает объем работы, в отличии от использования обычных Си-строк.
Не помешало бы несколько строк комментариев в программе, а в остальном все должно быть понятно. Еще раз хочу поблагодарить, за исходник, автора программы — Андрея Калачёва.