using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; class Program { static List menuItems = new List { new Coffee("Caramel Macchiato", 5.0, new List { "Vanilla", "Hazelnut" }), // Diğer kahveler }; static void Main(string[] args) { List employees = new List { new Barista("X"), new Barista("Y"), new Barista("Z"), new Cashier("L"), new Cashier("M") }; while (true) { if (employees.All(e => e.IsBusy)) { Console.WriteLine("Üzgünüz, tüm kasiyerler ve baristalar meşgul. Lütfen sonra tekrar deneyin."); continue; } Console.WriteLine("Siparişinizi girin (çıkmak için 'exit'):"); string orderName = Console.ReadLine(); if (orderName == "exit") break; var order = menuItems.FirstOrDefault(coffee => coffee.Name == orderName); if (order == null) { Console.WriteLine("Geçersiz sipariş, lütfen tekrar deneyin."); continue; } // Şurup, ek aroma vb. seçenekleri sor var availableCashier = employees.OfType().FirstOrDefault(e => !e.IsBusy); if (availableCashier != null) { availableCashier.TakeOrder(order); if (employees.OfType().All(e => e.IsBusy)) { Console.WriteLine("Baristalar şu anda meşgul, siparişinizi en kısa sürede hazırlayacaklar."); } else { var availableBarista = employees.OfType().FirstOrDefault(e => !e.IsBusy); availableBarista.ProcessOrder(order); } } } } class Coffee { public string Name { get; private set; } public double Price { get; private set; } public List Syrups { get; private set; } public string ExtraFlavor { get; private set; } public Coffee(string name, double price, List syrups) { Name = name; Price = price; Syrups = syrups; } public void AddExtraFlavor(string flavor) { ExtraFlavor = flavor; } } abstract class Employee { public bool IsBusy { get; protected set; } public string Name { get; private set; } public Employee(string name) { Name = name; } public virtual async Task ProcessOrder(Coffee order) { IsBusy = true; Console.WriteLine($"{Name} {order.Name} hazırlıyor..."); await Task.Delay(new Random().Next(2, 6) * 60000); // 2-5 dakika arası rastgele zaman Console.WriteLine($"{Name} {order.Name} hazırladı."); IsBusy = false; } } class Barista : Employee { public Barista(string name) : base(name) { } } class Cashier : Employee { public Cashier(string name) : base(name) { } public void TakeOrder(Coffee order) { Console.WriteLine($"{Name} siparişinizi aldı: {order.Name}."); } } }