- •Федеральное государственное бюджетное образовательное учреждение высшего образования Национальный исследовательский университет «мэи»
- •Практическая работа №4
- •1. Условие задачи
- •2. Состав данных
- •3. Набор тестовых данных. Ожидаемые результаты
- •4. Метод решения задачи, основные формулы
- •5. Текст программы
- •5.1 Текст программы (функции)
- •6. Результаты выполнения программы на наборе тестовых данных
3. Набор тестовых данных. Ожидаемые результаты
Сведения о сотрудниках института следующие:
- Фамилия,
- Год рождения,
- Стаж работы,
- Должность,
- Оклад.
Предположительные результаты программы:
Сведения о сотрудниках института следующие:
(всего на фирме работает 3 сотрудника)
предположительные результаты о сотруднике под №1
- Фамилия : Семин
- Год рождения: 1955
- Стаж работы: 30
- Должность: Инженер
- Оклад: 55000
Содержание меню:
Вывод фамилии и стажа работы [1]
Вычислить средний стаж работы [2]
Вывод фамилий инженеров [3]
Вывод фамилий, начинающихся с заданной буквы [4]
Вывод фамилий, у которых оклад больше заданного [5]
Поменять фамилию у одного из сотрудников [6]
Вывести на экран список всех сотрудников [7]
Выход [8]
4. Метод решения задачи, основные формулы
В данной разработке используется формула для расчета среднего стажа работы:
avg_exp += employees[i].experience;
5. Текст программы
#include "Func.h"
// Функция вывода меню
void Menu()
{
cout << "Меню: " << endl << endl;
cout << "Вывод фамилий и стажа работы [1]" << endl;
cout << "Вычислить средний стаж работы [2]" << endl;
cout << "Вывод фамилий инженеров [3]" << endl;
cout << "Вывод фамилий, начинающихся с заданной буквы [4]" << endl;
cout << "Вывод фамилий, у которых оклад больше заданного [5]" << endl;
cout << "Поменять фамилию у одного из сотрудников [6]" << endl;
cout << "Вывести на экран список всех сотрудников [7]" << endl;
cout << "Выход [8]" << endl << endl;
cout << "Какое действие вы хотите совершить?: " << endl;
}
int main()
{
// Руссификатор для всего проекта
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char c; // переменная для символа
int number; // переменная для числа
string name; // переменная для фамилии
int _stateMenu = -1; // переменная для меню
int n; // Размер массива
cout << "Введите количество работников: ";
cin >> n;
cout << endl;
while (cin.fail() || n <= 0)
{
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
cout << "Некорректный ввод\nВведите количество работников: ";
cin >> n;
}
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
Employee* employees = new Employee[n]; // Объявление одномерного динамического массива
ofstream file("Employees.txt"); // Создание файла и запись в него
for (int i = 0; i < n; i++)
{
cout << "\nВвод информации о сотруднике " << i + 1 << endl;
cout << endl;
employees[i].DataEntry();
employees[i].AddData(file);
}
cout << "\nДанные записаны!" << endl << endl;
file.close(); // Закрываем файл
read(employees, n); // Функция чтения данных из файла
while (_stateMenu != 0)
{
Menu(); // Функция вызова меню
cin >> _stateMenu;
cout << endl;
if (_stateMenu == 8) // Выход из программы
{
return 0;
}
while (cin.fail() || _stateMenu < 0 || _stateMenu > 7)
{
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
cout << "Некорректный ввод\nНомер команды меню: ";
cin >> _stateMenu;
}
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
switch (_stateMenu)
{
case 1:
print_experience(employees, n); // Функция вывода фамилий и стажа работы для всех работников института
break;
case 2:
average_exp(employees, n); // Функция которая вычисляет средний стаж работы в институте
break;
case 3:
engineers(employees, n); // Функция вывода на экран фамилий работников, работающих в должности инженера
break;
case 4:
cout << "Введите букву: ";
cin >> c;
cout << "Фамилии начинающиеся с буквы \"" << c << "\": " << endl;
worker_letter(employees, n, c); // Функция вывод на экран фамилий работников, начинающихся с заданной пользователем буквы
cout << endl;
break;
case 5:
cout << "Введите оклад: ";
cin >> number;
cout << "Фамилии сотрудников с окладом > " << number << ": " << endl;
best_salary(employees, n, number); // Функция вывода на экран фамилий работников, у которых оклад > заданного пользователем числа
cout << endl;
break;
case 6:
change_surname(employees, n); // Функция которая производит замену фамилии у одного из сотрудников
write(employees, n); // Функция записи новой фамилии
cout << endl;
break;
case 7:
read(employees, n); // Функция чтения файла
print_all(employees, n); // Функция вывода всех сотрудников
break;
default:
break;
}
}
delete[] employees; // очистка массива
return 0;
}