Advertisement
mercMatvey4

Untitled

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