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, 5), new Coffee("Latte", 5.0, 3), new Coffee("Mocca", 3.0, 4), }; 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) { 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 || order.Stock <= 0) { Console.WriteLine("Geçersiz sipariş veya stokta yok, lütfen tekrar deneyin."); continue; } Cashier availableCashier = null; while (availableCashier == null) { availableCashier = employees.OfType().FirstOrDefault(e => !e.IsBusy); if (availableCashier == null) { Console.WriteLine("Üzgünüz, tüm kasiyerler meşgul. Lütfen bekleyin."); Task.Delay(10000).Wait(); // 10 saniye bekle continue; } availableCashier.TakeOrder(order); availableCashier.ProcessOrder(order).Wait(); // 1 dakika bekle } var availableBarista = employees.OfType().FirstOrDefault(e => !e.IsBusy); if (availableBarista != null) { availableBarista.ProcessOrder(order).Wait(); order.Stock -= 1; Console.WriteLine("Kalan stok: " + order.Stock); } else { Console.WriteLine("Baristalar şu anda meşgul, siparişinizi en kısa sürede hazırlayacaklar."); } } } class Coffee { public string Name { get; set; } public double Price { get; set; } public int Stock { get; set; } public Coffee(string name, double price, int stock) { Name = name; Price = price; Stock = stock; } } 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}."); } public override async Task ProcessOrder(Coffee order) { IsBusy = true; await Task.Delay(60000); // 1 dakika bekle IsBusy = false; } } }