МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
|
Институт ИнЭИ
Кафедра БИТ |
по дисциплине
«Объектно-ориентированный анализ и программирование»
Тема
«Подпрограммы и файлы»
|
Студентка
|
Газизова Юлия _______________________ |
|
Группа
|
ИЭс-161-19 _______________________ |
|
Лектор
|
_______________________ |
|
Руководитель
|
Овсянникова М.Р. _______________________ |
|
|
|
Работа защищена |
_______________________ оценка |
_______________________ дата |
Москва |
2020 |
Разработать программу для решения следующей задачи.
Требуется создать базу данных, содержащую сведения о сотрудниках института (файл, содержащий сведения о сотрудниках института).
Пусть это будет типизированный файл.
Сведения о сотрудниках института следующие:
- Фамилия,
- Год рождения,
- Стаж работы,
- Должность,
- Оклад.
В таблице 1 показаны данные используемые в программе.
Таблица 1
с |
char |
Переменная, в которой хранится введенный символ |
number |
int |
Переменная, в которой хранится введенное число |
name |
string |
Переменная, которая используется для хранения фамилий (Используется в структуре) |
_stateMenu |
int |
Переменная, в которой хранится значение для выбора меню |
n |
int |
Переменная, в которой хранится размер массива |
Employee |
struct |
Одномерный массив, который использует объединение разных данных (структуру) |
birthday |
int |
Переменная хранит в себе год рождения сотрудника (Используется в структуре) |
experience |
int |
Переменная хранит в себе стаж работы сотрудника (Используется в структуре) |
position |
string |
Переменная хранит в себе должность сотрудника (Используется в структуре) |
month_salary |
int |
Переменная хранит в себе оклад сотрудников (Используется в структуре) |
avg_exp |
double |
Переменная, в которую записывается вычисление среднего стажа работы сотрудника (используется в функции average_exp) |
surname |
string |
Переменная, в которую записывается новая фамилия сотрудника (используется в функции change_surname) |
num |
int |
Переменная, в которой хранится выбор номера сотрудника, которому будет менять фамилию (используется в функции change_surname) |
Сведения о сотрудниках института следующие:
- Фамилия,
- Год рождения,
- Стаж работы,
- Должность,
- Оклад.
Предположительные результаты программы:
Сведения о сотрудниках института следующие:
(всего на фирме работает 3 сотрудника)
предположительные результаты о сотруднике под №1
- Фамилия : Семин
- Год рождения: 1955
- Стаж работы: 30
- Должность: Инженер
- Оклад: 55000
Содержание меню:
Вывод фамилии и стажа работы [1]
Вычислить средний стаж работы [2]
Вывод фамилий инженеров [3]
Вывод фамилий, начинающихся с заданной буквы [4]
Вывод фамилий, у которых оклад больше заданного [5]
Поменять фамилию у одного из сотрудников [6]
Вывести на экран список всех сотрудников [7]
Выход [8]
В данной разработке используется формула для расчета среднего стажа работы:
avg_exp += employees[i].experience;
#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;
}
#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);