- •Федеральное государственное бюджетное образовательное учреждение высшего образования Национальный исследовательский университет «мэи»
- •Практическая работа №4
- •1. Условие задачи
- •2. Состав данных
- •3. Набор тестовых данных. Ожидаемые результаты
- •4. Метод решения задачи, основные формулы
- •5. Текст программы
- •5.1 Текст программы (функции)
- •6. Результаты выполнения программы на наборе тестовых данных
5.1 Текст программы (функции)
#pragma once
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
#include <windows.h>
#include <iomanip>
#include <sstream>
using namespace std;
// Описание структуры для представления работника института
struct Employee
{
string name; // фамилия
int birthday; // год рождения
int experience; // стаж работы
string position; // должность
int month_salary; // оклад
// Конструктор заполнения сотрудника
Employee()
{
name = "Севрюков";
position = "Инженер";
birthday = 1983;
month_salary = 60000;
experience = 10;
}
// Функция ввода из файла
void DataEntry(istream& in)
{
getline(in, this->name);
getline(in, this->position);
string s;
getline(in, s);
this->birthday = atoi(s.c_str());
getline(in, s);
this->experience = atoi(s.c_str());
getline(in, s);
this->month_salary = atoi(s.c_str());
}
// Функция ввода с клавиатуры
void DataEntry()
{
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
cout << "Фамилия: ";
getline(cin, this->name);
while (cin.fail())
{
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
cout << "Некорректный ввод\nФамилия: ";
getline(cin, this->name);
}
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
cout << "Год рождения: ";
cin >> this->birthday;
while (cin.fail() || this->birthday < 1900 || this->birthday > 2000)
{
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
cout << "Некорректный ввод\nГод рождения: ";
cin >> this->birthday;
}
cout << "Стаж работы: ";
cin >> this->experience;
while (cin.fail() || this->experience < 0 || this->experience >(2020 - this->birthday - 14))
{
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
cout << "Некорректный ввод\nСтаж работы: ";
cin >> this->experience;
}
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
cout << "Должность: ";
getline(cin, this->position);
while (cin.fail())
{
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
cout << "Некорректный ввод\nДолжность: ";
getline(cin, this->position);
}
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
cout << "Оклад: ";
cin >> this->month_salary;
while (cin.fail() || this->month_salary < 0)
{
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
cout << "Некорректный ввод\nОклад: ";
cin >> this->month_salary;
}
}
// Функция вывода одной записи в поток файла
void AddData(ostream& file)
{
file << this->name << endl;
file << this->position << endl;
file << this->birthday << endl;
file << this->experience << endl;
file << this->month_salary << endl;
}
// Функция вывода одной записи на экран
void AddData()
{
cout << " " << left << setw(10) << this->name << setw(5) << this->birthday << "Года рождения Стаж работы: " << this->experience
<< " Должность: " << this->position << " Оклад: " << this->month_salary << endl;
}
};
// Функция чтения данных из файла
void read(Employee* employees, int n)
{
ifstream readfile("Employees.txt");
for (int i = 0; i < n; i++)
employees[i].DataEntry(readfile);
readfile.close();
}
// Функция записи данных в файл
void write(Employee* employees, int n)
{
ofstream file("Employees.txt");
for (int i = 0; i < n; i++)
employees[i].AddData(file);
file.close();
}
// Функция вывода фамилий и стажа работы для всех работников института
void print_experience(Employee* employees, int n)
{
for (int i = 0; i < n; i++)
cout << i + 1 << ") Фамилия сотрудника: " << employees[i].name
<< " и его стаж работы: " << employees[i].experience << endl << endl;;
}
// Функция которая вычисляет средний стаж работы в институте
void average_exp(Employee* employees, int n)
{
double avg_exp = 0;
for (int i = 0; i < n; i++)
{
avg_exp += employees[i].experience;
}
cout << "Средний стаж работы в институте: " << avg_exp / n << endl << endl;;
}
// Функция вывода на экран фамилий работников, работающих в должности инженера
void engineers(Employee* employees, int n)
{
for (int i = 0; i < n; i++)
{
if (employees[i].position.compare("Инженер") == 0)
{
cout << employees[i].name << endl;
}
}
}
// Функция вывод на экран фамилий работников, начинающихся с заданной пользователем буквы
void worker_letter(Employee* employees, int n, char ch)
{
for (int i = 0; i < n; i++)
{
if (employees[i].name[0] == ch)
{
cout << employees[i].name << endl;
}
}
}
// Функция вывода на экран фамилий работников, у которых оклад > заданного пользователем числа
void best_salary(Employee* employees, int n, int number)
{
for (int i = 0; i < n; i++)
{
if (employees[i].month_salary > number)
{
cout << employees[i].name << endl;
}
}
}
// Функция которая производит замену фамилии у одного из сотрудников
void change_surname(Employee* employees, int n)
{
string surname;
int num;
cout << "Введите новую фамилию: ";
cin >> surname;
cout << "Введите номер сотрудника: ";
cin >> num;
employees[num - 1].name = surname;
}
// Функция вывода всех данных
void print_all(Employee* employees, int n)
{
for (int i = 0; i < n; i++)
{
cout << i + 1 << ") ";
employees[i].AddData();
cout << endl;
}
}