// Проверка корректности составленного расписания public static bool CheckTimetable(DataGridView Timetable, string GroupName) { // Загрузить из БД данные о видах деятельности Dictionary <string, int> ActivityTypes = DBOperations.GetActivityDictionary(); // Загрузить из БД данные о возрасте воспитанников группы int GroupGrade = DBOperations.GetGroupGrade(GroupName); // Загрузить рекомендации СанПИН по организации занятий int[] Recomendations = ReadSanPIN(); // День недели, для которого осуществляется проверка string Day = Timetable.Rows[0].Cells[0].Value.ToString(); // Общая продолжительность занятий int TotalDuration = 0; // Количество приемов пищи, предусмотренное расписанием int HasMeal = 0; // Длительность предусмотренного расписанием перерыва на отдых и прогулку в частности int RestDuration = 0; int WalkDuration = 0; // Длительность предусмотренного расписанием перерыва на сон int SleepDuration = 0; // Длительность учебной деятельности int StudyDuration = 0; // Длительность внеучебной деятельности int ExtraStudyDuration = 0; for (int i = 0; i < Timetable.RowCount; i++) { int Duration = Int32.Parse((string)Timetable.Rows[i].Cells[2].Value); if (Timetable.Rows[i].Cells[3].Value.ToString() != "Конец дня") // Суммируем итоговые длительности для дня { TotalDuration += Duration; switch (ActivityTypes.FirstOrDefault(x => x.Key == (string)Timetable.Rows[i].Cells[3].Value).Value) { case 1: HasMeal++; break; case 2: RestDuration += Duration; break; case 3: StudyDuration += Duration; break; case 4: ExtraStudyDuration += Duration; break; case 5: WalkDuration += Duration; RestDuration += Duration; break; case 6: SleepDuration += Duration; break; } } if (Timetable.Rows[i].Cells[3].Value.ToString() == "Конец дня" || i == Timetable.RowCount - 1) // Проверка полученных значений на соответствие рекомендациям СанПИН { if (TotalDuration > Recomendations[0]) { MessageBox.Show("Общая длительность занятий в " + Day + " превышает рекомендуемую СанПИНом."); return(false); } if (HasMeal < 2) { MessageBox.Show("В " + Day + " должно быть предусмотрено два перерыва для приема пищи."); return(false); } if (RestDuration < Recomendations[1]) { MessageBox.Show("Для восстановления работоспособности учащихся в " + Day + " должен быть организован отдых длительностью не менее " + (Recomendations[1] / 60.0) + " часов."); return(false); } if (WalkDuration < Recomendations[1]) { MessageBox.Show("Основная часть отдыха в " + Day + " не менее " + (Recomendations[1] / 60.0) + " двух часов должна быть проведена на свежем воздухе."); return(false); } if (GroupGrade == 1 && SleepDuration < Recomendations[2]) { MessageBox.Show("Для обучающихся первых классов в " + Day + " должен быть предусмотрен перерыв на сон не менее " + (Recomendations[2] / 60.0) + " часов."); return(false); } if (StudyDuration > Recomendations[6] || (GroupGrade <9 && ExtraStudyDuration> Recomendations[5]) || (GroupGrade <6 && ExtraStudyDuration> Recomendations[4]) || (GroupGrade <4 && ExtraStudyDuration> Recomendations[3])) { MessageBox.Show("Длительность выполнения учебных заданий в " + Day + " превышает рекомендуемую СанПИНом."); return(false); } if (ExtraStudyDuration > Recomendations[8] || (GroupGrade <2 && ExtraStudyDuration> Recomendations[7])) { MessageBox.Show("Длительность внеучебной деятельности в " + Day + " превышает рекомендуемую СанПИНом."); return(false); } Day = Timetable.Rows[i].Cells[0].Value.ToString(); TotalDuration = 0; HasMeal = 0; RestDuration = 0; WalkDuration = 0; SleepDuration = 0; StudyDuration = 0; ExtraStudyDuration = 0; } } return(true); }