Advertisement
ZhongNi

Supermarket (2)

Oct 22nd, 2024 (edited)
19
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.19 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4.  
  5. namespace Classes
  6. {
  7.     internal class Program
  8.     {
  9.         static void Main()
  10.         {
  11.             Supermarket supermarket = new Supermarket();
  12.             supermarket.Work();
  13.         }
  14.     }
  15.  
  16.     class Supermarket
  17.     {
  18.         private List<Product> _products = new List<Product>();
  19.         private Queue<Client> _clients = new Queue<Client>();
  20.  
  21.         private int _revenue;
  22.  
  23.         public void Work()
  24.         {
  25.             CreateProducts();
  26.             CreateClients();
  27.  
  28.             int clientNumber = 1;
  29.             bool isWorking = true;
  30.  
  31.             while (isWorking)
  32.             {
  33.                 Client currentClient = _clients.Dequeue();
  34.  
  35.                 currentClient.ShowCard();
  36.                 _revenue += currentClient.Buy();
  37.                 currentClient.ShowBag();
  38.                 ShowRevenue();
  39.  
  40.                 isWorking = _clients.Count > 0;
  41.  
  42.                 if (isWorking)
  43.                 {
  44.                     Console.WriteLine($"\nNext client {++clientNumber}\nPress something");
  45.                     Console.ReadKey();
  46.                     Console.Clear();
  47.                 }
  48.             }
  49.         }
  50.  
  51.         private void CreateProducts()
  52.         {
  53.             int productsCount = 100;
  54.  
  55.             for (int i = 0; i < productsCount; i++)
  56.             {
  57.                 _products.Add(new Product(i + 1));
  58.             }
  59.         }
  60.  
  61.         private void CreateClients()
  62.         {
  63.             int clientsCount = 10;
  64.             List<Client> clients = new List<Client>(clientsCount);
  65.  
  66.             for (int i = 0; i < clientsCount; i++)
  67.             {
  68.                 clients.Add(new Client(_products));
  69.             }
  70.  
  71.             AddClients(clients);
  72.         }
  73.  
  74.         private void AddClients(List<Client> clients)
  75.         {
  76.             foreach (Client client in clients)
  77.             {
  78.                 _clients.Enqueue(client);
  79.             }
  80.         }
  81.  
  82.         private void ShowRevenue()
  83.         {
  84.             Console.WriteLine("\nRevenue: " + _revenue);
  85.         }
  86.     }
  87.  
  88.     class Product
  89.     {
  90.         public Product(int index)
  91.         {
  92.             Initialize(index);
  93.         }
  94.  
  95.         public string Name { get; private set; }
  96.  
  97.         public int Price { get; private set; }
  98.  
  99.         private void Initialize(int index)
  100.         {
  101.             Name = "product " + index;
  102.  
  103.             int minValue = 50;
  104.             int maxValue = 300;
  105.  
  106.             Price = UserUtils.GenerateRandomNumber(minValue, maxValue + 1);
  107.         }
  108.     }
  109.  
  110.     class Client
  111.     {
  112.         private List<Product> _cart = new List<Product>();
  113.         private List<Product> _bag = new List<Product>();
  114.  
  115.         private int _wallet;
  116.  
  117.         public Client(List<Product> products)
  118.         {
  119.             Initialize(products);
  120.         }
  121.  
  122.         public void ShowCard()
  123.         {
  124.             ShowProducts(_cart);
  125.         }
  126.  
  127.         public int Buy()
  128.         {
  129.             int purchasePrice = 0;
  130.  
  131.             foreach (Product product in _cart)
  132.             {
  133.                 purchasePrice += product.Price;
  134.             }
  135.  
  136.             bool canBuy = false;
  137.  
  138.             while (canBuy == false)
  139.             {
  140.                 Console.WriteLine($"\npurchase price: {purchasePrice}");
  141.  
  142.                 if (purchasePrice > _wallet && _cart.Count != 0)
  143.                 {
  144.                     purchasePrice -= ThrowOutPurchase(_cart);
  145.                 }
  146.                 else
  147.                 {
  148.                     canBuy = true;
  149.                 }
  150.             }
  151.  
  152.             if (_cart.Count == 0)
  153.             {
  154.                 Console.WriteLine("\nThere are no purchases in the cart");
  155.             }
  156.             else
  157.             {
  158.                 Console.WriteLine("\nThere is enough money to buy");
  159.                 ReplaceInBag(_cart);
  160.             }
  161.  
  162.             _wallet -= purchasePrice;
  163.  
  164.             return purchasePrice;
  165.         }
  166.  
  167.         public void ShowBag()
  168.         {
  169.             Console.WriteLine("Products in the bag:");
  170.             ShowProducts(_bag);
  171.         }
  172.  
  173.         private void Initialize(List<Product> products)
  174.         {
  175.             int minWalletValue = 500;
  176.             int maxWalletValue = 1000;
  177.  
  178.             _wallet = UserUtils.GenerateRandomNumber(minWalletValue, maxWalletValue + 1);
  179.  
  180.             int minProductsCount = 2;
  181.             int maxProductsCount = 10;
  182.             int productsInCart = UserUtils.GenerateRandomNumber(minProductsCount, maxProductsCount + 1);
  183.  
  184.             for (int i = 0; i < productsInCart; i++)
  185.             {
  186.                 int productIndex = UserUtils.GenerateRandomNumber(products.Count);
  187.                 _cart.Add(products[productIndex]);
  188.             }
  189.         }
  190.  
  191.         private int ThrowOutPurchase(List<Product> cart)
  192.         {
  193.             int randomProductIndex = UserUtils.GenerateRandomNumber(cart.Count);
  194.             int throwOutProductPrice = cart[randomProductIndex].Price;
  195.  
  196.             Console.WriteLine($"\nNot enough money to buy\nA random product is thrown out of the cart:{cart[randomProductIndex].Name} - price:{cart[randomProductIndex].Price}");
  197.             cart.RemoveAt(randomProductIndex);
  198.             Console.WriteLine("press something");
  199.             Console.ReadKey();
  200.  
  201.             return throwOutProductPrice;
  202.         }
  203.  
  204.         private void ReplaceInBag(List<Product> _cart)
  205.         {
  206.             int cartCount = _cart.Count;
  207.  
  208.             for (int i = 0; i < cartCount; i++)
  209.             {
  210.                 _bag.Add(_cart[0]);
  211.                 _cart.RemoveAt(0);
  212.             }
  213.         }
  214.  
  215.         private void ShowProducts(List<Product> products)
  216.         {
  217.             int index = 1;
  218.  
  219.             foreach (Product product in products)
  220.             {
  221.                 Console.WriteLine(index++ + " - " + product.Name + " - price:" + product.Price);
  222.             }
  223.         }
  224.     }
  225.  
  226.     class UserUtils
  227.     {
  228.         private static Random s_random = new Random();
  229.  
  230.         public static int GenerateRandomNumber(int min, int max)
  231.         {
  232.             return s_random.Next(min, max);
  233.         }
  234.  
  235.         public static int GenerateRandomNumber(int max)
  236.         {
  237.             return s_random.Next(max);
  238.         }
  239.     }
  240. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement