Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <cstring>
- #include <vector>
- #include <algorithm>
- #include <windows.h>
- #include <iomanip>
- using namespace std;
- class Factory // определение класса рабочих цеха
- {
- private:
- string name;
- vector <int> details;
- public:
- Factory () {name = "name"; for (int i = 0; i < 6; i++) details.push_back(0);}
- Factory (string str, vector<int> &arr) {name = str; for (int i = 0; i < 6; i++) details.push_back(arr[i]);}
- string GetName() {return name;}
- int GetDetails(int i) {return details[i];}
- int GetPerfomance() {int summa = 0; for(int i = 0; i < 6; i++) summa += details[i]; return summa;}
- string GetMaximum()
- {
- vector<int>::iterator result;
- result = max_element(details.begin(),details.end());
- for (int i = 0; i < 6; i++)
- if (*result == details[i])
- {
- if (i == 0) return "понедельник";
- if (i == 1) return "вторник";
- if (i == 2) return "среду";
- if (i == 3) return "четверг";
- if (i == 4) return "пятницу";
- if (i == 5) return "субботу";
- }
- return 0;
- }
- };
- string BestWorker(vector<Factory> &arr) // функция, для определения лучшего работника цеха
- {
- string out = "Лучший работник недели - ";
- vector <int> sum;
- vector <int> ::iterator result;
- vector <Factory> ::iterator it;
- int a = 0;
- for (it = arr.begin(); it != arr.end(); it++)
- {
- sum.push_back(arr[a].GetPerfomance());
- a++;
- }
- result = max_element(sum.begin(),sum.end());
- for (unsigned int i = 0; i < arr.size(); i++)
- if (*result == arr[i].GetPerfomance())
- {
- out += arr[i].GetName();
- out += ", его лучшая производительность была в ";
- out += arr[i].GetMaximum();
- }
- return out;
- }
- // глобально объявленный вектор из объектов созданного класса Factory
- vector<Factory> fac; // для доступа к объектам из любой функции программы
- void FileConnect(){ // ввод данных, чтение данных из файла
- ifstream fin("input.txt");
- if (!fin.fail()) cout << "Данные из файла успешно прочитаны\n\n";
- else {cout << "Ошибка. Файл для чтения данных не найден"; exit(0);}
- while (!fin.eof())
- {
- string name; fin >> name;
- int a; vector <int> det;
- for (int i = 0; i < 6; i++)
- {
- fin >> a;
- det.push_back(a);
- }
- Factory ob1(name,det);
- fac.push_back(ob1);
- }
- fin.close();
- }
- void Print() // Отдельная функция реализации вывода актуальной информации на экран консоли,
- { // используется почти в каждом из пунктов меню
- cout << "Сведения о производительности рабочих за неделю\n";
- for (unsigned int i = 0; i < fac.size(); i++)
- cout << i+1 << " " << fac[i].GetName() << ", количество деталей " << fac[i].GetPerfomance() << endl;
- cout << endl << BestWorker(fac);
- }
- bool SortFamily(Factory ob1, Factory ob2) { // Предикат для сортировки по фамилии
- return ob1.GetName() < ob2.GetName();
- }
- bool SortPerfomance(Factory ob1, Factory ob2) { // Предикат для сортировки по количеству собранных деталей
- return ob1.GetPerfomance() < ob2.GetPerfomance();
- }
- void Exit() // Первый пункт меню, завершение работы программы и сохранение изменений в файл
- {
- cout << "\n\nРабота программы завершена\n\nВсе данные будут сохранены в файл\n\n";
- ofstream fout("output.txt");
- for (unsigned int i = 0; i < fac.size(); i++)
- fout << i+1 << " " << fac[i].GetName() << ", количество деталей " << fac[i].GetPerfomance() << endl;
- fout << endl << BestWorker(fac);
- fout.close();
- exit(0);
- }
- void DeleteNote() // Второй пункт меню, удаление записи о рабочем цеха
- {
- vector <Factory>::iterator it;
- system("cls");
- bool done;
- do
- {
- system("cls");
- Print();
- cout << "\n\nВыберите какую запись нужно удалить\n\n";
- int number;
- cin >> number;
- fac.erase(fac.begin()+number-1);
- cout << "\nЗапись номер " << number << " была удалена";
- char c;
- cout << "\n\nДля возврата нажмите N, для продолжения - любую другую клавишу\n\n";
- cin >> c;
- done = (c != 'т' || c != 'Т' || c != 'n' || c != 'N');
- }
- while (!done);
- system("cls");
- cout << "0 - для выхода\n\n1 - удаление записи\n\n2 - добавление записи\n\n3 - сортировка по полю\n\n4 - показать данные на экране\n\n";
- }
- void AddNote() // Третий пункт меню, добавление новой записи
- {
- bool done;
- do
- {
- system("cls");
- cout << "Введите фамилию рабочего \n\n";
- string name; cin >> name;
- int a; vector <int> det;
- cout << "\nВведите количество деталей, собранных им в каждый день\n\n";
- for (int i = 0; i < 6; i++)
- {
- cin >> a;
- det.push_back(a);
- }
- Factory ob1(name,det);
- fac.push_back(ob1);
- cout << "\nЗапись добавлена\n\n";
- char c;
- cout << "Для возврата нажмите N, для продолжения - любую другую клавишу\n\n";
- cin >> c;
- done = (c != 'т' || c != 'Т' || c != 'n' || c != 'N');
- }
- while (!done);
- system("cls");
- cout << "0 - для выхода\n\n1 - удаление записи\n\n2 - добавление записи\n\n3 - сортировка по полю\n\n4 - показать данные на экране\n\n";
- }
- void Sort() // Четвертый пункт меню, сортировка актуальных данных
- {
- bool done;
- do
- {
- system("cls");
- int number;
- cout << "1 - для сортировки по фамилии\n\n2 - для сортировки по количеству деталей за неделю\n\n";
- cin >> number;
- if (number == 1)
- {
- system("cls");
- sort(fac.begin(),fac.end(),SortFamily);
- Print();
- }
- if (number == 2)
- {
- system("cls");
- sort(fac.begin(),fac.end(),SortPerfomance);
- Print();
- }
- char c;
- cout << "\n\nДля возврата нажмите любую клавишу\n\n";
- cin >> c;
- done = 1;
- }
- while (!done);
- system("cls");
- cout << "0 - для выхода\n\n1 - удаление записи\n\n2 - добавление записи\n\n3 - сортировка по полю\n\n4 - показать данные на экране\n\n";
- }
- void PrintNote() // Пятый пункт меню, вывод актуальных данных на экран консоли
- {
- system("cls");
- bool done;
- do
- {
- Print();
- cout << "\n\nДля возврата нажмите N\n\n";
- char c;
- cin >> c;
- done = (c != 'т' || c != 'Т' || c != 'n' || c != 'N');
- }
- while (!done);
- system("cls");
- cout << "0 - для выхода\n\n1 - удаление записи\n\n2 - добавление записи\n\n3 - сортировка по полю\n\n4 - показать данные на экране\n\n";
- }
- int main() // Функция main(), здесь реализовано пользовательское меню,
- { // подключен вывод кириллицы в консоль, автоматическое чтение данных из файла при включении запуске программы
- void(*pact[])()={Exit,DeleteNote,AddNote,Sort,PrintNote};
- setlocale(LC_ALL,"");
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- FileConnect();
- int num;
- cout << "0 - для выхода\n\n1 - удаление записи\n\n2 - добавление записи\n\n3 - сортировка по полю\n\n4 - показать данные на экране\n\n";
- while (1)
- {
- cin >> num;
- pact[num]();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement