Example #1
0
        static void Main(string[] args)
        {
            var atm = new ATM();

            atm.LoadCash();

            IHandler handler = new VerifyCashHandler
            {
                Next = new IssueCashHandler
                {
                    Next = new ResultInformHandler()
                }
            };

            while (true)
            {
                Console.Write("Enter sum: ");
                var sum = int.Parse(Console.ReadLine());
                handler.Handle(atm, new Request(sum));
            }
        }
Example #2
0
        public override void Handle(ATM atm, Request request)
        {
            if (request.Sum <= 0 || request.Sum > atm.Sum)
            {
                Console.WriteLine("Cash cannot be issued");
                return;
            }

            var sum = request.Sum;

            foreach (var banknote in atm.Cash
                     .Where(x => x.Value > 0)
                     .OrderByDescending(x => x.Key))
            {
                var amount = sum / banknote.Key;

                if (amount == 0)
                {
                    continue;
                }

                if (amount > banknote.Value)
                {
                    amount = banknote.Value;
                }

                sum -= banknote.Key * amount;
                request.CashToIssue.Add(banknote.Key, amount);
            }

            if (sum != 0)
            {
                Console.WriteLine("Cash cannot be issued");
                request.CashToIssue.Clear();
                return;
            }

            base.Handle(atm, request);
        }
Example #3
0
 public virtual void Handle(ATM atm, Request request)
 {
     Next?.Handle(atm, request);
 }