Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
5
Добавлен:
15.12.2020
Размер:
469.42 Кб
Скачать

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;

}

}

Соседние файлы в папке лабы вариант 4