如果没有可用插槽,则阻止插入的逻辑

时间:2014-06-26 18:14:52

标签: c# asp.net sql

我正在使用C#在ASP.NET中开发一个应用程序,并且我试图找出实现逻辑语句的最佳方法,该语句将阻止系统在预告片中进行另一次预订独木舟和皮划艇已满。问题是预告片将举行独木舟和皮划艇,但有很多不同的组合。

有5行"行"在拖车上垂直向上计数,2"列"解剖中间的5行。我会给你画一张图,向你展示它的样子,以及哪些船可以去哪里。 " C"将代表独木舟和" K"将代表皮划艇。预告片看起来像这样:

C only|C only  }
______|______  }  BOAT TRAILER
 1C\2K|1C\2K   }
______|______  }     
 1C\2K|1C\2K   } 
______|______  }
 1C\2K|1C\2K   }
______|______  }
C only| C only }
______|______  }

所以我的问题是,就编码和逻辑而言,最重要的选择是不再采取任何更多的预订"预告片已满?此应用程序将是一个.aspx表单,它将对SQL服务器执行插入命令以获取客户信息。

3 个答案:

答案 0 :(得分:1)

public enum BoatType : int
{
    Kayak = 1,
    Canoe = 2
}

public class BoatReservation
{
    public int ReservationID { get; set; }
    public BoatType ReservationBoatType { get; set; }
}

public class BoatTrailer
{
    public List<BoatReservation> CanoeSlots = new List<BoatReservation>();
    public List<BoatReservation> RegularSlots = new List<BoatReservation>();

    public BoatTrailer()
    {
    }

    public bool AddBoat(BoatReservation b)
    {
        bool boatAdded = false;
        switch (b.ReservationBoatType)
        {
            case BoatType.Canoe:
                if (CanoeSlots.Count() < 4)
                {
                    CanoeSlots.Add(b);
                    boatAdded = true;
                }
                else
                {
                    var reg = RegularSlots.Sum(x => Convert.ToInt16(x.ReservationBoatType));
                    if (reg <= 10)
                    {
                        RegularSlots.Add(b);
                        boatAdded = true;
                    }
                }
                break;

            case BoatType.Kayak:
                {
                    var reg = RegularSlots.Sum(x => Convert.ToInt16(x.ReservationBoatType));
                    if (reg <= 11)
                    {
                        RegularSlots.Add(b);
                        boatAdded = true;
                    }
                }
                break;
        }

        return boatAdded;
    }

    public void RemoveBoat(BoatReservation b)
    {
        switch (b.ReservationBoatType)
        {
            case BoatType.Kayak:
                if (RegularSlots.Contains(b))
                {
                    RegularSlots.Remove(b);
                }
                break;

            case BoatType.Canoe:
                if (RegularSlots.Contains(b))
                {
                    RegularSlots.Remove(b);
                }
                else
                {
                    if (CanoeSlots.Contains(b))
                    {
                        CanoeSlots.Remove(b);
                        if (RegularSlots.Where(fb => fb.ReservationBoatType == BoatType.Canoe).Count() > 0)
                        {
                            //Move Reservation From Regular to Canoe Only With Opening
                            BoatReservation mv = RegularSlots.FindLast(fb => fb.ReservationBoatType == BoatType.Canoe);
                            RegularSlots.Remove(mv);
                            CanoeSlots.Add(mv);
                        }
                    }
                }
                break;
        }
    }

    public string AvailableSlots()
    {
        string Output = string.Empty;

        int AvailableCanoeCnt = (4 - CanoeSlots.Count()) + ((12 - RegularSlots.Count()) / 2);
        int AvailableKayakCnt = (12 - RegularSlots.Count());

        Output = string.Format("Canoe Slots Left: {0}   Kayak Slots Left {1} ", AvailableCanoeCnt, AvailableKayakCnt);

        return Output;
    }
}

快速课程,处理独木舟/皮划艇的预订(包括添加和删除)以适合预告片。

答案 1 :(得分:0)

这个网站不是最好的问题,但我会为此提供一个伪结构。

Trailer Object
   JustCanoes int
   CanoeKayakBlend int

预订时......

If the reservation is for a canoe, and the JustCanoes value is < 4, then increase JustCanoes by 1
   If JustCanoes is >= 4
      If CanoeKayakBlend <= 10
          increase CanoeKayakBlend by 2
      else
          Sorry no reservation available


If the reservation is for a kayak
    If CanoeKayakBlend <= 11
          increase CanoeKayakBlend by 1
    else
          Sorry no reservation available

答案 2 :(得分:0)

一个非常快速和简单的实现:这是Compartment

class Compartment
    {
        private readonly int _maxCanoe;
        private readonly int _maxKayak;
        private int _currentCanoe;
        private int _currentKayak;
        private readonly int _id;
        private bool _fullCanoe;
        private bool _fullKayak;

        public Compartment(int id, int maxC, int maxK)
        {
            _id = id;
            _maxCanoe = maxC;
            _maxKayak = maxK;

            _currentCanoe = _currentKayak = 0;

            UpdateCapacityStatus();
        }

        private void UpdateCapacityStatus()
        {
            _fullCanoe = _maxCanoe == _currentCanoe;
            _fullKayak = _maxKayak == _currentKayak;
        }

        private string Status
        {
            get { return IsFull() ? "FULL" : "Space available"; }
        }

        public bool IsFull()
        {
            return _fullKayak && _fullCanoe;
        }

        public void AddCanoe()
        {
            _fullKayak = true; // disable adding kayak

            _currentCanoe = _currentCanoe + 1;

            _fullCanoe = _maxCanoe == _currentCanoe; //update canoe status
        }

        public void AddKayak()
        {
            _fullCanoe = true; //disable adding canoe

            _currentKayak = _currentKayak + 1;

            _fullKayak = _maxKayak == _currentKayak; //update kayak status
        }

        public override string ToString()
        {
            return string.Format("Id: {5}, Status: {0}, with {1} of {2} canoes or {3} of {4} kayaks", Status, _currentCanoe, _maxCanoe, _currentKayak, _maxKayak, _id);
        }

        public bool CanAddCanoe()
        {
            return !_fullCanoe;
        }

        public bool CanAddKayak()
        {
            return !_fullKayak;
        }
    }

这是要测试的驱动程序控制台应用程序,要使用它,你当然应该重构它。

`课程     {         static void Main(string [] args)         {             var trailer =新列表             {                 新舱(1,1,0),                 新舱(2,1,0),                 新舱(3,1,2),                 新舱(4,1,2),                 新舱(5,1,2),                 新舱(6,1,2),                 新舱(7,1,2),                 新舱(8,1,2),             };

        foreach (var compartment in trailer)
        {
            Console.WriteLine(compartment.ToString());
        }

        Console.WriteLine("Press c for canoe or k for kayak");


        var keepGoing = true;

        while (keepGoing)
        {
            var input = Console.Read();

            if (input == 99 || input == 107) //99 c, 107 k
            {
                if (trailer.All(c => c.IsFull()))
                {
                    keepGoing = false;
                }
                else
                {
                    if (input == 99)
                    {
                        if(!trailer.Any(t=>t.CanAddCanoe()))
                        {
                            Console.WriteLine("Cannot add a canoe!!!!");
                        }
                        else
                        {
                            var firstAvailable = trailer.First(c => c.CanAddCanoe());
                            firstAvailable.AddCanoe();
                        }
                    }
                    else if (input == 107)
                    {
                        if (!trailer.Any(t => t.CanAddKayak()))
                        {
                            Console.WriteLine("Cannot add a kayak!!!!");
                        }
                        else
                        {
                            var firstAvailable = trailer.First(c => c.CanAddKayak());
                            firstAvailable.AddKayak();
                        }
                    }
                    else
                    {
                        Console.WriteLine("Press c for canoe or k for kayak");
                    }
                }

                foreach (var compartment in trailer)
                {
                    Console.WriteLine(compartment.ToString());
                }
            }
        }
        Console.ReadKey();
    }
}`