Advertisement
viktarb

Супермаркет

Mar 22nd, 2023 (edited)
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.04 KB | Food | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. class Program
  5. {
  6.     static void Main(string[] args)
  7.     {
  8.         int clientsCount = 10;
  9.         Queue<Client> clients = new Queue<Client>();
  10.  
  11.         for (int i = 0; i < clientsCount; i++)
  12.         {
  13.             clients.Enqueue(new Client());
  14.         }
  15.  
  16.         Store store = new Store(clients);
  17.         store.ServeClient();
  18.     }
  19. }
  20.  
  21. static class UserUtils
  22. {
  23.     private static readonly Random _random = new Random();
  24.  
  25.     public static int GenerateRandomNumber(int minValue, int maxValue)
  26.     {
  27.         return _random.Next(minValue, maxValue);
  28.     }
  29. }
  30.  
  31. class Client
  32. {
  33.     private readonly ProductCart _productCart = new ProductCart();
  34.     private readonly int _money;
  35.  
  36.     public Client(int minimumMoney = 10, int maximumMoney = 20)
  37.     {
  38.         _money = UserUtils.GenerateRandomNumber(minimumMoney, maximumMoney + 1);
  39.     }
  40.  
  41.     public bool IsSolvency()
  42.     {
  43.         return _money >= _productCart.GetTotalCost();
  44.     }
  45.  
  46.     public void RemoveRandomProduct()
  47.     {
  48.         int randomIndexNumber = UserUtils.GenerateRandomNumber(0, _productCart.GetProductCount());
  49.         _productCart.RemoveProduct(randomIndexNumber);
  50.     }
  51.  
  52.     public bool IsSufficiencyProductsInCart()
  53.     {
  54.         int howManyProductsShouldBeInTheCart = 5;
  55.         return _productCart.GetProductCount() == howManyProductsShouldBeInTheCart;
  56.     }
  57.  
  58.     public void FillCart(Product product)
  59.     {
  60.         int minChance = 1;
  61.         int maxChance = 100;
  62.         int buyingChance = 40;
  63.  
  64.         int randomRoll = UserUtils.GenerateRandomNumber(minChance, maxChance + 1);
  65.  
  66.         if (buyingChance > randomRoll)
  67.         {
  68.             _productCart.AddProduct(new Product(product));
  69.         }
  70.     }
  71.  
  72.     public void ShowInfo()
  73.     {
  74.         Console.WriteLine("Количество денег у клиента - " + _money + ". Его корзина: ");
  75.         _productCart.ShowInfo();
  76.     }
  77. }
  78.  
  79. class ProductCart
  80. {
  81.     private readonly List<Product> _products = new List<Product>();
  82.  
  83.     public ProductCart() { }
  84.  
  85.     public void AddProduct(Product product)
  86.     {
  87.         _products.Add(product);
  88.     }
  89.  
  90.     public void RemoveProduct(int indexNumber)
  91.     {
  92.         _products.RemoveAt(indexNumber);
  93.     }
  94.  
  95.     public int GetTotalCost()
  96.     {
  97.         int totalCost = 0;
  98.  
  99.         foreach (Product product in _products)
  100.         {
  101.             totalCost += product.Price;
  102.         }
  103.  
  104.         return totalCost;
  105.     }
  106.  
  107.     public int GetProductCount()
  108.     {
  109.         return _products.Count;
  110.     }
  111.  
  112.     public void ShowInfo()
  113.     {
  114.         int counter = 1;
  115.  
  116.         foreach (Product product in _products)
  117.         {
  118.             Console.Write(counter++ + " ");
  119.             product.ShowInfo();
  120.         }
  121.     }
  122. }
  123.  
  124. class Store
  125. {
  126.     private readonly List<Product> _productList = new List<Product>();
  127.     private readonly Queue<Client> _clients = new Queue<Client>();
  128.  
  129.     public Store(Queue<Client> clients)
  130.     {
  131.         _clients = clients;
  132.         FillProductList();
  133.     }
  134.  
  135.     public void ServeClient()
  136.     {
  137.         Console.WriteLine("Добро пожаловать в \"Администрирование супермаркетом\"");
  138.         Console.WriteLine("Какие товары есть у нас в магазине?");
  139.  
  140.         ShowAllProductList();
  141.  
  142.         System.Threading.Thread.Sleep(1000);
  143.         Console.WriteLine("Открываем кассу магазина");
  144.         OpenCheckout();
  145.         Console.WriteLine("Клиентов больше не осталось. Магазин закрывается!");
  146.     }
  147.  
  148.     public void OpenCheckout()
  149.     {
  150.         int counter = 0;
  151.  
  152.         while (_clients.Count > 0)
  153.         {
  154.             Client client = _clients.Dequeue();
  155.             counter++;
  156.             SingleClientService(client, counter);
  157.         }
  158.     }
  159.  
  160.     public void SingleClientService(Client client, int counter)
  161.     {
  162.         bool isSuffeciencyProductsInCart = false;
  163.         System.Threading.Thread.Sleep(1000);
  164.  
  165.         Console.WriteLine("\n\nКлиент номер " + counter);
  166.         Console.WriteLine("Заполняем корзину...");
  167.  
  168.         while (isSuffeciencyProductsInCart == false)
  169.         {
  170.             for (int i = 0; i < _productList.Count; i++)
  171.             {
  172.                 if (isSuffeciencyProductsInCart == false)
  173.                 {
  174.                     client.FillCart(_productList[i]);
  175.                     isSuffeciencyProductsInCart = client.IsSufficiencyProductsInCart();
  176.                 }
  177.                 else
  178.                 {
  179.                     i = _productList.Count;
  180.                 }
  181.             }
  182.         }
  183.  
  184.         client.ShowInfo();
  185.         System.Threading.Thread.Sleep(1000);
  186.         PaymentTime(client);
  187.     }
  188.  
  189.     public void PaymentTime(Client client)
  190.     {
  191.         bool isCanPurchase = client.IsSolvency();
  192.         Console.WriteLine("Пробуем оплатить");
  193.         System.Threading.Thread.Sleep(1000);
  194.  
  195.         if (isCanPurchase)
  196.         {
  197.             Console.WriteLine("У клиента оплата прошла успешно, ушёл довольным.");
  198.         }
  199.         else
  200.         {
  201.             while (isCanPurchase == false)
  202.             {
  203.                 Console.WriteLine("У клиента номер не достаточно денег. Выбрасываем товар.");
  204.                 client.RemoveRandomProduct();
  205.                 isCanPurchase = client.IsSolvency();
  206.                 System.Threading.Thread.Sleep(500);
  207.             }
  208.  
  209.             Console.WriteLine("Клиент номер наконец смог оплатить свой товар. Ушёл грустным...");
  210.         }
  211.  
  212.         System.Threading.Thread.Sleep(1000);
  213.     }
  214.  
  215.     public void ShowAllProductList()
  216.     {
  217.         int counter = 1;
  218.         Console.WriteLine("Показываю весь список товаров:");
  219.  
  220.         foreach (Product product in _productList)
  221.         {
  222.             Console.Write(counter + " ");
  223.             product.ShowInfo();
  224.             counter++;
  225.         }
  226.     }
  227.  
  228.     private void FillProductList()
  229.     {
  230.         _productList.Add(new Product("Яблоки", 4, "Свежие, вкусные, сочные", "Франция"));
  231.         _productList.Add(new Product("Груши", 6, "Формой похож на лампочку", "Польша"));
  232.         _productList.Add(new Product("Бульба", 3, "Вырасчаная настаящыми беларусами", "Беларусь"));
  233.         _productList.Add(new Product("Клубника", 11, "Красная свежая клубника из Вьетнама", "Вьетнам"));
  234.         _productList.Add(new Product("Брокколи", 7, "Зеленые, как маленькие деревья", "Германия"));
  235.         _productList.Add(new Product("Презервативы", 15, "Свежие, вкусные, сочные", "Китай"));
  236.         _productList.Add(new Product("Капуста", 2, "Капуста. Да, просто капуста", "Россия"));
  237.         _productList.Add(new Product("Бананы", 5, "Вкусные, только съешь меня", "Кипр"));
  238.     }
  239. }
  240.  
  241. class Product
  242. {
  243.     public Product(string name, int price, string description, string manufacturer)
  244.     {
  245.         Name = name;
  246.         Price = price;
  247.         Description = description;
  248.         ManufacturerCountry = manufacturer;
  249.     }
  250.  
  251.     public Product(Product product)
  252.     {
  253.         Name = product.Name;
  254.         Price = product.Price;
  255.         Description = product.Description;
  256.         ManufacturerCountry = product.ManufacturerCountry;
  257.     }
  258.  
  259.     public string Name { get; private set; }
  260.     public int Price { get; private set; }
  261.     public string Description { get; private set; }
  262.     public string ManufacturerCountry { get; private set; }
  263.  
  264.     public void ShowInfo()
  265.     {
  266.         Console.WriteLine($"Имя - {Name}, цена - {Price}, Описание - {Description}, Страна изготовитель - {ManufacturerCountry}");
  267.     }
  268. }
Tags: ijunior
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement