#include <iostream>
#include <vector>
#include <string>
#include <fstream>
using namespace std;
const int DAYS = 5 ;
const int SLOTS = 6 ;
const string DAY_NAMES[ DAYS] = { "Понеділок" , "Вівторок" , "Середа" , "Четвер" , "П’ятниця" } ;
struct Subject {
string name;
string teacher;
int hoursPerWeek;
} ;
struct Group {
string name;
vector< Subject> subjects;
} ;
struct Lesson {
string groupName;
string subjectName;
string teacherName;
int day;
int slot;
} ;
vector< Lesson> schedule;
void printLine( ) {
cout << "------------------------------" << endl;
}
void addLesson( const Lesson& lesson) {
schedule.push_back ( lesson) ;
}
void generateSchedule( const vector< Group> & groups) {
schedule.clear ( ) ;
for ( const auto & group : groups) {
for ( const auto & subject : group.subjects ) {
int hoursAssigned = 0 ;
for ( int d = 0 ; d < DAYS && hoursAssigned < subject.hoursPerWeek ; ++ d) {
for ( int s = 0 ; s < SLOTS && hoursAssigned < subject.hoursPerWeek ; ++ s) {
bool slotTaken = false ;
for ( const auto & lesson : schedule) {
if ( lesson.groupName == group.name && lesson.day == d && lesson.slot == s) {
slotTaken = true ;
break ;
}
}
if ( ! slotTaken) {
Lesson lesson = {
group.name ,
subject.name ,
subject.teacher ,
d,
s
} ;
addLesson( lesson) ;
hoursAssigned++ ;
}
}
}
}
}
}
void printSchedule( ) {
printLine( ) ;
cout << "Розклад занять на тиждень:" << endl;
printLine( ) ;
for ( const auto & lesson : schedule) {
cout << "Група: " << lesson.groupName
<< " | Предмет: " << lesson.subjectName
<< " | Викладач: " << lesson.teacherName
<< " | День: " << DAY_NAMES[ lesson.day ]
<< " | Пара: " << lesson.slot + 1 << endl;
}
printLine( ) ;
}
void printGroupSchedule( const string& groupName, int day = - 1 ) {
printLine( ) ;
cout << "Розклад для групи: " << groupName << endl;
for ( int d = 0 ; d < DAYS; ++ d) {
if ( day ! = - 1 && d ! = day) continue ;
cout << "\n " << DAY_NAMES[ d] << ":" << endl;
for ( int s = 0 ; s < SLOTS; ++ s) {
for ( const auto & lesson : schedule) {
if ( lesson.groupName == groupName && lesson.day == d && lesson.slot == s) {
cout << " " << s + 1 << " пара: " << lesson.subjectName
<< " (" << lesson.teacherName << ")" << endl;
}
}
}
}
printLine( ) ;
}
void saveToFile( const string& filename) {
ofstream file( filename) ;
if ( ! file.is_open ( ) ) {
cout << "Не вдалося зберегти файл!" << endl;
return ;
}
file << "Розклад занять:\n " ;
for ( const auto & lesson : schedule) {
file << "Група: " << lesson.groupName
<< " | Предмет: " << lesson.subjectName
<< " | Викладач: " << lesson.teacherName
<< " | День: " << DAY_NAMES[ lesson.day ]
<< " | Пара: " << lesson.slot + 1 << "\n " ;
}
file.close ( ) ;
cout << "Розклад збережено у файл: " << filename << endl;
}
void menu( const vector< Group> & groups) {
int choice;
string groupName;
int dayChoice;
do {
cout << "\n --- Меню ---\n " ;
cout << "1. Згенерувати розклад\n " ;
cout << "2. Показати повний розклад\n " ;
cout << "3. Показати розклад для групи\n " ;
cout << "4. Зберегти розклад у файл\n " ;
cout << "0. Вийти\n " ;
cout << "Ваш вибір: " ;
cin >> choice;
cin .ignore ( ) ;
switch ( choice) {
case 1 :
generateSchedule( groups) ;
cout << "Розклад згенеровано.\n " ;
break ;
case 2 :
printSchedule( ) ;
break ;
case 3 :
cout << "Введіть назву групи (наприклад, 256): " ;
getline( cin , groupName) ;
cout << "Оберіть день (0 - весь тиждень, 1 - Пн, ..., 5 - Пт): " ;
cin >> dayChoice;
cin .ignore ( ) ;
printGroupSchedule( groupName, dayChoice - 1 ) ;
break ;
case 4 :
saveToFile( "rozklad.txt" ) ;
break ;
case 0 :
cout << "Вихід з програми.\n " ;
break ;
default :
cout << "Невірний вибір!\n " ;
}
} while ( choice ! = 0 ) ;
}
int main( ) {
Group g1 = { "256" , {
{ "Алгоритмізація" , "Сидорук" , 3 } ,
{ "Математика" , "Кривош" , 3 } ,
{ "Інженерія" , "Пастушко" , 2 } ,
{ "Історія" , "Шимчук" , 2 }
} } ;
Group g2 = { "255" , {
{ "Алгоритмізація" , "Сидорук" , 3 } ,
{ "Математика" , "Кривош" , 3 } ,
{ "Інженерія" , "Пастушко" , 2 } ,
{ "Історія" , "Шимчук" , 2 }
} } ;
Group g3 = { "254" , {
{ "Алгоритмізація" , "Сидорук" , 3 } ,
{ "Математика" , "Кривош" , 3 } ,
{ "Інженерія" , "Пастушко" , 2 } ,
{ "Історія" , "Шимчук" , 2 }
} } ;
vector< Group> groups = { g1, g2, g3} ;
menu( groups) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8ZnN0cmVhbT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgREFZUyA9IDU7CmNvbnN0IGludCBTTE9UUyA9IDY7CmNvbnN0IHN0cmluZyBEQVlfTkFNRVNbREFZU10gPSB7ItCf0L7QvdC10LTRltC70L7QuiIsICLQktGW0LLRgtC+0YDQvtC6IiwgItCh0LXRgNC10LTQsCIsICLQp9C10YLQstC10YAiLCAi0J/igJnRj9GC0L3QuNGG0Y8ifTsKCnN0cnVjdCBTdWJqZWN0IHsKICAgIHN0cmluZyBuYW1lOwogICAgc3RyaW5nIHRlYWNoZXI7CiAgICBpbnQgaG91cnNQZXJXZWVrOwp9OwoKc3RydWN0IEdyb3VwIHsKICAgIHN0cmluZyBuYW1lOwogICAgdmVjdG9yPFN1YmplY3Q+IHN1YmplY3RzOwp9OwoKc3RydWN0IExlc3NvbiB7CiAgICBzdHJpbmcgZ3JvdXBOYW1lOwogICAgc3RyaW5nIHN1YmplY3ROYW1lOwogICAgc3RyaW5nIHRlYWNoZXJOYW1lOwogICAgaW50IGRheTsKICAgIGludCBzbG90Owp9OwoKdmVjdG9yPExlc3Nvbj4gc2NoZWR1bGU7Cgp2b2lkIHByaW50TGluZSgpIHsKICAgIGNvdXQgPDwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPDwgZW5kbDsKfQoKdm9pZCBhZGRMZXNzb24oY29uc3QgTGVzc29uJiBsZXNzb24pIHsKICAgIHNjaGVkdWxlLnB1c2hfYmFjayhsZXNzb24pOwp9Cgp2b2lkIGdlbmVyYXRlU2NoZWR1bGUoY29uc3QgdmVjdG9yPEdyb3VwPiYgZ3JvdXBzKSB7CiAgICBzY2hlZHVsZS5jbGVhcigpOwogICAgZm9yIChjb25zdCBhdXRvJiBncm91cCA6IGdyb3VwcykgewogICAgICAgIGZvciAoY29uc3QgYXV0byYgc3ViamVjdCA6IGdyb3VwLnN1YmplY3RzKSB7CiAgICAgICAgICAgIGludCBob3Vyc0Fzc2lnbmVkID0gMDsKICAgICAgICAgICAgZm9yIChpbnQgZCA9IDA7IGQgPCBEQVlTICYmIGhvdXJzQXNzaWduZWQgPCBzdWJqZWN0LmhvdXJzUGVyV2VlazsgKytkKSB7CiAgICAgICAgICAgICAgICBmb3IgKGludCBzID0gMDsgcyA8IFNMT1RTICYmIGhvdXJzQXNzaWduZWQgPCBzdWJqZWN0LmhvdXJzUGVyV2VlazsgKytzKSB7CiAgICAgICAgICAgICAgICAgICAgYm9vbCBzbG90VGFrZW4gPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGxlc3NvbiA6IHNjaGVkdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZXNzb24uZ3JvdXBOYW1lID09IGdyb3VwLm5hbWUgJiYgbGVzc29uLmRheSA9PSBkICYmIGxlc3Nvbi5zbG90ID09IHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RUYWtlbiA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoIXNsb3RUYWtlbikgewogICAgICAgICAgICAgICAgICAgICAgICBMZXNzb24gbGVzc29uID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QudGVhY2hlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzCiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIGFkZExlc3NvbihsZXNzb24pOwogICAgICAgICAgICAgICAgICAgICAgICBob3Vyc0Fzc2lnbmVkKys7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIHByaW50U2NoZWR1bGUoKSB7CiAgICBwcmludExpbmUoKTsKICAgIGNvdXQgPDwgItCg0L7Qt9C60LvQsNC0INC30LDQvdGP0YLRjCDQvdCwINGC0LjQttC00LXQvdGMOiIgPDwgZW5kbDsKICAgIHByaW50TGluZSgpOwogICAgZm9yIChjb25zdCBhdXRvJiBsZXNzb24gOiBzY2hlZHVsZSkgewogICAgICAgIGNvdXQgPDwgItCT0YDRg9C/0LA6ICIgPDwgbGVzc29uLmdyb3VwTmFtZQogICAgICAgICAgICAgPDwgIiB8INCf0YDQtdC00LzQtdGCOiAiIDw8IGxlc3Nvbi5zdWJqZWN0TmFtZQogICAgICAgICAgICAgPDwgIiB8INCS0LjQutC70LDQtNCw0Yc6ICIgPDwgbGVzc29uLnRlYWNoZXJOYW1lCiAgICAgICAgICAgICA8PCAiIHwg0JTQtdC90Yw6ICIgPDwgREFZX05BTUVTW2xlc3Nvbi5kYXldCiAgICAgICAgICAgICA8PCAiIHwg0J/QsNGA0LA6ICIgPDwgbGVzc29uLnNsb3QgKyAxIDw8IGVuZGw7CiAgICB9CiAgICBwcmludExpbmUoKTsKfQoKdm9pZCBwcmludEdyb3VwU2NoZWR1bGUoY29uc3Qgc3RyaW5nJiBncm91cE5hbWUsIGludCBkYXkgPSAtMSkgewogICAgcHJpbnRMaW5lKCk7CiAgICBjb3V0IDw8ICLQoNC+0LfQutC70LDQtCDQtNC70Y8g0LPRgNGD0L/QuDogIiA8PCBncm91cE5hbWUgPDwgZW5kbDsKCiAgICBmb3IgKGludCBkID0gMDsgZCA8IERBWVM7ICsrZCkgewogICAgICAgIGlmIChkYXkgIT0gLTEgJiYgZCAhPSBkYXkpIGNvbnRpbnVlOwogICAgICAgIGNvdXQgPDwgIlxuIiA8PCBEQVlfTkFNRVNbZF0gPDwgIjoiIDw8IGVuZGw7CiAgICAgICAgZm9yIChpbnQgcyA9IDA7IHMgPCBTTE9UUzsgKytzKSB7CiAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgbGVzc29uIDogc2NoZWR1bGUpIHsKICAgICAgICAgICAgICAgIGlmIChsZXNzb24uZ3JvdXBOYW1lID09IGdyb3VwTmFtZSAmJiBsZXNzb24uZGF5ID09IGQgJiYgbGVzc29uLnNsb3QgPT0gcykgewogICAgICAgICAgICAgICAgICAgIGNvdXQgPDwgIiAgIiA8PCBzICsgMSA8PCAiINC/0LDRgNCwOiAiIDw8IGxlc3Nvbi5zdWJqZWN0TmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiAoIiA8PCBsZXNzb24udGVhY2hlck5hbWUgPDwgIikiIDw8IGVuZGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBwcmludExpbmUoKTsKfQoKdm9pZCBzYXZlVG9GaWxlKGNvbnN0IHN0cmluZyYgZmlsZW5hbWUpIHsKICAgIG9mc3RyZWFtIGZpbGUoZmlsZW5hbWUpOwogICAgaWYgKCFmaWxlLmlzX29wZW4oKSkgewogICAgICAgIGNvdXQgPDwgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LfQsdC10YDQtdCz0YLQuCDRhNCw0LnQuyEiIDw8IGVuZGw7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGZpbGUgPDwgItCg0L7Qt9C60LvQsNC0INC30LDQvdGP0YLRjDpcbiI7CiAgICBmb3IgKGNvbnN0IGF1dG8mIGxlc3NvbiA6IHNjaGVkdWxlKSB7CiAgICAgICAgZmlsZSA8PCAi0JPRgNGD0L/QsDogIiA8PCBsZXNzb24uZ3JvdXBOYW1lCiAgICAgICAgICAgICA8PCAiIHwg0J/RgNC10LTQvNC10YI6ICIgPDwgbGVzc29uLnN1YmplY3ROYW1lCiAgICAgICAgICAgICA8PCAiIHwg0JLQuNC60LvQsNC00LDRhzogIiA8PCBsZXNzb24udGVhY2hlck5hbWUKICAgICAgICAgICAgIDw8ICIgfCDQlNC10L3RjDogIiA8PCBEQVlfTkFNRVNbbGVzc29uLmRheV0KICAgICAgICAgICAgIDw8ICIgfCDQn9Cw0YDQsDogIiA8PCBsZXNzb24uc2xvdCArIDEgPDwgIlxuIjsKICAgIH0KCiAgICBmaWxlLmNsb3NlKCk7CiAgICBjb3V0IDw8ICLQoNC+0LfQutC70LDQtCDQt9Cx0LXRgNC10LbQtdC90L4g0YMg0YTQsNC50Ls6ICIgPDwgZmlsZW5hbWUgPDwgZW5kbDsKfQoKdm9pZCBtZW51KGNvbnN0IHZlY3RvcjxHcm91cD4mIGdyb3VwcykgewogICAgaW50IGNob2ljZTsKICAgIHN0cmluZyBncm91cE5hbWU7CiAgICBpbnQgZGF5Q2hvaWNlOwoKICAgIGRvIHsKICAgICAgICBjb3V0IDw8ICJcbi0tLSDQnNC10L3RjiAtLS1cbiI7CiAgICAgICAgY291dCA8PCAiMS4g0JfQs9C10L3QtdGA0YPQstCw0YLQuCDRgNC+0LfQutC70LDQtFxuIjsKICAgICAgICBjb3V0IDw8ICIyLiDQn9C+0LrQsNC30LDRgtC4INC/0L7QstC90LjQuSDRgNC+0LfQutC70LDQtFxuIjsKICAgICAgICBjb3V0IDw8ICIzLiDQn9C+0LrQsNC30LDRgtC4INGA0L7Qt9C60LvQsNC0INC00LvRjyDQs9GA0YPQv9C4XG4iOwogICAgICAgIGNvdXQgPDwgIjQuINCX0LHQtdGA0LXQs9GC0Lgg0YDQvtC30LrQu9Cw0LQg0YMg0YTQsNC50LtcbiI7CiAgICAgICAgY291dCA8PCAiMC4g0JLQuNC50YLQuFxuIjsKICAgICAgICBjb3V0IDw8ICLQktCw0Ygg0LLQuNCx0ZbRgDogIjsKICAgICAgICBjaW4gPj4gY2hvaWNlOwogICAgICAgIGNpbi5pZ25vcmUoKTsKCiAgICAgICAgc3dpdGNoIChjaG9pY2UpIHsKICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgZ2VuZXJhdGVTY2hlZHVsZShncm91cHMpOwogICAgICAgICAgICAgICAgY291dCA8PCAi0KDQvtC30LrQu9Cw0LQg0LfQs9C10L3QtdGA0L7QstCw0L3Qvi5cbiI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgcHJpbnRTY2hlZHVsZSgpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgIGNvdXQgPDwgItCS0LLQtdC00ZbRgtGMINC90LDQt9Cy0YMg0LPRgNGD0L/QuCAo0L3QsNC/0YDQuNC60LvQsNC0LCAyNTYpOiAiOwogICAgICAgICAgICAgICAgZ2V0bGluZShjaW4sIGdyb3VwTmFtZSk7CiAgICAgICAgICAgICAgICBjb3V0IDw8ICLQntCx0LXRgNGW0YLRjCDQtNC10L3RjCAoMCAtINCy0LXRgdGMINGC0LjQttC00LXQvdGMLCAxIC0g0J/QvSwgLi4uLCA1IC0g0J/Rgik6ICI7CiAgICAgICAgICAgICAgICBjaW4gPj4gZGF5Q2hvaWNlOwogICAgICAgICAgICAgICAgY2luLmlnbm9yZSgpOwogICAgICAgICAgICAgICAgcHJpbnRHcm91cFNjaGVkdWxlKGdyb3VwTmFtZSwgZGF5Q2hvaWNlIC0gMSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgICAgc2F2ZVRvRmlsZSgicm96a2xhZC50eHQiKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICBjb3V0IDw8ICLQktC40YXRltC0INC3INC/0YDQvtCz0YDQsNC80LguXG4iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBjb3V0IDw8ICLQndC10LLRltGA0L3QuNC5INCy0LjQsdGW0YAhXG4iOwogICAgICAgIH0KICAgIH0gd2hpbGUgKGNob2ljZSAhPSAwKTsKfQoKaW50IG1haW4oKSB7CiAgICBHcm91cCBnMSA9IHsiMjU2IiwgewogICAgICAgIHsi0JDQu9Cz0L7RgNC40YLQvNGW0LfQsNGG0ZbRjyIsICLQodC40LTQvtGA0YPQuiIsIDN9LAogICAgICAgIHsi0JzQsNGC0LXQvNCw0YLQuNC60LAiLCAi0JrRgNC40LLQvtGIIiwgM30sCiAgICAgICAgeyLQhtC90LbQtdC90LXRgNGW0Y8iLCAi0J/QsNGB0YLRg9GI0LrQviIsIDJ9LAogICAgICAgIHsi0IbRgdGC0L7RgNGW0Y8iLCAi0KjQuNC80YfRg9C6IiwgMn0KICAgIH19OwoKICAgIEdyb3VwIGcyID0geyIyNTUiLCB7CiAgICAgICAgeyLQkNC70LPQvtGA0LjRgtC80ZbQt9Cw0YbRltGPIiwgItCh0LjQtNC+0YDRg9C6IiwgM30sCiAgICAgICAgeyLQnNCw0YLQtdC80LDRgtC40LrQsCIsICLQmtGA0LjQstC+0YgiLCAzfSwKICAgICAgICB7ItCG0L3QttC10L3QtdGA0ZbRjyIsICLQn9Cw0YHRgtGD0YjQutC+IiwgMn0sCiAgICAgICAgeyLQhtGB0YLQvtGA0ZbRjyIsICLQqNC40LzRh9GD0LoiLCAyfQogICAgfX07CgogICAgR3JvdXAgZzMgPSB7IjI1NCIsIHsKICAgICAgICB7ItCQ0LvQs9C+0YDQuNGC0LzRltC30LDRhtGW0Y8iLCAi0KHQuNC00L7RgNGD0LoiLCAzfSwKICAgICAgICB7ItCc0LDRgtC10LzQsNGC0LjQutCwIiwgItCa0YDQuNCy0L7RiCIsIDN9LAogICAgICAgIHsi0IbQvdC20LXQvdC10YDRltGPIiwgItCf0LDRgdGC0YPRiNC60L4iLCAyfSwKICAgICAgICB7ItCG0YHRgtC+0YDRltGPIiwgItCo0LjQvNGH0YPQuiIsIDJ9CiAgICB9fTsKCiAgICB2ZWN0b3I8R3JvdXA+IGdyb3VwcyA9IHtnMSwgZzIsIGczfTsKICAgIG1lbnUoZ3JvdXBzKTsKCiAgICByZXR1cm4gMDsKfQoKCg==