Advertisement
mercMatvey4

Untitled

May 17th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.57 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstring>
  4. #include <vector>
  5. #include <algorithm>
  6. #include <windows.h>
  7. #include <iomanip>
  8.  
  9. using namespace std;
  10.  
  11. class Factory                           // определение класса рабочих цеха
  12. {
  13. private:
  14.     string name;
  15.     vector <int> details;
  16. public:
  17.     Factory () {name = "name"; for (int i = 0; i < 6; i++) details.push_back(0);}
  18.     Factory (string str, vector<int> &arr) {name = str; for (int i = 0; i < 6; i++) details.push_back(arr[i]);}
  19.     string GetName() {return name;}
  20.     int GetDetails(int i) {return details[i];}
  21.     int GetPerfomance() {int summa = 0; for(int i = 0; i < 6; i++) summa += details[i]; return summa;}
  22.     string GetMaximum()
  23.     {
  24.         vector<int>::iterator result;
  25.         result = max_element(details.begin(),details.end());
  26.         for (int i = 0; i < 6; i++)
  27.             if (*result == details[i])
  28.             {
  29.                 if (i == 0) return "понедельник";
  30.                 if (i == 1) return "вторник";
  31.                 if (i == 2) return "среду";
  32.                 if (i == 3) return "четверг";
  33.                 if (i == 4) return "пятницу";
  34.                 if (i == 5) return "субботу";
  35.             }
  36.     }
  37. };
  38.  
  39. string BestWorker(vector<Factory> &arr) // функция, для определения лучшего работника цеха
  40. {
  41.     string out = "Лучший работник недели - ";
  42.     vector <int> sum;
  43.     vector <int> ::iterator result;
  44.     vector <Factory> ::iterator it;
  45.     int a = 0;
  46.     for (it = arr.begin(); it != arr.end(); it++)
  47.     {
  48.         sum.push_back(arr[a].GetPerfomance());
  49.         a++;
  50.     }
  51.     result = max_element(sum.begin(),sum.end());
  52.     for (int i = 0; i < arr.size(); i++)
  53.         if (*result == arr[i].GetPerfomance())
  54.         {
  55.             out += arr[i].GetName();
  56.             out += ", его лучшая производительность была в ";
  57.             out += arr[i].GetMaximum();
  58.         }
  59.     return out;
  60. }
  61.                                         // глобально объявленный вектор из объектов созданного класса Factory
  62. vector<Factory> fac;                    // для доступа к объектам из любой функции программы
  63.  
  64. void FileConnect(){                     // ввод данных, чтение данных из файла
  65.     ifstream fin("input.txt");
  66.     while (!fin.eof())
  67.     {
  68.         string name; fin >> name;
  69.         int a; vector <int> det;
  70.         for (int i = 0; i < 6; i++)
  71.         {
  72.             fin >> a;
  73.             det.push_back(a);
  74.         }
  75.         Factory ob1(name,det);
  76.         fac.push_back(ob1);
  77.     }
  78.     cout << "Данные из файла успешно прочитаны\n\n";
  79.     fin.close();
  80. }
  81.  
  82. void Print()                            // Отдельная функция реализации вывода актуальной информации на экран консоли,
  83. {                                       // используется почти в каждом из пунктов меню
  84.     cout << "Сведения о производительности рабочих за неделю\n";
  85.     for (int i = 0; i < fac.size(); i++)
  86.         cout << i+1 << " " << fac[i].GetName() << ", количество деталей " << fac[i].GetPerfomance() << endl;
  87.     cout << endl << BestWorker(fac);
  88. }
  89.  
  90. bool SortFamily(Factory ob1, Factory ob2) {                 // Предикат для сортировки по фамилии
  91.  
  92.     return ob1.GetName() < ob2.GetName();
  93. }
  94.  
  95. bool SortPerfomance(Factory ob1, Factory ob2) {             // Предикат для сортировки по количеству собранных деталей
  96.  
  97.     return ob1.GetPerfomance() < ob2.GetPerfomance();
  98. }
  99.  
  100. void Exit()                             // Первый пункт меню, завершение работы программы и сохранение изменений в файл
  101. {
  102.     cout << "\n\nРабота программы завершена\n\nВсе данные будут сохранены в файл\n\n";
  103.     ofstream fout("output.txt");
  104.     for (int i = 0; i < fac.size(); i++)
  105.         fout << i+1 << " " << fac[i].GetName() << ", количество деталей " << fac[i].GetPerfomance() << endl;
  106.     fout << endl << BestWorker(fac);
  107.     fout.close();
  108.     exit(0);
  109. }
  110.  
  111. void DeleteNote()                       // Второй пункт меню, удаление записи о рабочем цеха
  112. {
  113.     vector <Factory>::iterator it;
  114.     system("cls");
  115.     bool done;
  116.     do
  117.     {
  118.         Print();
  119.         cout << "\n\nВыберите какую запись нужно удалить\n\n";
  120.         int number;
  121.         cin >> number;
  122.         fac.erase(fac.begin()+number-1);
  123.         cout << "\nЗапись номер " << number << " была удалена";
  124.         char c;
  125.         cout << "\n\nДля возврата нажмите N, для продолжения - любую другую клавишу\n\n";
  126.         cin >> c;
  127.         done = (c == 'n' || c == 'N');
  128.     }
  129.     while (!done);
  130.     system("cls");
  131.     cout << "0 - для выхода\n\n1 - Удаление записи\n\n2 - Добавление записи\n\n3 - Сортировка по полю\n\n4 - Показать данные на экране\n\n";
  132. }
  133.  
  134. void AddNote()                          // Третий пункт меню, добавление новой записи
  135. {
  136.     bool done;
  137.     do
  138.     {
  139.         system("cls");
  140.         cout << "Введите фамилию рабочего \n\n";
  141.         string name; cin >> name;
  142.         int a; vector <int> det;
  143.         cout << "\nВведите количество деталей, собранных им в каждый день\n\n";
  144.         for (int i = 0; i < 6; i++)
  145.         {
  146.             cin >> a;
  147.             det.push_back(a);
  148.         }
  149.         Factory ob1(name,det);
  150.         fac.push_back(ob1);
  151.         cout << "\nЗапись добавлена\n\n";
  152.         char c;
  153.         cout << "Для возврата нажмите N, для продолжения - любую другую клавишу\n\n";
  154.         cin >> c;
  155.         done = (c == 'n' || c == 'N');
  156.     }
  157.     while (!done);
  158.     system("cls");
  159.     cout << "0 - для выхода\n\n1 - Удаление записи\n\n2 - Добавление записи\n\n3 - Сортировка по полю\n\n4 - Показать данные на экране\n\n";
  160. }
  161.  
  162. void Sort()                             // Четвертый пункт меню, сортировка актуальных данных
  163. {
  164.     bool done;
  165.     do
  166.     {
  167.         system("cls");
  168.         int number;
  169.         cout << "1 - для сортировки по фамилии\n\n2 - для сортировки по количеству деталей за неделю\n\n";
  170.         cin >> number;
  171.         if (number == 1)
  172.         {
  173.             system("cls");
  174.             sort(fac.begin(),fac.end(),SortFamily);
  175.             Print();
  176.         }
  177.         if (number == 2)
  178.         {
  179.             system("cls");
  180.             sort(fac.begin(),fac.end(),SortPerfomance);
  181.             Print();
  182.         }
  183.         char c;
  184.         cout << "\n\nДля возврата нажмите N, для продолжения - любую другую клавишу\n\n";
  185.         cin >> c;
  186.         done = (c != 'y' || c != 'Y' || c != 'т' || c != 'Т');
  187.     }
  188.     while (!done);
  189.     system("cls");
  190.     cout << "0 - для выхода\n\n1 - Удаление записи\n\n2 - Добавление записи\n\n3 - Сортировка по полю\n\n4 - Показать данные на экране\n\n";
  191. }
  192.  
  193. void PrintNote()                        // Пятый пункт меню, вывод актуальных данных на экран консоли
  194. {
  195.     system("cls");
  196.     bool done;
  197.     do
  198.     {
  199.         Print();
  200.         cout << "\n\nДля возврата нажмите N\n\n";
  201.         char c;
  202.         cin >> c;
  203.         done = (c != 'т' || c != 'Т' || c != 'n' || c != 'N');
  204.     }
  205.     while (!done);
  206.     system("cls");
  207.     cout << "0 - для выхода\n\n1 - Удаление записи\n\n2 - Добавление записи\n\n3 - Сортировка по полю\n\n4 - Показать данные на экране\n\n";
  208. }
  209.  
  210. int main()                              // Функция main(), здесь реализовано пользовательское меню,
  211. {                                       // подключен вывод кириллицы в консоль, автоматическое чтение данных из файла при включении запуске программы
  212.     void(*pact[])()={Exit,DeleteNote,AddNote,Sort,PrintNote};
  213.     setlocale(LC_ALL,"");
  214.     SetConsoleCP(1251);
  215.     SetConsoleOutputCP(1251);
  216.     FileConnect();
  217.     int num;
  218.     cout << "0 - для выхода\n\n1 - Удаление записи\n\n2 - Добавление записи\n\n3 - Сортировка по полю\n\n4 - Показать данные на экране\n\n";
  219.     while (1)
  220.     {
  221.         cin >> num;
  222.         pact[num]();
  223.     }
  224.     return 0;
  225. }
  226.  
  227. /*
  228. input.txt
  229. Леонтьев
  230. 17 17 17 17 17 17
  231. Арышев
  232. 10 12 15 18 20 20
  233. Ремезов
  234. 22 14 13 10 13 18
  235. Александров
  236. 15 16 17 15 18 19
  237. Желтов
  238. 25 25 25 26 25 25
  239. Ержанов
  240. 13 20 20 20 20 20
  241. Артемьев
  242. 13 13 14 17 20 14
  243. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement