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())] }; }
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]; } } }
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; }
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; }
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); } }
public ActionResult <FullSchedule> GetFullSchedule() { FullSchedule fullSchedule = BartonSchedulerWeekday.GetFullSchedule(new FullSchedule()); return(fullSchedule); }
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; }
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]); }
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; }
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; }
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)); }
/// <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); }
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(); }
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()); }
public Schedule(FullSchedule fullSchedule) : base(fullSchedule) { }
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; } } }