private void GenerateTimetable() { //Generam tabela de profesori goala GenerateInitialStateProfessorsTimetable(); TimetableDataContext context = new TimetableDataContext(); //Initializam toate clasele cu module si sunt toate libere List <bool> moduleLibere = new List <bool> { false, false, false, false, false }; //Lista cu id-uri si zilele saptamanii List <int> classRooms_ID = (from c in context.ClassRooms select c.ID).ToList(); List <string> zileSaptaman = new List <string> { "luni", "marti", "miercuri", "joi", "vineri" }; //Dictionar final legaturi clasa->zile_saptamana->Module Dictionary <int, Dictionary <string, List <bool> > > classRooms_Zile_Module = new Dictionary <int, Dictionary <string, List <bool> > >(); foreach (int index in classRooms_ID) { Dictionary <string, List <bool> > zileSaptaman_Module_temp = new Dictionary <string, List <bool> >(); zileSaptaman_Module_temp.Add("luni", moduleLibere.ToList()); zileSaptaman_Module_temp.Add("marti", moduleLibere.ToList()); zileSaptaman_Module_temp.Add("miercuri", moduleLibere.ToList()); zileSaptaman_Module_temp.Add("joi", moduleLibere.ToList()); zileSaptaman_Module_temp.Add("vineri", moduleLibere.ToList()); classRooms_Zile_Module.Add(index, zileSaptaman_Module_temp); } //Selectam toate grupele IEnumerable <Group> grupeStudenti = from g in context.Groups select g; Random rnd = new Random(); //Parchurgem fiecare grupa foreach (Group grupa in grupeStudenti) { //Selectam orele de curs IEnumerable <Attend> oreCurs = from a in context.Attends where a.Group_ID == grupa.ID select a; GroupTimetable gt = new GroupTimetable(); gt.NumeGrupa = grupa.Description; gt.Clasa = new List <string>(); gt.Zi = new List <string>(); gt.Modul = new List <int>(); gt.OraCurs = new List <string>(); //Parcurgem fiecare ora de Curs de 2 ori! for (int i = 0; i < 2; i++) { foreach (var oraCurs in oreCurs) { bool clasaGasita = false; int contorEsec = -1; while (!clasaGasita) { int croom_rnd = rnd.Next(0, classRooms_ID.Count()); int weekday_rnd = rnd.Next(0, 5); int modul_rnd; contorEsec++; if (contorEsec >= 12) { modul_rnd = rnd.Next(0, 5); } else { modul_rnd = rnd.Next(0, 3); } if (classRooms_Zile_Module[classRooms_ID[croom_rnd]][zileSaptaman[weekday_rnd]][modul_rnd] == false) { string numeSala = (from sal in context.ClassRooms where sal.ID == classRooms_ID[croom_rnd] select sal.Name).First(); //Verificam daca nu avem deja modulul acela ocupat bool checkOcupat = false; for (int j = 0; j < gt.Zi.Count(); j++) { if (zileSaptaman[weekday_rnd] == gt.Zi[j] && modul_rnd == gt.Modul[j]) { checkOcupat = true; break; } } //Verificam daca nu se suprapun 2 profesori if (CheckProfessorsSync(numeSala, zileSaptaman[weekday_rnd], modul_rnd, oraCurs.Class.Name, grupa.Description, oraCurs.Class.Professor.Name) == false) { checkOcupat = true; } if (checkOcupat == true) { continue; } //Adaugam in lista aici gt.Clasa.Add(numeSala); gt.Zi.Add(zileSaptaman[weekday_rnd]); gt.Modul.Add(modul_rnd); gt.OraCurs.Add(oraCurs.Class.Name); classRooms_Zile_Module[classRooms_ID[croom_rnd]][zileSaptaman[weekday_rnd]][modul_rnd] = true; clasaGasita = true; } } } } orarFinalGrupe.Add(gt); } }
private void cbox_Groups_SelectedIndexChanged(object sender, EventArgs e) { if (cbox_Groups.SelectedIndex == -1) { return; } lview_Orar.Items.Clear(); GroupTimetable gt = new GroupTimetable(); foreach (var item in orarFinalGrupe) { if (item.NumeGrupa == cbox_Groups.Text) { gt = item; break; } } string[] rowLuni = { "Luni", "", "", "", "", "" }; string[] rowMarti = { "Marti", "", "", "", "", "" }; string[] rowMiercuri = { "Miercuri", "", "", "", "", "" }; string[] rowJoi = { "Joi", "", "", "", "", "" }; string[] rowVineri = { "Vineri", "", "", "", "", "" }; List <ListViewItem> items = new List <ListViewItem>(); for (int i = 0; i < gt.Zi.Count(); i++) { if (gt.Zi[i] == "luni") { rowLuni[gt.Modul[i] + 1] = gt.OraCurs[i] + " : " + gt.Clasa[i]; } else if (gt.Zi[i] == "marti") { rowMarti[gt.Modul[i] + 1] = gt.OraCurs[i] + " : " + gt.Clasa[i]; } else if (gt.Zi[i] == "miercuri") { rowMiercuri[gt.Modul[i] + 1] = gt.OraCurs[i] + " : " + gt.Clasa[i]; } else if (gt.Zi[i] == "joi") { rowJoi[gt.Modul[i] + 1] = gt.OraCurs[i] + " : " + gt.Clasa[i]; } else if (gt.Zi[i] == "vineri") { rowVineri[gt.Modul[i] + 1] = gt.OraCurs[i] + " : " + gt.Clasa[i]; } } items.Add(new ListViewItem(rowLuni)); items.Add(new ListViewItem(rowMarti)); items.Add(new ListViewItem(rowMiercuri)); items.Add(new ListViewItem(rowJoi)); items.Add(new ListViewItem(rowVineri)); foreach (var item in items) { lview_Orar.Items.Add(item); } }