Advertisement
Guest User

Untitled

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