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" },5 ), new Coffee("Latte", 5.0, new List { "Vanilla", "Caramel" },3), new Coffee("Mocca", 3.0, new List { "Strawberry", "Hazelnut" },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) { 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 || order.Stock <= 0) { Console.WriteLine("Geçersiz sipariş veya stokta yok, lütfen tekrar deneyin."); continue; } Console.WriteLine("Ek malzeme olarak ne istersiniz?"); string ingredientName = Console.ReadLine(); if (order.Syrups.Contains(ingredientName)) { order.AddExtraFlavor(ingredientName); Console.WriteLine($"Ek malzeme olarak {ingredientName} eklendi."); order.Stock -= 1; Console.WriteLine("Kalan stok: " + order.Stock); if (order.Stock == 0) { Console.WriteLine("Bu üründen kalmadı."); } } else { Console.WriteLine("Geçersiz malzeme, lütfen tekrar deneyin."); continue; } var availableCashier = employees.OfType().FirstOrDefault(e => !e.IsBusy); if (availableCashier != null) { availableCashier.TakeOrder(order); Task.Run(async () => { await availableCashier.ProcessOrder(order); }); } var availableBarista = employees.OfType().FirstOrDefault(e => !e.IsBusy); if (availableBarista != null) { availableBarista.ProcessOrder(order).Wait(); } 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 List Syrups { get; set; } public int Stock { get; set; } public string ExtraFlavor { get; set; } public Coffee(string name, double price, List syrups, int stock) { Name = name; Price = price; Syrups = syrups; Stock = stock; } 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}."); } public override async Task ProcessOrder(Coffee order) { IsBusy = true; await Task.Delay(60000); // 1 dakika bekle IsBusy = false; } } }