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)); } }
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); }
public virtual void Handle(ATM atm, Request request) { Next?.Handle(atm, request); }