Example #1
0
 public static bool LotOfClassesInDay(int maxCountClassesInDay, StudentsClass[,] sClasses, ISchedule schedule, StudentsClass specialClass)
 {
     int rowClass = -1;
     int dayOfSpecialClass = Constants.GetDayOfClass(schedule.GetClassPosition(specialClass).Value.Time);
     //если пара есть в списке "особых пар" - получаю номер строки, в которой располагаются другие "особые" пары
     if ((rowClass = GetRow(sClasses, specialClass)) != -1)
     {
         int dayCount = 0; //количество "особых" пар из полученной строки, поставленных в данный день
         for (int classIndex = 0; classIndex < sClasses.GetLength(1); classIndex++)
         {
             if (sClasses[rowClass, classIndex] == null)
                 continue;
             StudentsClassPosition? position = schedule.GetClassPosition(sClasses[rowClass, classIndex]);
             if (position.HasValue)//если пара установлена
             {
                 if (dayOfSpecialClass == Constants.GetDayOfClass(position.Value.Time))
                     dayCount++;
                 if (dayCount > maxCountClassesInDay)
                 {
                     return true;
                 }
             }
         }
     }
     return false;
 }
Example #2
0
 public static bool ClassesAtSameTime(StudentsClass c1, StudentsClass c2, ISchedule schedule)
 {
     StudentsClassPosition? firstClassPosition = schedule.GetClassPosition(c1);
     StudentsClassPosition? secondClassPosition = schedule.GetClassPosition(c2);
     if (firstClassPosition.HasValue && secondClassPosition.HasValue)
     {
         if (firstClassPosition.Value.Time > secondClassPosition.Value.Time)
         {
             if (secondClassPosition.Value.Time + Constants.CLASSES_IN_DAY * Constants.DAYS_IN_WEEK
                 != firstClassPosition.Value.Time)
             {
                 return false;
             }
         }
         else if (secondClassPosition.Value.Time > firstClassPosition.Value.Time)
         {
             if (firstClassPosition.Value.Time + Constants.CLASSES_IN_DAY * Constants.DAYS_IN_WEEK
                 != secondClassPosition.Value.Time)
             {
                 return false;
             }
         }
     }
     return true;
 }
Example #3
0
 public static bool ClassesAtSameTime(ISchedule schedule, int classRow, StudentsClass[,] sClasses)
 {
     StudentsClassPosition? firstClassPosition = schedule.GetClassPosition(sClasses[classRow, 0]);
     StudentsClassPosition? secondClassPosition = schedule.GetClassPosition(sClasses[classRow, 1]);
     if (firstClassPosition.HasValue && secondClassPosition.HasValue)
     {
         if (firstClassPosition.Value.Time > secondClassPosition.Value.Time)
         {
             if (secondClassPosition.Value.Time + Constants.CLASSES_IN_DAY * Constants.DAYS_IN_WEEK
                 != firstClassPosition.Value.Time)
             {
                 return false;
             }
         }
         else if (secondClassPosition.Value.Time > firstClassPosition.Value.Time)
         {
             if (firstClassPosition.Value.Time + Constants.CLASSES_IN_DAY * Constants.DAYS_IN_WEEK
                 != secondClassPosition.Value.Time)
             {
                 return false;
             }
         }
     }
     return true;
 }
Example #4
0
 public static bool LotOfClassesInWeek(int maxCountClassesInWeek, StudentsClass[,] sClasses, ISchedule schedule, StudentsClass specialClass)
 {
     int rowClass = -1;
     //если пара есть в списке "особых пар" - получаю номер строки, в которой располагаются другие "особые" пары
     if ((rowClass = GetRow(sClasses, specialClass)) != -1)
     {
         int weekCount1 = 0; //количество "особых" пар из полученной строки, поставленных на первую неделю
         int weekCount2 = 0; //количество "особых" пар из полученной строки, поставленных на вторую неделю
         for (int classIndex = 0; classIndex < sClasses.GetLength(1); classIndex++)
         {
             if (sClasses[rowClass, classIndex] == null)
                 continue;
             StudentsClassPosition? position = schedule.GetClassPosition(sClasses[rowClass, classIndex]);
             if (position.HasValue)//если пара установлена
             {
                 if (Constants.GetWeekOfClass(position.Value.Time) == 0)//если пара располагается на первой неделе
                     weekCount1++;
                 else//на второй
                     weekCount2++;
             }
         }
         if (weekCount1 > maxCountClassesInWeek || weekCount2 > maxCountClassesInWeek)
         {
             return true;
         }
     }
     return false;
 }
Example #5
0
 public int GetFineOfFullSchedule(ISchedule schedule, EntityStorage eStorage)
 {
     int fineResult = 0;
     for (int groupIndex = 0; groupIndex < eStorage.StudentSubGroups.Length; groupIndex++)
     {
         PartialSchedule groupSchedule = schedule.GetPartialSchedule(eStorage.StudentSubGroups[groupIndex]);
         for (int dayIndex = 0; dayIndex < Constants.DAYS_IN_WEEK; dayIndex++)
         {
             StudentsClass[] sClass = groupSchedule.GetClassesOfDay(dayIndex);
             for (int classIndex = 0; classIndex < sClass.Length; classIndex++)
             {
                 if (sClasses.FindAll((c) => c.sClass == sClass[classIndex]).Count() > 0)
                 {
                     FixedClasses vipClass = sClasses.Find((c) => c.sClass == sClass[classIndex]);
                     if (vipClass.Room != schedule.GetClassRoom(sClass[classIndex]) && vipClass.Time != schedule.GetClassPosition(sClass[classIndex]).Value.Time)
                     {
                         if (isBlock)
                             return Constants.BLOCK_FINE;
                         else
                             fineResult += fine;
                     }
                 }
             }
         }
     }
     return fineResult;
 }
Example #6
0
 public int GetFineOfAddedClass(ISchedule schedule, EntityStorage eStorage)
 {
     int fineResult = 0;
     StudentsClass tClass = schedule.GetTempClass();
     int tTime = schedule.GetClassPosition(tClass).Value.Time;
     if (sClasses.FindAll((c) => c.sClass == tClass).Count() > 0)
     {
         FixedClasses vipClass = sClasses.Find((c) => c.sClass == tClass);
         if (vipClass.Room != schedule.GetClassRoom(tClass) || vipClass.Time != tTime)
         {
             if (isBlock)
                 return Constants.BLOCK_FINE;
             else
                 fineResult += fine;
         }
     }
     else
     {
         if (sClasses.FindAll((c) => c.Time == tTime && StudentsClass.StudentClassContainsEvenOneSubGroup(tClass, c.sClass)).Count() > 0)
         {
             if (isBlock)
                 return Constants.BLOCK_FINE;
             else
                 fineResult += fine;
         }
     }
     return fineResult;
 }
 public int GetFineOfFullSchedule(ISchedule schedule, EntityStorage eStorage)
 {
     int fineResult = 0;
     foreach (StudentSubGroup subGroup in eStorage.StudentSubGroups)
     {
         for (int dayIndex = 0; dayIndex < Constants.DAYS_IN_WEEK; dayIndex++)
         {
             StudentsClass[] subGroupDay = schedule.GetPartialSchedule(subGroup).GetClassesOfDay(dayIndex);
             for (int classIndex = 0; classIndex < subGroupDay.Length; classIndex++)
             {
                 if (Array.Find<StudentsClass>(sClassesList.ToArray(), (c) => c == subGroupDay[classIndex]) != null)
                 {
                     StudentsClassPosition? firstClassPosition = schedule.GetClassPosition(subGroupDay[classIndex]);
                     StudentsClass secondClass = schedule.GetClassByRoomAndPosition(firstClassPosition.Value.ClassRoom,
                         firstClassPosition.Value.Time + Constants.CLASSES_IN_DAY * Constants.DAYS_IN_WEEK);
                     if (secondClass != null)
                     {
                         int firstClassRow = ClassesInWeek.GetRow(sClasses, subGroupDay[classIndex]);
                         int secondClassRow = ClassesInWeek.GetRow(sClasses, secondClass);
                         if (secondClassRow == -1 || secondClassRow != firstClassRow)
                         {
                             if (isBlock)
                                 return Constants.BLOCK_FINE;
                             else
                                 fineResult += fine;
                         }
                     }
                 }
             }
         }
     }
     return fineResult;
 }
 public int GetFineOfAddedClass(ISchedule schedule, EntityStorage eStorage)
 {
     int fineResult = 0;
     StudentsClass tempClass = schedule.GetTempClass();
     int classTime = schedule.GetTimeOfTempClass();
     int roomIndex = schedule.GetClassPosition(schedule.GetTempClass()).Value.ClassRoom;
     int weekOfClass = Constants.GetWeekOfClass(classTime);
     if (Array.Find(sClassesList.ToArray(), (c) => c == schedule.GetTempClass()) != null)
     {
         StudentsClass secondClass;
         if (weekOfClass == 0)
             secondClass = schedule.GetClassByRoomAndPosition(roomIndex, classTime + Constants.CLASSES_IN_DAY * Constants.DAYS_IN_WEEK);
         else
             secondClass = schedule.GetClassByRoomAndPosition(roomIndex, classTime - Constants.CLASSES_IN_DAY * Constants.DAYS_IN_WEEK);
         if (secondClass != null)
         {
             int firstClassRow = ClassesInWeek.GetRow(sClasses, tempClass);
             int secondClassRow = ClassesInWeek.GetRow(sClasses, secondClass);
             if (secondClassRow == -1 || secondClassRow != firstClassRow)
             {
                 if (isBlock)
                     return Constants.BLOCK_FINE;
                 else
                     fineResult += fine;
             }
         }
     }
     return fineResult;
 }
Example #9
0
 public static bool ClassesHasSameRoom(ISchedule schedule, int classRow, StudentsClass[,] sClasses)
 {
     StudentsClassPosition? firstClassPosition = schedule.GetClassPosition(sClasses[classRow, 0]);
     StudentsClassPosition? secondClassPosition = schedule.GetClassPosition(sClasses[classRow, 1]);
     if (firstClassPosition.HasValue && secondClassPosition.HasValue)
     {
         if (firstClassPosition.Value.ClassRoom != secondClassPosition.Value.ClassRoom)
         {
             return false;
         }
     }
     return true;
 }
Example #10
0
 public static bool ClassesHasSameRoom(StudentsClass c1, StudentsClass c2, ISchedule schedule)
 {
     StudentsClassPosition? firstClassPosition = schedule.GetClassPosition(c1);
     StudentsClassPosition? secondClassPosition = schedule.GetClassPosition(c2);
     if (firstClassPosition.HasValue && secondClassPosition.HasValue)
     {
         if (firstClassPosition.Value.ClassRoom != secondClassPosition.Value.ClassRoom)
         {
             return false;
         }
     }
     return true;
 }
Example #11
0
 public static bool PairClassesAtSameTimeInSameRoom(ISchedule schedule, StudentsClass[,] sClasses, List<StudentsClass> sClassesList, StudentsClass firstClass)
 {
     StudentsClassPosition? firstClassPosition = schedule.GetClassPosition(firstClass);
     int weekOfClass = Constants.GetWeekOfClass(firstClassPosition.Value.Time);
     if (Array.Find(sClassesList.ToArray(), (c) => c == firstClass) != null)
     {
         int classRow = ClassesInWeek.GetRow(sClasses, firstClass);
         int firstClassCol = ClassesInWeek.GetColumn(sClasses, firstClass);
         int secondClassCol = -1;
         switch (firstClassCol)
         {
             case 0:
                 secondClassCol = 1;
                 break;
             case 1:
                 secondClassCol = 0;
                 break;
             default:
                 break;
         }
         StudentsClass secondClass = sClasses[classRow, secondClassCol];
         StudentsClassPosition? secondClassPosition = schedule.GetClassPosition(secondClass);
         int probablySecondClassTime;
         if (weekOfClass == 0)
             probablySecondClassTime = firstClassPosition.Value.Time + Constants.CLASSES_IN_DAY * Constants.DAYS_IN_WEEK;
         else
             probablySecondClassTime = firstClassPosition.Value.Time - Constants.CLASSES_IN_DAY * Constants.DAYS_IN_WEEK;
         if (secondClassPosition.HasValue)
         {
             if (probablySecondClassTime == secondClassPosition.Value.Time)
             {
                 if (firstClassPosition.Value.ClassRoom != secondClassPosition.Value.ClassRoom)
                 {
                     return false;
                 }
             }
         }
         else
         {
             secondClass = schedule.GetClassByRoomAndPosition(firstClassPosition.Value.ClassRoom, probablySecondClassTime);
             if (secondClass != null)
             {
                 return false;
             }
         }
     }
     return true;
 }