Пример #1
0
 public void PrintInfo()
 {
     Console.WriteLine($"Booked slots: {BookedList.Count}");
     BookedList.ForEach(Console.WriteLine);
     Console.WriteLine($"Available time: {AvailableList.Count}");
     AvailableList.ForEach(Console.WriteLine);
 }
Пример #2
0
        public bool Book(Slot bookedSlot)
        {
            TimePoint bookedTimePoint = bookedSlot.StartPoint;
            int       durationMinute  = bookedSlot.DurationMinute;

            FreeTime freeTime = null;

            AvailableList.ForEach(time =>
            {
                List <TimePoint> availableSlots = time.CalculateAvailableSlots(durationMinute);
                if (availableSlots.Find(point => point.Equals(bookedTimePoint)) != null)
                {
                    freeTime = time;
                }
            });

            if (freeTime == null)
            {
                //Console.WriteLine("There is no available time for you");
                return(false);
            }

            AvailableList.Remove(freeTime);
            AvailableList.AddRange(freeTime.SplitFreeTimes(bookedSlot));
            AvailableList.Sort((ft1, ft2) => ft1.Start.GetMinuteLength() - ft2.Start.GetMinuteLength());

            BookedList.Add(bookedSlot);
            BookedList.Sort((slot1, slot2) => slot1.StartPoint.GetMinuteLength() - slot2.StartPoint.GetMinuteLength());

            //Console.WriteLine("You have booked successfully");
            return(true);
        }
Пример #3
0
        public void AddBookedSlot(Slot slot)
        {
            BookedList.Add(slot);

            List <FreeTime> toRemove = new List <FreeTime>();
            List <FreeTime> toAdd    = new List <FreeTime>();

            foreach (var freeTime in AvailableList)
            {
                if (slot.EndPoint.GetMinuteLength() <= freeTime.Start.GetMinuteLength() ||
                    freeTime.End.GetMinuteLength() <= slot.StartPoint.GetMinuteLength())
                {
                    continue;
                }

                if (freeTime.Start.GetMinuteLength() <= slot.StartPoint.GetMinuteLength() &&
                    slot.EndPoint.GetMinuteLength() <= freeTime.End.GetMinuteLength())
                {
                    toRemove.Add(freeTime);
                    toAdd.AddRange(freeTime.SplitFreeTimes(slot));
                    continue;
                }

                if (slot.StartPoint.GetMinuteLength() <= freeTime.Start.GetMinuteLength() &&
                    freeTime.End.GetMinuteLength() <= slot.EndPoint.GetMinuteLength())
                {
                    toRemove.Add(freeTime);
                    continue;
                }

                if (slot.EndPoint.GetMinuteLength() <= freeTime.End.GetMinuteLength())
                {
                    freeTime.Start = slot.EndPoint;
                    if (freeTime.GetDurationMinute() == 0)
                    {
                        toRemove.Add(freeTime);
                    }
                    continue;
                }

                if (freeTime.Start.GetMinuteLength() <= slot.StartPoint.GetMinuteLength())
                {
                    freeTime.End = slot.StartPoint;
                    if (freeTime.GetDurationMinute() == 0)
                    {
                        toRemove.Add(freeTime);
                    }
                }
            }

            foreach (var freeTime in toRemove)
            {
                AvailableList.Remove(freeTime);
            }

            AvailableList.AddRange(toAdd);
        }