Advertisement
vovanhik_24

#46

Feb 26th, 2024 (edited)
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.10 KB | None | 0 0
  1.     internal class Program
  2.     {
  3.         private static void Main(string[] args)
  4.         {
  5.             Supermarket supermarket = new Supermarket();
  6.             supermarket.Work();
  7.         }
  8.     }
  9.  
  10.     class Product
  11.     {
  12.         public Product(string name, decimal price)
  13.         {
  14.             Name = name;
  15.             Price = price;
  16.         }
  17.  
  18.         public string Name { get; private set; }
  19.         public decimal Price { get; private set; }
  20.     }
  21.  
  22.     class Customer
  23.     {
  24.         private List<Product> _shoppingCart = new List<Product>();
  25.  
  26.         public Customer(string name, decimal money, List<Product> products)
  27.         {
  28.             Name = name;
  29.             Money = money;
  30.             _shoppingCart = products;
  31.         }
  32.  
  33.         public string Name { get; private set; }
  34.         public decimal Money { get; private set; }
  35.  
  36.         public decimal GetTotalCost()
  37.         {
  38.             decimal totalCost = 0;
  39.  
  40.             foreach (Product product in _shoppingCart)
  41.             {
  42.                 totalCost += product.Price;
  43.             }
  44.  
  45.             return totalCost;
  46.         }
  47.  
  48.         public void RemoveRandomProduct()
  49.         {
  50.             if (_shoppingCart.Count > 0)
  51.             {
  52.                 int index = UserUtils.GenerateRandom(_shoppingCart.Count - 1);
  53.                 _shoppingCart.RemoveAt(index);
  54.             }
  55.         }
  56.  
  57.         public void Pay(decimal amount)
  58.         {
  59.             Money -= amount;
  60.         }
  61.     }
  62.  
  63.     class Supermarket
  64.     {
  65.         private Queue<Customer> _customers;
  66.         private List<Product> _products;
  67.  
  68.         public Supermarket()
  69.         {
  70.             _customers = new Queue<Customer>();
  71.             _products = new List<Product>
  72.             {
  73.                 new Product("Молоко", 50),
  74.                 new Product("Хлеб", 30),
  75.                 new Product("Яйца", 70),
  76.                 new Product("Мясо", 200),
  77.                 new Product("Овощи", 80)
  78.             };
  79.         }
  80.  
  81.         public void Work()
  82.         {
  83.             Console.WriteLine("Добро пожаловать в супермаркет!");
  84.             Console.WriteLine("Введите количество клиентов: ");
  85.  
  86.             if (int.TryParse(Console.ReadLine(), out int numCustomers))
  87.             {
  88.                 CreateQueue(numCustomers);
  89.  
  90.                 Console.WriteLine("\nНачинаем обслуживание клиентов:");
  91.                 ServeClients();
  92.             }
  93.             else
  94.             {
  95.                 Console.WriteLine("Ошибка ввода!");
  96.             }
  97.         }
  98.  
  99.         private void CreateQueue(int numCustomers)
  100.         {
  101.             int _minCustomersBalance = 150;
  102.             int _maxCustomersBalance = 1000;
  103.  
  104.             for (int i = 1; i <= numCustomers; i++)
  105.             {
  106.                 List<Product> customerProducts = GetRandomProducts();
  107.                 Customer customer = new Customer($"Клиент {i}", UserUtils.GenerateRandom(_maxCustomersBalance, _minCustomersBalance), customerProducts);
  108.                 _customers.Enqueue(customer);
  109.             }
  110.         }
  111.  
  112.         private void ServeClients()
  113.         {
  114.             while (_customers.Count > 0)
  115.             {
  116.                 Customer customer = _customers.Dequeue();
  117.  
  118.                 Console.WriteLine($"\nТекущий клиент: {customer.Name}");
  119.                 Console.WriteLine($"Деньги клиента: {customer.Money}");
  120.  
  121.                 decimal totalCost = customer.GetTotalCost();
  122.                 Console.WriteLine($"Сумма покупки: {totalCost}");
  123.  
  124.                 while (customer.Money < totalCost)
  125.                 {
  126.                     customer.RemoveRandomProduct();
  127.  
  128.                     totalCost = customer.GetTotalCost();
  129.                     Console.WriteLine($"Не хватает денег. Удален рандомный товар. Новая сумма покупки: {totalCost}");
  130.                 }
  131.  
  132.                 if (totalCost == 0)
  133.                 {
  134.                     Console.WriteLine("Клиент не смог ничего купить.");
  135.                 }
  136.                 else
  137.                 {
  138.                     customer.Pay(totalCost);
  139.                     Console.WriteLine($"Оплата прошла успешно. Денег осталось: {customer.Money}");
  140.                 }
  141.             }
  142.         }
  143.  
  144.         private List<Product> GetRandomProducts()
  145.         {
  146.             List<Product> randomProducts = new List<Product>();
  147.             int numProducts = UserUtils.GenerateRandom(_products.Count, 1);
  148.  
  149.             for (int i = 0; i < numProducts; i++)
  150.             {
  151.                 Product product = _products[UserUtils.GenerateRandom(_products.Count - 1)];
  152.                 randomProducts.Add(product);
  153.             }
  154.  
  155.             return randomProducts;
  156.         }
  157.     }
  158.  
  159.     class UserUtils
  160.     {
  161.         private static Random s_random = new Random();
  162.  
  163.         public static int GenerateRandom(int maxValue, int minValue = 0)
  164.         {
  165.             return s_random.Next(minValue, maxValue + 1);
  166.         }
  167.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement