コード例 #1
0
 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;
 }
コード例 #2
0
 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;
 }
コード例 #3
0
ファイル: SameClasses.cs プロジェクト: Eugenni/mandarin
 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;
 }