Создать класс, описывающий понятие работник, со свойствами:
- фамилия;
- стаж;
- часовая заработная плата;
- количество отработанных часов.
C помощью метода реализовать ввод данных работника с клавиатуры. Рассчитать с помощью методов заработную плату, за отработанное время, и премию, размер которой определяется в зависимости от стажа (при стаже до 1 года 0%, до 3 лет 5%, до 5 лет 8%, свыше 5 лет 15%).
С помощью метода печати, реализовать вывод информации о работнике на экран. Предусмотреть метод для записи в файл данных о работнике.
Полезные статьи: классы в С++, символы и строки, директивы ifndef и endif. Ниже показан пример работы программы:
Данное решение нам предоставил пользователь нашего сайта — Андрей Калачёв. Огромное ему за это спасибо.
#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>
, функционал которого намного сокращает объем работы, в отличии от использования обычных Си-строк.
Не помешало бы несколько строк комментариев в программе, а в остальном все должно быть понятно. Еще раз хочу поблагодарить, за исходник, автора программы — Андрея Калачёва. Смотрим результат работы программы:
Enter worker's name: Denis Enter worker's experience: 2 Enter worker's hourly wag: 50 Enter how much hours Denis has worked: 2450 Denis Experience is 2 Hourly wage is 50 Denis has worked 2450 hours Salary is 122500 Premy is 6125 Information about Denis was written in file 'Workers.txt'
Комментарии
Anufree
gornyyvladimir
Boss
CppStudnet
Вполне адекватно