예제 #1
0
        // Проверка корректности составленного расписания
        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);
        }