fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <fstream>
  5.  
  6. using namespace std;
  7.  
  8. const int DAYS = 5;
  9. const int SLOTS = 6;
  10. const string DAY_NAMES[DAYS] = {"Понеділок", "Вівторок", "Середа", "Четвер", "П’ятниця"};
  11.  
  12. struct Subject {
  13. string name;
  14. string teacher;
  15. int hoursPerWeek;
  16. };
  17.  
  18. struct Group {
  19. string name;
  20. vector<Subject> subjects;
  21. };
  22.  
  23. struct Lesson {
  24. string groupName;
  25. string subjectName;
  26. string teacherName;
  27. int day;
  28. int slot;
  29. };
  30.  
  31. vector<Lesson> schedule;
  32.  
  33. void printLine() {
  34. cout << "------------------------------" << endl;
  35. }
  36.  
  37. void addLesson(const Lesson& lesson) {
  38. schedule.push_back(lesson);
  39. }
  40.  
  41. void generateSchedule(const vector<Group>& groups) {
  42. schedule.clear();
  43. for (const auto& group : groups) {
  44. for (const auto& subject : group.subjects) {
  45. int hoursAssigned = 0;
  46. for (int d = 0; d < DAYS && hoursAssigned < subject.hoursPerWeek; ++d) {
  47. for (int s = 0; s < SLOTS && hoursAssigned < subject.hoursPerWeek; ++s) {
  48. bool slotTaken = false;
  49. for (const auto& lesson : schedule) {
  50. if (lesson.groupName == group.name && lesson.day == d && lesson.slot == s) {
  51. slotTaken = true;
  52. break;
  53. }
  54. }
  55. if (!slotTaken) {
  56. Lesson lesson = {
  57. group.name,
  58. subject.name,
  59. subject.teacher,
  60. d,
  61. s
  62. };
  63. addLesson(lesson);
  64. hoursAssigned++;
  65. }
  66. }
  67. }
  68. }
  69. }
  70. }
  71.  
  72. void printSchedule() {
  73. printLine();
  74. cout << "Розклад занять на тиждень:" << endl;
  75. printLine();
  76. for (const auto& lesson : schedule) {
  77. cout << "Група: " << lesson.groupName
  78. << " | Предмет: " << lesson.subjectName
  79. << " | Викладач: " << lesson.teacherName
  80. << " | День: " << DAY_NAMES[lesson.day]
  81. << " | Пара: " << lesson.slot + 1 << endl;
  82. }
  83. printLine();
  84. }
  85.  
  86. void printGroupSchedule(const string& groupName, int day = -1) {
  87. printLine();
  88. cout << "Розклад для групи: " << groupName << endl;
  89.  
  90. for (int d = 0; d < DAYS; ++d) {
  91. if (day != -1 && d != day) continue;
  92. cout << "\n" << DAY_NAMES[d] << ":" << endl;
  93. for (int s = 0; s < SLOTS; ++s) {
  94. for (const auto& lesson : schedule) {
  95. if (lesson.groupName == groupName && lesson.day == d && lesson.slot == s) {
  96. cout << " " << s + 1 << " пара: " << lesson.subjectName
  97. << " (" << lesson.teacherName << ")" << endl;
  98. }
  99. }
  100. }
  101. }
  102. printLine();
  103. }
  104.  
  105. void saveToFile(const string& filename) {
  106. ofstream file(filename);
  107. if (!file.is_open()) {
  108. cout << "Не вдалося зберегти файл!" << endl;
  109. return;
  110. }
  111.  
  112. file << "Розклад занять:\n";
  113. for (const auto& lesson : schedule) {
  114. file << "Група: " << lesson.groupName
  115. << " | Предмет: " << lesson.subjectName
  116. << " | Викладач: " << lesson.teacherName
  117. << " | День: " << DAY_NAMES[lesson.day]
  118. << " | Пара: " << lesson.slot + 1 << "\n";
  119. }
  120.  
  121. file.close();
  122. cout << "Розклад збережено у файл: " << filename << endl;
  123. }
  124.  
  125. void menu(const vector<Group>& groups) {
  126. int choice;
  127. string groupName;
  128. int dayChoice;
  129.  
  130. do {
  131. cout << "\n--- Меню ---\n";
  132. cout << "1. Згенерувати розклад\n";
  133. cout << "2. Показати повний розклад\n";
  134. cout << "3. Показати розклад для групи\n";
  135. cout << "4. Зберегти розклад у файл\n";
  136. cout << "0. Вийти\n";
  137. cout << "Ваш вибір: ";
  138. cin >> choice;
  139. cin.ignore();
  140.  
  141. switch (choice) {
  142. case 1:
  143. generateSchedule(groups);
  144. cout << "Розклад згенеровано.\n";
  145. break;
  146. case 2:
  147. printSchedule();
  148. break;
  149. case 3:
  150. cout << "Введіть назву групи (наприклад, 256): ";
  151. getline(cin, groupName);
  152. cout << "Оберіть день (0 - весь тиждень, 1 - Пн, ..., 5 - Пт): ";
  153. cin >> dayChoice;
  154. cin.ignore();
  155. printGroupSchedule(groupName, dayChoice - 1);
  156. break;
  157. case 4:
  158. saveToFile("rozklad.txt");
  159. break;
  160. case 0:
  161. cout << "Вихід з програми.\n";
  162. break;
  163. default:
  164. cout << "Невірний вибір!\n";
  165. }
  166. } while (choice != 0);
  167. }
  168.  
  169. int main() {
  170. Group g1 = {"256", {
  171. {"Алгоритмізація", "Сидорук", 3},
  172. {"Математика", "Кривош", 3},
  173. {"Інженерія", "Пастушко", 2},
  174. {"Історія", "Шимчук", 2}
  175. }};
  176.  
  177. Group g2 = {"255", {
  178. {"Алгоритмізація", "Сидорук", 3},
  179. {"Математика", "Кривош", 3},
  180. {"Інженерія", "Пастушко", 2},
  181. {"Історія", "Шимчук", 2}
  182. }};
  183.  
  184. Group g3 = {"254", {
  185. {"Алгоритмізація", "Сидорук", 3},
  186. {"Математика", "Кривош", 3},
  187. {"Інженерія", "Пастушко", 2},
  188. {"Історія", "Шимчук", 2}
  189. }};
  190.  
  191. vector<Group> groups = {g1, g2, g3};
  192. menu(groups);
  193.  
  194. return 0;
  195. }
  196.  
  197.  
  198.  
Success #stdin #stdout 0s 5308KB
stdin
Standard input is empty
stdout
--- Меню ---
1. Згенерувати розклад
2. Показати повний розклад
3. Показати розклад для групи
4. Зберегти розклад у файл
0. Вийти
Ваш вибір: Вихід з програми.