Скачиваний:
53
Добавлен:
05.07.2021
Размер:
609.93 Кб
Скачать

3 Индивидуальное задание

Создать контейнеры, которые будут хранить объекты классов по предметной области, указанной в таблице (класс должен содержать функционал по предметной области). Для контейнера реализовать добавление, удаление, редактирование, вывод содержимого контейнера на экран и в файл, поиск и сортировку элементов. Необходимо создать удобное пользовательское меню.

4 Код решения индивидуального задания

#include "A_menu.h"

#include "Menu.h"

#include "Files.h"

#include <iostream>

#include <algorithm>

#include "User.h"

#include"Staff.h"

#include <iomanip>

#include <ios>

#include <vector>

#include <tuple>

#include <type_traits>

#include <cassert>

#include <cmath>

#include "Person.h"

using namespace std;

// Конструктор

Menu::Menu()

{

}

// Деструктор

Menu::~Menu()

{

}

/************************************************** функция для редактирования информации***********************************************/

// Редактирование (case 4)

void Menu::edit_info()

{

int v;

while (1)

{

system("cls");

cout << "РЕДАКТИРОВАНИЕ\n";

cout << "1) Сотрудник\n";

cout << "2) НАЗАД\n";

cout << "Ваш выбор: ";

cin >> v;

Checks::checkInt(v);

switch (v)

{

case 1:

{ system("cls"); staffEditMenu(); break; }

case 2: return;

default: cout << "Ошибка!\n"; break;

}

}

}

// Редактирование информации о пользователе (case 3)

void Menu::userEditMenu()

{

if (All_info::getInstance().getUsers().empty())

{

cout << "Список пуст.\n";

system("pause");

return;

}

printUser(All_info::getInstance().getUsers());

int id;

do

{

cout << "Введите id пользователя:";

cin >> id;

Checks::checkInt(id);

} while (All_info::getInstance().userIdIsValid(id));

User newUser;

string login, password;

memset(&newUser, 0, sizeof(newUser));

cout << "Введите логин:\n";

cin >> login;

cout << "Введите пароль:\n";

cin >> password;

newUser.setUser(login, password, id);

All_info::getInstance().editUser(id, newUser);

}

void Menu::staffEditMenu()

{

int ch;

if (All_info::getInstance().getStaff().empty())

{

cout << "Список пуст.\n";

system("pause");

return;

}

printStaff(All_info::getInstance().getStaff());

int id;

do

{

cout << "Введите map:";

cin >> id;

Checks::checkInt(id);

} while (All_info::getInstance().staffIdIsValid(id));

Staff newStaff;

string name, surname, patronymic, phone, position;

char salaryStaff[10];

int salary, day, month, year;

memset(&newStaff, 0, sizeof(newStaff));

do {

cout << "Фамилия: ";

cin >> surname;

if (Checks::checkNoNumbers(surname))

{

break;

}

else

cout << "Ошибка!.\n";

} while (1);

do {

cout << "Имя: ";

cin >> name;

if (Checks::checkNoNumbers(name))

{

break;

}

else

cout << "Ошибка!.\n";

} while (1);

do {

cout << "Отчество: ";

cin >> patronymic;

if (Checks::checkNoNumbers(patronymic))

{

break;

}

else

cout << "Ошибка!\n";

} while (1);

do {

cout << "Введите номер телефона:\n";

cin >> phone;

if (Checks::checkNoLetters(phone))

{

break;

}

else

cout << "Ошибка!\n";

} while (1);

while (1)

{

cout << "Выберите должность:\n";

cout << "1) Бухгалтер.\n";

cout << "2) Финансовый аналитик.\n";

cout << "3) Кредитный эксперт.\n";

cout << "4) Аудитор.\n";

cout << "Ваш выбор: ";

cin >> ch;

Checks::checkInt(ch);

if (ch > 0 && ch < 5)

{

position = positionStaff[ch - 1];

break;

}

else

{

cout << "Ошибка!\n";

continue;

}

}

do {

cout << "Введите зарплату:\n";

cin >> salaryStaff;

if (Checks::checkNoLetters(salaryStaff))

{

salary = atoi(salaryStaff);

break;

}

else

cout << "Ошибка!\n";

} while (1);

cout << "Введите дату принятия на работу:\n";

cout << "День :";

cin >> day;

Checks::checkInt(day);

while (day < 0 || day > 31)

{

cout << "Введите корректную дату\n";

cin >> day;

}

cout << "Месяц :";

cin >> month;

Checks::checkInt(month);

while (month < 0 || month > 12)

{

cout << "Введите корректную дату\n";

cin >> month;

}

cout << "Год :";

cin >> year;

Checks::checkInt(year);

while (year < 2000 || year > 2020)

{

cout << "Введите корректную дату\n";

cin >> year;

}

newStaff.setStaff(name, surname, patronymic, phone, position, salary, day, month, year, id);

All_info::getInstance().editStaff(id, newStaff);

}

/**************************************************функция для удаления информации***********************************************/

void Menu::removeMenu()

{

int ch;

while (1)

{

system("cls");

cout << "УДАЛЕНИЕ\n";

cout << "1) Сотрудник\n";

cout << "2) НАЗАД\n";

cout << "Ваш выбор: ";

cin >> ch;

Checks::checkInt(ch);

switch (ch)

{

case 1:

{

int sw;

while (1)

{

system("cls");

cout << "УДАЛЕНИЕ\n";

cout << "1) Удалить сотрудника\n";

cout << "2) Удалить всех сотрудников\n";

cout << "3) Назад\n";

cout << "Ваш выбор: ";

cin >> sw;

Checks::checkInt(sw);

switch (sw)

{

case 1:

system("cls");

printStaff(All_info::getInstance().getStaff());

int id;

cout << "Введите map сотрудника: ";

cin >> id;

Checks::checkInt(id);

if (!All_info::getInstance().removeStaff(id)) cout << "Ошибка!\n";

break;

case 2:

system("cls");

All_info::getInstance().removeAllStaff();

break;

case 3:

return;

default:

cout << "Ошибка!\n";

break;

}

}

break;

}

case 2: return;

default: cout << "Ошибка!\n";

system("pause");

break;

}

}

}

// Функция добавления пользователей админом

void Menu::addUserMenu()

{

User newUser;

string login, password;

memset(&newUser, 0, sizeof(newUser));

cout << "Введите логин:\n";

cin >> login;

cout << "Введите пароль:\n";

cin >> password;

newUser.setUser(login, password);

All_info::getInstance().addUser(newUser);

}

// Функция для просмотра пользователей администратором

void Menu::printUser(vector<User> users)

{

if (users.empty())

{

cout << "Список пуст.\n";

return;

}

for (auto i : users)

{

cout << i;

cout << endl;

}

}

ostream & operator<<(ostream & out, User & obj)

{

out << "id: " << obj.getId() << endl;

out << "login: " << obj.getLogin() << endl;

out << "password: " << obj.getPassword() << endl;

return out;

}

ostream & operator<<(ostream & out, Staff & obj)

{

out << "map: " << obj.getId() << endl;

out << "Имя: " << obj.getName() << endl;

out << "Фамилия: " << obj.getSurname() << endl;

out << "Отчество: " << obj.getPatronymic() << endl;

out << "Номер телефона: " << obj.getPhone() << endl;

out << "Должность: " << obj.getPosition() << endl;

out << "Заработная плата: " << obj.getSalary() << endl;

out << "Дата принятия на работу: " << obj.getHiringDay() << "." << obj.getHiringMonth() << "." << obj.getHiringYear() << endl;

return out;

}

// Функция для просмотра сотрудников администратором

void Menu::printStaff(vector<Staff> staff)

{

if (staff.empty())

{

cout << "Список пуст.\n";

return;

}

cout << "____________________________________________________________________________________________________" << endl;

cout << "|" << setw(3) << "индекс" << "|" << setw(37) << "ФИО" << "|" << setw(24) << "Должность" << "|" << setw(8) << "Зарплата" << "|" << setw(10) << "Номер" << "|" << setw(11) << "Дата найма" << "|" << endl;

cout << "|___|_____________________________________|________________________|________|__________|___________|" << endl;

for (auto i : staff)

{

cout << "|" << setw(3) << i.getId() << "|" << setw(13) << i.getSurname() << setw(12) << i.getName() << setw(12) << i.getPatronymic() << "|" << setw(24) << i.getPosition() << "|" << setw(8) << i.getSalary() << "|";

cout << setw(10) << i.getPhone() << "|" << setw(3) << i.getHiringDay() << "." << setw(2) << i.getHiringMonth() << "." << setw(4) << i.getHiringYear() << "|" << endl;

cout << "|___|_____________________________________|________________________|________|__________|___________|" << endl;

}

}

// Поиск информации (case 3)

void A_menu::search_info()

{

while (1)

{

int sw;

cout << "1) Поиск сотрудников.\n";

cout << "2) Назад.\n";

cout << "Ваш выбор: ";

cin >> sw;

Checks::checkInt(sw);

switch (sw)

{

case 1:

{ system("cls");

staffSearchMenu(); break; }

case 2: return;

default: cout << "Неверный выбор. Повторите попытку.\n"; break;

}

}

}

bool sr(Staff staffc, Staff staff)

{

return staff.salary > staffc.salary;

}

// сортир

void A_menu::sortir(vector<Staff> result)

{

system("cls");

vector<Staff> tmp = All_info::getInstance().getStaff();

if (tmp.size() == 0)

{

cout << "Список пуст.\n";

return;

}

system("pause");

sort(tmp.begin(), tmp.end(), sr);

printStaff(tmp);

system("pause");

}

// Функция добавления сотрудников

void Menu::addStaffMenu()

{

int ch;

Staff newStaff;

string name, surname, patronymic, phone, position;

char salaryStaff[10];

int salary, day, month, year;

memset(&newStaff, 0, sizeof(newStaff));

cout << "Введите ФИО сотрудника:\n";

do {

cout << "Фамилия: ";

cin >> surname;

if (Checks::checkNoNumbers(surname))

{

break;

}

else

cout << "Некорректный ввод. Повторите попытку.\n";

} while (1);

do {

cout << "Имя: ";

cin >> name;

if (Checks::checkNoNumbers(name))

{

break;

}

else

cout << "Некорректный ввод. Повторите попытку.\n";

} while (1);

do {

cout << "Отчество: ";

cin >> patronymic;

if (Checks::checkNoNumbers(patronymic))

{

break;

}

else

cout << "Некорректный ввод. Повторите попытку.\n";

} while (1);

do {

cout << "Введите номер телефона:\n";

cin >> phone;

if (Checks::checkNoLetters(phone))

{

break;

}

else

cout << "Некорректный ввод. Повторите попытку.\n";

} while (1);

while (1)

{

cout << "Выберите должность:\n";

cout << "1) Бухгалтер.\n";

cout << "2) Финансовый аналитик.\n";

cout << "3) Кредитный эксперт.\n";

cout << "4) Аудитор.\n";

cout << "Ваш выбор: ";

cin >> ch;

Checks::checkInt(ch);

if (ch > 0 && ch < 5)

{

position = positionStaff[ch - 1];

break;

}

else

{

cout << "Неверный выбор. Повторите попытку.\n";

continue;

}

}

do {

cout << "Введите зарплату:\n";

cin >> salaryStaff;

if (Checks::checkNoLetters(salaryStaff))

{

salary = atoi(salaryStaff);

break;

}

else

cout << "Ошибка!\n";

} while (1);

cout << "Введите дату принятия на работу:\n";

cout << "День :";

cin >> day;

Checks::checkInt(day);

while (day < 0 || day > 31)

{

cout << "Введите корректную дату\n";

cin >> day;

}

cout << "Месяц :";

cin >> month;

Checks::checkInt(month);

while (month < 0 || month > 12)

{

cout << "Введите корректную дату\n";

cin >> month;

}

cout << "Год :";

cin >> year;

Checks::checkInt(year);

while (year < 2000 || year > 2020)

{

cout << "Введите корректную дату\n";

cin >> year;

}

newStaff.setStaff(name, surname, patronymic, phone, position, salary, day, month, year);

All_info::getInstance().addStaff(newStaff);

}

// Функция для поиска сотрудников

void Menu::staffSearchMenu()

{

int ch;

while (1)

{

system("cls");

cout << "ПОИСК\n";

cout << "1) Должность\n";

cout << "2) поиск по индексу // map\n";

cout << "3) Фамилия\n";

cout << "4) Назад\n";

cout << "Ваш выбор: ";

cin >> ch;

Checks::checkInt(ch);

switch (ch)

{

case 1:

{

system("cls");

vector<Staff> result;

auto getPosition = []() -> string {

string position;

int ch;

while (1)

{

cout << "Выберите должность:\n";

cout << "1) Бухгалтер.\n";

cout << "2) Финансовый аналитик.\n";

cout << "3) Кредитный эксперт.\n";

cout << "4) Аудитор.\n";

cout << "Ваш выбор: ";

cin >> ch;

Checks::checkInt(ch);

if (ch > 0 && ch < 5)

{

position = positionStaff[ch - 1];

break;

}

else

{

cout << "Неверный выбор. Повторите попытку.\n";

continue;

}

}

return position;

};

result = All_info::getInstance().staffSearchByPosition(getPosition());

if (result.empty()) cout << "Совпадений не найдено\n";

printStaff(result);

system("pause");

break;

}

case 2:

{

system("cls");

vector<Staff> result;

auto getId = []() -> int { int _n; cout << "Введите map сотрудника: "; cin >> _n; return _n; };

result = All_info::getInstance().staffSearchById(getId());

if (result.empty()) cout << "Совпадений не найдено\n";

printStaff(result);

system("pause");

break;

}

case 3:

{

system("cls");

vector<Staff> result;

auto getSurname = []() -> string { string _n; cout << "Введите фамилию сотрудника: "; cin >> _n; return _n; };

result = All_info::getInstance().staffSearchByName(getSurname());

if (result.empty()) cout << "Совпадений не найдено\n";

printStaff(result);

system("pause");

break;

}

case 4: return;

default: cout << "Некорректный выбор. Повторите попытку\n";

system("pause");

break;

}

}

}

//

bool compare1(Staff obj1, Staff obj2)

{

if (strcmp(obj1.getSurname().c_str(), obj2.getSurname().c_str()) < 0)

return true;

else

return false;

}

// Конструктор

A_menu::A_menu()

{

}

// Деструктор

A_menu::~A_menu()

{

}

void A_menu::start(int uid)

{

loggedUserId = uid;

int v;

while (1)

{

system("cls");

cout << "*******МЕНЮ*******\n";

cout << "1) Просмотр банковских сотруников\n";

cout << "2) добавление банковских сотрудников\n";

cout << "3) Редактирование данных банковских сотрудников\n";

cout << "4) Удаление\n";

cout << "5) поиск\n";

cout << "6) сортировка\n";

cout << "7) Выход\n";

cout << "==================================" << endl;

cout << "Ваш выбор: ";

cin >> v;

Checks::checkInt(v);

switch (v)

{

case 1:

{ system("cls");

look_info(); break; }

case 2:

{ system("cls");

add_info(); break; }

case 3:

{ system("cls");

edit_info(); break; }

case 4:

{ system("cls");

removeMenu(); break; }

case 5:

{ system("cls");

search_info(); break; }

case 6:

{ system("cls");

cout << "сортировка по зарплатам банковских сотрудников:" << endl;

system("pause");

sortir(All_info::getInstance().getSalary()); break; }

case 7:

return;

default: cout << "Выберите другой пункт меню.\n"; break;}

}

}

// Просмотр информации (case 1)

void A_menu::look_info()

{

int v;

while (1)

{

system("cls");

cout << "1) Просмотр сотрудников.\n";

cout << "2) Назад.\n";

cout << "Ваш выбор: ";

cin >> v;

Checks::checkInt(v);

switch (v)

{

case 1:

{ system("cls");

printStaff(All_info::getInstance().getStaff());

system("pause"); break; }

case 2: return;

default: cout << "Такого действия нет. Введите другой выбор.\n"; break;

}

}

}

void A_menu::add_info()

{

int v;

while (1)

{

system("cls");

cout << "1) Добавление сотрудников.\n";

cout << "2) Назад.\n";

cout << "Ваш выбор: ";

cin >> v;

Checks::checkInt(v);

switch (v)

{

case 1:

{ addStaffMenu(); break; }

case 2: return;

default: cout << "Такого действия нет. Введите другой выбор.\n"; break;

}

}

}

Соседние файлы в папке лабы Салапура 2ая часть (4 семестр)