Создать класс, описывающий понятие работник, со свойствами:
- фамилия;
- стаж;
- часовая заработная плата;
- количество отработанных часов.
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
#include <iostream> #include <conio.h> using namespace std; class worker { private: char name[80]; int w_exp; int salary_p_h; int worked_h; public: void enter() { cout << "Введите имя работника: "; cin >> name; cout << "Введите стаж работника: "; cin >> w_exp; cout << "Введите зарплату за час: "; cin >> salary_p_h; cout << "Введите кол-во отработанных часов: "; cin >> worked_h; cout << endl; } void print() { double prem = 0.0; if(w_exp < 1) prem = ((salary_p_h * worked_h) / 100) * 0; if(w_exp > 1 && w_exp < 3) prem = ((salary_p_h * worked_h) / 100) * 5; if(w_exp > 3 && w_exp < 5) prem = ((salary_p_h * worked_h) / 100) * 8; if(w_exp > 5) prem = ((salary_p_h * worked_h) / 100) * 15; cout << name << endl; cout << "Стаж работы: " << w_exp << endl; cout << "З/П в час: " << salary_p_h << endl; cout << "Отработанно часов: " << worked_h << endl; cout << "Зарплата: " << (salary_p_h * worked_h) << endl; cout << "Премия: " << prem << endl; } }; int main() { setlocale(LC_ALL, "Russian"); worker w; w.enter(); w.print(); _getch(); return 0; }gornyyvladimir
//--------------------------------------------------------------------------- #include <vcl.h> #include <iostream> #include <string> #include <fstream.h> #pragma hdrstop //--------------------------------------------------------------------------- class Worker { private: string lastName; unsigned int experience; unsigned int salaryPerHour; unsigned int salaryForWorkTime; unsigned int workTime; double award; public: void Set (string wLastName, unsigned int wExperience, unsigned int wSalaryPerHour, unsigned int wWorkTime) { lastName = wLastName; experience = wExperience; salaryPerHour = wSalaryPerHour; workTime = wWorkTime; salaryForWorkTime = salaryPerHour * workTime; if( experience < 1 ) award=0.0; else if( experience < 3) { award=(double)(salaryForWorkTime * 5)/100.0; } else if( experience < 5 ) { award=(double)(salaryForWorkTime * 8)/100.0; } else { award=(double)(salaryForWorkTime * 15)/100.0; } } void Get () { cout<<"Last Name: "<< lastName <<"\nExperience: "<<experience <<"\nSalary per hour: "<<salaryPerHour<<"\nWorkTime: "<<workTime<< "\nSalary for work time: "<<salaryForWorkTime<<"\nAward: "<<award<<endl; } bool SaveToFile ( char const* fileName ) { ofstream fout( fileName ); if(!fout.is_open()) return false; fout<<"Last Name: "<< lastName <<"\nExperience: "<<experience <<"\nSalary per hour: "<<salaryPerHour<<"\nWorkTime: "<<workTime<< "\nSalary for work time: "<<salaryForWorkTime<<"\nAward: "<<award<<endl; fout.close(); return true; } }; #pragma argsused int main(int argc, char* argv[]) { string lastName; unsigned int experience; unsigned int salaryPerHour; unsigned int workTime; double award; cout<<"Enter last name: "; cin>>lastName; cout<<endl; cout<<"Enter experience: "; cin>>experience; cout<<endl; cout<<"Enter salary per hour: "; cin>>salaryPerHour; cout<<endl; cout<<"Enter work time: "; cin>>workTime; cout<<endl; Worker objWorker; objWorker.Set(lastName, experience, salaryPerHour, workTime); objWorker.Get(); bool isSaved = objWorker.SaveToFile("save.txt"); if(isSaved) { cout<<"File successfully saved"<<endl; } else cout<<"File NOT saved"<<endl; system("pause"); return 0; } //---------------------------------------------------------------------------Boss
#include <iostream> #include <fstream> #include <windows.h> using namespace std; class Workers { public: Workers() {}; ~Workers() {}; void Add_data(); void Show_data(); void Delete_data(); char surname; float itsExp; float ItsHoursalary; float itsHours; float GetTotalSalary(float hoursalary, float hours) const {return (hoursalary * hours);}; float GetBonus(float exp, float hoursalary) const; }; void Workers::Add_data() { int ans(0); char surname[30]; float exp(0), hoursalary(0), hours(0); do { cout << "Do you like to save previous information?\n1 - Yes\n2 - No\n"; cin >> ans; } while (!ans == 1 || !ans == 2); ofstream fout("Workers.txt", ios_base::app); if (ans == 2) ofstream fout("Workers.txt", ios_base::trunc | ios_base::out); cout << "Enter worker's surname: "; cin.sync(); gets(surname); fout << "\nSurname: " << surname << endl; cout << "\nEnter worker's experience (in hours): "; cin >> exp; fout << "Experience (in hours): " << exp << endl; cout << "\nEnter worker's salary per hour: "; cin >> hoursalary; fout << "Salary per hour: " << hoursalary << endl; fout << "Resulting salary: " << Workers::GetTotalSalary(hoursalary, exp) << endl; fout << "Bonus: " << Workers::GetBonus(exp, hoursalary) << endl << endl; fout.close(); } void Workers::Show_data() { ifstream fin("Workers.txt"); if (!fin.is_open()) cout << "Can't open the file!\n"; else { cout << "\nSaved information"; char ch; while (fin.get(ch)) cout<<ch; fin.close(); cout << "All information has saved in file 'Workers.txt'\n\n"; } } void Workers::Delete_data() { ofstream fout("Workers.txt", ios_base::trunc); } float Workers::GetBonus(float exp, float hoursalary) const { if (exp < 1000) return 0; else if (exp < 2000) return (0.05 * Workers::GetTotalSalary(hoursalary, exp)); else if (exp < 3000) return (0.08 * Workers::GetTotalSalary(hoursalary, exp)); else if (exp >= 3000) return (0.15 * Workers::GetTotalSalary(hoursalary, exp)); } int main() { int answer(0); while (true) { do { cout << "What will we do now?\n1 - Add new employee\n2 - Show all information\n3 - Delete all information\n4 - Exit\n"; cin >> answer; } while (answer < 1 || answer > 4); if (answer == 1) { Workers *NewWorker = new Workers; NewWorker->Add_data(); delete NewWorker; } if (answer == 2) { Workers *NewWorker = new Workers; NewWorker->Show_data(); delete NewWorker; } if (answer == 3) { Workers *NewWorker = new Workers; NewWorker->Delete_data(); delete NewWorker; cout << "All information has been deleted\n"; } if (answer == 4) { cout << "\nGood bye!"; return 0; } } }CppStudnet
Вполне адекватно
#include <iostream> #include <string> #include <fstream> using namespace std; class employee { public: employee(){ cout << "Имя: "; cin >> Name; cout << "Стаж: "; cin >> Experience; cout << "Зарплата в час: "; cin >> Hourly_Wag; cout << "Часов отработано: "; cin >> Hours; Salary = Hourly_Wag*Hours; switch (Experience) { case 0: Premy = 0; case 1: Premy = Salary * 0.05; break; case 2: Premy = Salary * 0.05; break; case 4: Premy = Salary * 0.08; break; case 5: Premy = Salary * 0.08; break; default: Premy = Salary * 0.15; break; } } void print(employee&x){ cout << "\nИмя: " << x.Name << "\nСтаж: " << x.Experience << "\nЗарплата в час:" << x.Hourly_Wag << "\nЧасов отработано: " << x.Hours << "\nЗарплата: " << x.Salary << "\nПремия: " << x.Premy << endl; } void fprint(employee&x){ ofstream F("Emplpyers.txt", ios::app); F << Name << "\nСтаж: " << Experience << "\nЗарплата в час: " << Hourly_Wag << "\nЧасов отработал: " << Hours << "\nЗарплата: " << Salary << "\nПремия: " << Premy << endl << endl; F.close(); } private: string Name; int Experience; int Hourly_Wag; int Hours; int Salary; double Premy; }; int main() { setlocale(LC_ALL, "Rus"); employee x; x.print(x); x.fprint(x); return 0; }