Advertisement
ZhongNi

Supermarket

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