コード例 #1
0
ファイル: ESProjectCore.cs プロジェクト: Eugenni/mandarin
 public IEnumerable<FullSchedule> Run()
 {
     int sortCount = 1;
     FullSchedule[] schedules = new FullSchedule[sortCount];
     int[] fines = new int[sortCount];
     for (int sortIndex = 0; sortIndex < sortCount; sortIndex++)
     {
         logger.Info("Итерация " + (sortIndex + 1).ToString());
         StudentsClass[] sortedClasses = SortClasses.Sort(EStorage, FixedClasses, sortIndex);
         FullSchedule schedule = CreateSchedule(sortedClasses);
         schedules[sortIndex] = schedule;
         if (schedule != null)
         {
             fines[sortIndex] = ScanFullSchedule(schedule);
             logger.Info("Расписание " + (sortIndex + 1).ToString() + " сформировано");
             if (SaveCreatedSchedule != null)
                 SaveCreatedSchedule(schedule, fines[sortIndex], sortIndex);
         }
         else
         {
             logger.Info("Расписание " + (sortIndex + 1).ToString() + " заблокировано");
             fines[sortIndex] = Constants.BLOCK_FINE;
         }
     }
     return new List<FullSchedule>() { schedules[Array.IndexOf(fines, Array.FindAll(fines, (f) => f != Constants.BLOCK_FINE).Min())] };
 }
コード例 #2
0
ファイル: FullSchedule.cs プロジェクト: Kirk7by/mandarin
 public FullSchedule(FullSchedule schedule)
 {
     this.TempClass = new StudentsClassPosition(schedule.TempClass.Time, schedule.TempClass.ClassRoom);
     this.eStorage = schedule.eStorage;
     this.classesTable = new StudentsClass[schedule.classesTable.GetLength(0), schedule.classesTable.GetLength(1)];
     for (int timeIndex = 0; timeIndex < this.classesTable.GetLength(0); timeIndex++)
     {
         for (int classIndex = 0; classIndex < this.classesTable.GetLength(1); classIndex++)
         {
             this.classesTable[timeIndex, classIndex] = schedule.classesTable[timeIndex, classIndex];
         }
     }
 }
コード例 #3
0
ファイル: Rollback.cs プロジェクト: Kirk7by/mandarin
 public Rollback(StudentsClass[] classes, int maxCountRollabaks, FullSchedule schedule, StudentsClass[] fixedClasses)
 {
     MaxCountRollbacks = maxCountRollabaks;
     rollbackLenghtArray = new int[classes.Length];
     rollbackCountArray = new int[classes.Length];
     classesForCountRollbackLength = (StudentsClass[])classes.Clone();
     if(fixedClasses != null)
     {
         this.fixedClasses = fixedClasses;
     }
     else
     {
         this.fixedClasses = new StudentsClass[0];
     }
     this.schedule = schedule;
 }
コード例 #4
0
ファイル: TeacherWeekend.cs プロジェクト: Kirk7by/mandarin
        public static int AnalisWeekend(FullSchedule ft, Teacher teacher)
        {
            PartialSchedule partSchedule;
            partSchedule = ft.GetPartialSchedule(teacher);
            StudentsClass[] schedule;
            schedule = partSchedule.GetClasses();

            int rating;
            int ClassInWeek1 = Constants.CLASSES_IN_DAY * Constants.DAYS_IN_WEEK;
            int ClassInWeek2 = Constants.CLASSES_IN_DAY * Constants.DAYS_IN_WEEK * Constants.WEEKS_IN_SCHEDULE;
            int BeginWeek2 = ClassInWeek2 - ClassInWeek1;
            bool weekend1 = false, weekend2 = false;
            //Проверяем на наличие выходного в 1-ой учебной недели
            for (int i = 0; i < ClassInWeek1; i += Constants.CLASSES_IN_DAY)
            {
                int count = 0;
                for (int n = 0; n <= Constants.CLASSES_IN_DAY; n++)
                {
                    if (schedule[i + n] == null)
                    {
                        count++;
                    }
                }
                if (count == Constants.CLASSES_IN_DAY) { weekend1 = true; break; }
            }
            //Конец первой недели
            //Проверяем на наличие выходного в 2-ой учебной недели
            for (int i = BeginWeek2; i < ClassInWeek2; i += Constants.CLASSES_IN_DAY)
            {
                int count = 0;
                for (int n = 0; n < Constants.CLASSES_IN_DAY; n++)
                {
                    if (schedule[i + n] == null)
                    {
                        count++;
                    }
                }
                if (count == Constants.CLASSES_IN_DAY) { weekend2 = true; break; }
            }
            //Конец второй недели

            if (weekend1 == true && weekend2 == true) rating = 0;
            else rating = -1;

            return rating;
        }
コード例 #5
0
        public async Task <FullSchedule> GetAllTimeTable(string group)
        {
            string uri = BaseURL + group + "/" + TimeTableTime.full_schedule.ToString();

            try
            {
                var response = await client.GetStringAsync(uri);

                FullSchedule answer = JsonConvert.DeserializeObject <FullSchedule>(response);
                return(answer);
            } catch (HttpRequestException exception) {
                MainWindow.Instance.Log(exception.ToString());
                return(null);
            } catch (TaskCanceledException exception)
            {
                //throw new Exception("Test");
                MainWindow.Instance.Log(exception.ToString());
                return(null);
            }
        }
コード例 #6
0
        public ActionResult <FullSchedule> GetFullSchedule()
        {
            FullSchedule fullSchedule = BartonSchedulerWeekday.GetFullSchedule(new FullSchedule());

            return(fullSchedule);
        }
コード例 #7
0
ファイル: ESProjectCore.cs プロジェクト: Eugenni/mandarin
 int ScanFullSchedule(FullSchedule schedule)
 {
     IFactor[] factors = CreateFactorsArray();
     int fineResult = 0;
     for (int factorIndex = 0; factorIndex < factors.Length; factorIndex++)
     {
         int fine = factors[factorIndex].GetFineOfFullSchedule(schedule, EStorage);
         if (fine == Constants.BLOCK_FINE)
         {
             return Constants.BLOCK_FINE;
         }
         fineResult += fine;
     }
     return fineResult;
 }
コード例 #8
0
ファイル: ESProjectCore.cs プロジェクト: Eugenni/mandarin
        void InsertFirstClass(StudentsClass[] sortedStudentsClasses, FullSchedule resultSchedule, IFactor[] factors)
        {
            StudentsClassPosition[] positions = resultSchedule.GetSuitableClassRooms(sortedStudentsClasses[0]);
            int[] fines = new int[positions.Length];
            for (int positionIndex = 0; positionIndex < positions.Length; positionIndex++)
            {
                fines[positionIndex] = GetSumFine(positions[positionIndex], factors, resultSchedule, sortedStudentsClasses[0]);
            }
            Logger_StartInstallClass(sortedStudentsClasses[0], positions, fines);
            int indexMinFine = Array.IndexOf<int>(fines, Array.FindAll<int>(fines, (f) => f != Constants.BLOCK_FINE).Min());
            resultSchedule.SetClass(sortedStudentsClasses[0], positions[indexMinFine]);

            Logger_ClassInstalled(sortedStudentsClasses[0], positions[indexMinFine], 0, sortedStudentsClasses.Length, fines[indexMinFine]);
        }
コード例 #9
0
ファイル: ESProjectCore.cs プロジェクト: Eugenni/mandarin
 int GetSumFine(StudentsClassPosition position, IFactor[] factors, FullSchedule scheduleForCreateTemp, StudentsClass sClass)
 {
     FullSchedule schedule = new FullSchedule(scheduleForCreateTemp);
     schedule.SetClass(sClass, position);
     int fine = 0;
     int resultFine = position.Fine;
     for (int factorIndex = 0; factorIndex < factors.Length; factorIndex++)
     {
         fine = factors[factorIndex].GetFineOfAddedClass(schedule, EStorage);
         if (fine != Constants.BLOCK_FINE)
         {
             resultFine += fine;
         }
         else
         {
             return Constants.BLOCK_FINE;
         }
     }
     return resultFine;
 }
コード例 #10
0
ファイル: ESProjectCore.cs プロジェクト: Eugenni/mandarin
        FullSchedule CreateSchedule(StudentsClass[] sortedStudentsClasses)
        {
            FullSchedule resultSchedule = new FullSchedule(EStorage.ClassRooms.Length, EStorage);
            Rollback rollback = new Rollback(sortedStudentsClasses, 100000, resultSchedule, FixedClasses);
            rollback.logger = logger;
            IFactor[] factors = CreateFactorsArray();
            //первая пара ставится отдельно
            InsertFirstClass(sortedStudentsClasses, resultSchedule, factors);
            //----

            for (int classIndex = 1; classIndex < sortedStudentsClasses.Length; classIndex++)
            {
                StudentsClassPosition[] positionsForClass = resultSchedule.GetSuitableClassRooms(sortedStudentsClasses[classIndex]);
                int[] fines = new int[positionsForClass.Length];

                Parallel.For(0, positionsForClass.Length, (positionIndex) =>
                {
                    Interlocked.Exchange(ref fines[positionIndex], GetSumFine(positionsForClass[positionIndex], factors, resultSchedule, sortedStudentsClasses[classIndex]));
                });
                Logger_StartInstallClass(sortedStudentsClasses[classIndex], positionsForClass, fines);
                //for (int positionIndex = 0; positionIndex < positionsForClass.Length; positionIndex++)
                //{
                //    Interlocked.Exchange(ref fines[positionIndex], GetSumFine(positionsForClass[positionIndex], CreateFactorsArray(), resultSchedule, sortedStudentsClasses[classIndex]));
                //}

                if (positionsForClass.Length > 0 && Array.FindAll<int>(fines, (f) => f != Constants.BLOCK_FINE).Length > 0)
                {
                    int indexMinFine = Array.IndexOf<int>(fines, Array.FindAll<int>(fines, (f) => f != Constants.BLOCK_FINE).Min());
                    resultSchedule.SetClass(sortedStudentsClasses[classIndex], positionsForClass[indexMinFine]);

                    Logger_ClassInstalled(sortedStudentsClasses[classIndex], positionsForClass[indexMinFine], classIndex, sortedStudentsClasses.Length, fines[indexMinFine]);
                }
                else
                {
                    logger.Info("---------- Откат пары <" + sortedStudentsClasses[classIndex].Name + ">");
                    if(!rollback.DoRollback(ref sortedStudentsClasses, ref classIndex))
                    {
                        return null;
                    }
                }
            }
            return resultSchedule;
        }
コード例 #11
0
ファイル: Logic.cs プロジェクト: Eugenni/mandarin
        void SaveCreatedSchedule(FullSchedule schedule, int fine, int sort)
        {
            string path = Directory.CreateDirectory(pathToScheduleFolder + String.Format(@"\fine {0} -- sort {1}", fine, sort)).FullName;

            loggingService.Info("Выгрузка в Excel расписания студентов...");
            ScheduleLoader.ExportScheduleToExcel(path + @"\Расписание студентов.xlsx", schedule, storage.StudentSubGroups.ToList());
            loggingService.Info("Расписание студентов выгружено в Excel");

            loggingService.Info("Выгрузка в Excel расписания преподавателей...");
            ScheduleLoader.ExportScheduleToExcel(path + @"\Расписание преподавателей.xlsx", schedule, storage.Teachers.ToList());
            loggingService.Info("Расписание преподавателей выгружено в Excel");

            ScheduleLoader.SaveSchedule("schedule.dat", new Schedule(schedule));
        }
コード例 #12
0
 /// <summary>
 /// Retrieves the employee notes and current schedule for displaying in the history page.
 /// Sponser wants employee notes and schedule seperated.
 /// </summary>
 /// <param name="fullSchedule"></param>
 /// <returns></returns>
 public static FullSchedule GetFullSchedule(FullSchedule fullSchedule)
 {
     fullSchedule.EmployeeNotes = readers.GetEmployeeNotes(new List <EmployeeNote>());
     fullSchedule.Schedules     = readers.GetSchedulesForExcel(new List <ScheduleExcel>());
     return(fullSchedule);
 }
コード例 #13
0
ファイル: ScheduleLoader.cs プロジェクト: Kirk7by/mandarin
 public static void ExportScheduleToExcel(string filePath, FullSchedule schedule, List<Teacher> teachers)
 {
     Schedule fileSchedule = new Schedule(schedule);
     ScheduleExcelTeacher excel = new ScheduleExcelTeacher(filePath, fileSchedule, fileSchedule.EStorage);
     excel.LoadToExcel();
 }
コード例 #14
0
ファイル: ScheduleLoader.cs プロジェクト: Kirk7by/mandarin
 public static void ExportScheduleToExcel(string filePath, FullSchedule schedule, List<StudentSubGroup> groups)
 {
     Schedule fileSchedule = new Schedule(schedule);
     ScheduleExcel excel = new ScheduleExcel(filePath, fileSchedule, fileSchedule.EStorage);
     excel.LoadPartScheduleExcel(groups.ToArray());
 }
コード例 #15
0
ファイル: Schedule.cs プロジェクト: Kirk7by/mandarin
 public Schedule(FullSchedule fullSchedule)
     : base(fullSchedule)
 {
 }
コード例 #16
0
        public SchedulePage(FullSchedule lessons)
        {
            InitializeComponent();

            mainGrid.Margin = new Thickness(100, 50, 100, 50);

            if (lessons == null)
            {
                OutList.Text       = "Произошла ошибка при работе сервера.";
                OutList.Visibility = Visibility.Visible;
                return;
            }

            for (int i = 0; i < 12; i++)
            {
                RowDefinition lessonsRow = new RowDefinition();
                lessonsRow.Height = new GridLength(1, GridUnitType.Star);
                mainGrid.RowDefinitions.Add(lessonsRow);


                TextBlock dayText = new TextBlock();
                dayText.TextAlignment = TextAlignment.Center;
                dayText.FontSize      = 30;
                dayText.FontWeight    = FontWeights.Bold;
                Grid.SetRow(dayText, i);
                dayText.Margin = new Thickness(0, 100, 0, 0);
                if (i % 2 == 0)
                {
                    mainGrid.Children.Add(dayText);
                }


                Grid lessonsGrid = new Grid();
                lessonsGrid.Margin = new Thickness(15);
                Grid.SetRow(lessonsGrid, i);
                if (i % 2 == 1)
                {
                    mainGrid.Children.Add(lessonsGrid);
                }


                switch (i)
                {
                case 0:
                    dayText.Text   = "Понедельник";
                    dayText.Margin = new Thickness(0);
                    break;

                case 1:
                    createDayLessons(lessons.first.monday, lessons.second.monday, lessonsGrid);
                    break;

                case 2:
                    dayText.Text = "Вторник";
                    break;

                case 3:
                    createDayLessons(lessons.first.tuesday, lessons.second.tuesday, lessonsGrid);
                    break;

                case 4:
                    dayText.Text = "Среда";
                    break;

                case 5:
                    createDayLessons(lessons.first.wednesday, lessons.second.wednesday, lessonsGrid);
                    break;

                case 6:
                    dayText.Text = "Четверг";
                    break;

                case 7:
                    createDayLessons(lessons.first.thursday, lessons.second.thursday, lessonsGrid);
                    break;

                case 8:
                    dayText.Text = "Пятница";
                    break;

                case 9:
                    createDayLessons(lessons.first.friday, lessons.second.friday, lessonsGrid);
                    break;

                case 10:
                    dayText.Text = "Суббота";
                    break;

                case 11:
                    createDayLessons(lessons.first.saturday, lessons.second.saturday, lessonsGrid);
                    break;
                }
            }
        }