C++

Описать класс Работник

Создать класс, описывающий понятие работник, со свойствами:

фамилия;
стаж;
часовая заработная плата;
количество отработанных часов.
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>, функционал которого намного сокращает объем работы, в отличии от использования обычных Си-строк.

Не помешало бы несколько строк комментариев в программе, а в остальном все должно быть понятно. Еще раз хочу поблагодарить, за исходник, автора программы — Андрея Калачёва.
Теги:
класс
Добавлено: 11 Апреля 2018 10:15:45 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...