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) { Console.WriteLine("Geçersiz sipariş, lütfen tekrar deneyin."); continue; } Console.WriteLine("Ek malzeme olarak ne istersiniz?"); string indigrentName = Console.ReadLine(); if (order.Syrups.Contains(indigrentName)) { order.AddExtraFlavor(indigrentName); Console.WriteLine($"Ek malzeme olarak {indigrentName} eklendi."); int StoklariAzalt() { order.Stock -= 1; Console.WriteLine("Kalan stok:" + order.Stock); if (order.Stock ==0) { Console.WriteLine("Bu üründen kalmadı"); } return order.Stock; } StoklariAzalt(); } 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); if (employees.OfType().All(e => e.IsBusy)) { Console.WriteLine("KAsiyerler şu anda meşgul, siparişinizi en kısa sürede hazırlayacaklar."); } 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; 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}."); } } }