Advertisement
VodVas

Супермаркет

Nov 22nd, 2023 (edited)
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.55 KB | Software | 0 0
  1. using System.Diagnostics;
  2. using System.Xml.Linq;
  3.  
  4. namespace Супермаркет
  5. {
  6.     internal class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             Supermarket supermarket = new Supermarket();
  11.  
  12.             supermarket.Work();
  13.         }
  14.     }
  15.  
  16.     class Supermarket
  17.     {
  18.         private Client _client = new Client();
  19.  
  20.         private int _purchasePrice;
  21.         private int _quantityClients;
  22.  
  23.         private List<Product> _products = new List<Product>();
  24.         private List<Product> _clientBasket = new List<Product>();
  25.  
  26.         private Queue<Client> _clients;
  27.  
  28.         public Supermarket()
  29.         {
  30.             _clients = new Queue<Client>(_quantityClients);
  31.  
  32.             _clientBasket = _client.ReturnClientBasket();
  33.  
  34.             _products.Add(new Product(0, "Пакет", 10));
  35.             _products.Add(new Product(1, "Бананы", 85));
  36.             _products.Add(new Product(2, "Молоко", 65));
  37.             _products.Add(new Product(3, "Пиво", 50));
  38.             _products.Add(new Product(4, "Курица", 320));
  39.             _products.Add(new Product(5, "Сосиски", 125));
  40.             _products.Add(new Product(6, "Кола", 75));
  41.         }
  42.  
  43.         public void Work()
  44.         {
  45.             Console.WriteLine("Введите количество посетителей:");
  46.  
  47.             _quantityClients = Utility.ReturnInputNumber();
  48.  
  49.  
  50.             for (int i = 0; i < _quantityClients; i++)
  51.             {
  52.                 AddClient();
  53.                 FillBasket();
  54.                 RemoveUnnecessaryProduct();
  55.                 InspectionBasketForAbsenceProduct();
  56.                 ShowSale();
  57.  
  58.                 Console.ForegroundColor = ConsoleColor.DarkYellow;
  59.                 Console.WriteLine("\nНажмите любую клавишу для вызова следующего клиента");
  60.                 Console.ForegroundColor = ConsoleColor.White;
  61.  
  62.                 Console.ReadKey();
  63.                 Console.Clear();
  64.  
  65.                 _purchasePrice = 0;
  66.  
  67.                 _clients.Dequeue();
  68.             }
  69.         }
  70.  
  71.         private void AddClient()
  72.         {
  73.             _clients.Enqueue(new Client());
  74.         }
  75.  
  76.         private bool CanPay()
  77.         {
  78.             while (_clients.Peek().Money < _purchasePrice)
  79.             {
  80.                 Console.ForegroundColor = ConsoleColor.DarkGreen;
  81.                 Console.Write($"\nСумма покупки: {_purchasePrice}");
  82.                 Console.ForegroundColor = ConsoleColor.White;
  83.  
  84.                 Console.ForegroundColor = ConsoleColor.DarkYellow;
  85.                 Console.Write($"\nДеньги покупателя: {_clients.Peek().Money}\n");
  86.                 Console.ForegroundColor = ConsoleColor.White;
  87.  
  88.                 Console.ForegroundColor = ConsoleColor.Red;
  89.                 Console.WriteLine("Денег не хватает, Галя! Отмена!");
  90.                 Console.ForegroundColor = ConsoleColor.White;
  91.  
  92.                 return false;
  93.             }
  94.  
  95.             return true;
  96.         }
  97.  
  98.         private void RemoveUnnecessaryProduct()
  99.         {
  100.             if (CanPay() == false)
  101.             {
  102.                 RemoveRandomProduct();
  103.                 RemoveUnnecessaryProduct();
  104.             }
  105.         }
  106.  
  107.         private void InspectionBasketForAbsenceProduct()
  108.         {
  109.             if (_clientBasket.Count == 0)
  110.             {
  111.                 Console.ForegroundColor = ConsoleColor.DarkRed;
  112.                 Console.WriteLine("\nЖалобную книгу мне! (Клиент передумал покупать в этом магазине)");
  113.                 Console.ForegroundColor = ConsoleColor.White;
  114.  
  115.                 return;
  116.             }
  117.         }
  118.  
  119.         private void ShowSale()
  120.         {
  121.             Console.ForegroundColor = ConsoleColor.Yellow;
  122.             Console.Write($"\nСумма покупки: {_purchasePrice}");
  123.             Console.ForegroundColor = ConsoleColor.White;
  124.  
  125.             Console.ForegroundColor = ConsoleColor.DarkYellow;
  126.             Console.Write($"\nДеньги покупателя: {_clients.Peek().Money}");
  127.             Console.ForegroundColor = ConsoleColor.White;
  128.  
  129.             Console.ForegroundColor = ConsoleColor.Green;
  130.             Console.WriteLine("\nДенег хватает\n");
  131.             Console.ForegroundColor = ConsoleColor.White;
  132.  
  133.             Console.ForegroundColor = ConsoleColor.DarkCyan;
  134.             Console.WriteLine("Купленные товары:\n");
  135.             Console.ForegroundColor = ConsoleColor.White;
  136.  
  137.             ShowProductBasket();
  138.         }
  139.  
  140.         private void RemoveRandomProduct()
  141.         {
  142.             int minRandomNumber = 0;
  143.  
  144.             int randomProduct = Utility.GenerateRandomNumber(minRandomNumber, _clientBasket.Count);
  145.  
  146.             Console.Write("Удаленный товар: ");
  147.  
  148.             ShowProduct(randomProduct);
  149.  
  150.             _purchasePrice -= _clientBasket[randomProduct].Price;
  151.  
  152.             _clientBasket.RemoveAt(randomProduct);
  153.         }
  154.  
  155.         private void ShowProduct(int foundProduct)
  156.         {
  157.             Console.WriteLine($"ID: {_clientBasket[foundProduct].Id} Название: {_clientBasket[foundProduct].Title} Цена: {_clientBasket[foundProduct].Price} Руб.");
  158.         }
  159.  
  160.         private void ShowProductBasket()
  161.         {
  162.             for (int i = 0; i < _clientBasket.Count; i++)
  163.             {
  164.                 ShowProduct(i);
  165.             }
  166.         }
  167.  
  168.         private void FillBasket()
  169.         {
  170.             int minQuantityPurchases = 2;
  171.             int maxQuantityPurchases = 10;
  172.             int minIndexProduct = 0;
  173.  
  174.             int quantityPurchases = Utility.GenerateRandomNumber(minQuantityPurchases, maxQuantityPurchases);
  175.  
  176.             _clientBasket = new List<Product>(quantityPurchases);
  177.  
  178.             for (int i = 0; i < quantityPurchases; i++)
  179.             {
  180.                 int randomIndexOfProduct = Utility.GenerateRandomNumber(minIndexProduct, _products.Count);
  181.  
  182.                 _clientBasket.Add(_products[randomIndexOfProduct]);
  183.  
  184.                 _purchasePrice += _products[randomIndexOfProduct].Price;
  185.  
  186.                 ShowProduct(i);
  187.             }
  188.         }
  189.     }
  190.  
  191.     class Client
  192.     {
  193.         private List<Product> _basket = new List<Product>();
  194.  
  195.         public Client()
  196.         {
  197.             int minCashInPocket = 100;
  198.             int maxCashInPocket = 1200;
  199.  
  200.             Money = Utility.GenerateRandomNumber(minCashInPocket, maxCashInPocket);
  201.         }
  202.  
  203.         public int Money { get; private set; }
  204.  
  205.         public List<Product> ReturnClientBasket()
  206.         {
  207.             return new List<Product>(_basket);
  208.         }
  209.     }
  210.  
  211.     class Product
  212.     {
  213.         public Product(int id, string name, int price)
  214.         {
  215.             Id = id;
  216.             Title = name;
  217.             Price = price;
  218.         }
  219.  
  220.         public int Id { get; private set; }
  221.         public string Title { get; private set; }
  222.         public int Price { get; private set; }
  223.     }
  224.  
  225.     class Utility
  226.     {
  227.         private static Random s_random = new Random();
  228.  
  229.         public static int GenerateRandomNumber(int min, int max)
  230.         {
  231.             return s_random.Next(min, max);
  232.         }
  233.  
  234.         public static int ReturnInputNumber()
  235.         {
  236.             int number;
  237.  
  238.             while (int.TryParse(Console.ReadLine(), out number) == false)
  239.             {
  240.                 Console.WriteLine("Введено не число, попробуйте еще раз: ");
  241.             }
  242.  
  243.             return number;
  244.         }
  245.     }
  246. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement