Advertisement
SPavelA

OOPTask9Supermarket

Oct 26th, 2024
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.34 KB | Gaming | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace OOPTask9Supermarket
  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.     public class Supermarket
  17.     {
  18.         private List<Product> _products = new List<Product>();
  19.         private Queue<Client> _clients = new Queue<Client>();
  20.         private int _money = 0;
  21.  
  22.         public Supermarket()
  23.         {
  24.             CreateProducts();
  25.             CreateClients();
  26.         }
  27.  
  28.         public void Work()
  29.         {
  30.             while (_clients.Count > 0)
  31.             {
  32.                 Console.WriteLine($"Баланс супермаркета {_money} и в очереди {_clients.Count} покупателей");
  33.                 Client client = _clients.Dequeue();
  34.                 Console.WriteLine("\nСледующий клиент подошел к кассе\n");
  35.  
  36.                 if (client.IsEmptyCart)
  37.                 {
  38.                     Console.WriteLine("Он ничего не хочет купить, а просто протискивается мимо кассы");
  39.                 }
  40.                 else
  41.                 {
  42.                     Console.WriteLine("Он хочет купить:");
  43.                     client.ShowCart();
  44.                     Console.WriteLine();
  45.                     client.ValidateCart();
  46.                     Console.WriteLine();
  47.  
  48.                     if (client.IsEmptyCart)
  49.                     {
  50.                         Console.WriteLine("У покупателя совсем ни на что не хватило денег");
  51.                     }
  52.                     else
  53.                     {
  54.                         int takenMoney = client.GiveMoneyForProducts();
  55.                         Console.WriteLine($"За {takenMoney} он покупает:");
  56.                         client.ShowCart();
  57.                         _money += takenMoney;
  58.                         client.TakeProducts();
  59.                     }
  60.                 }
  61.  
  62.                 Console.WriteLine("\nПокупатель уходит домой");
  63.                 Console.WriteLine("\nДля продолжения нажмите любую клавишу");
  64.                 Console.ReadKey();
  65.                 Console.Clear();
  66.             }
  67.  
  68.             Console.WriteLine($"Все клиенты обслужены, баланс супермаркета: {_money} рублей");
  69.             Console.ReadKey();
  70.         }
  71.  
  72.         public void CreateClients()
  73.         {
  74.             const int CountClients = 20;
  75.             const int MinimumDesirePercent = 0;
  76.             const int MaximumDesirePercent = 100;
  77.             const int MinimumMoney = 100;
  78.             const int MaximumMoney = 5000;
  79.  
  80.             for (int i = 0; i < CountClients; i++)
  81.             {
  82.                 Client client = new Client(UserUtils.GenerateRandomNumber(MinimumMoney, MaximumMoney),
  83.                             UserUtils.GenerateRandomNumber(MinimumDesirePercent, MaximumDesirePercent));
  84.                 OfferProducts(client);
  85.                 _clients.Enqueue(client);
  86.             }
  87.         }
  88.  
  89.         private void OfferProducts(Client client)
  90.         {
  91.             foreach (Product product in _products)
  92.             {
  93.                 client.DecideProduct(product);
  94.             }
  95.         }
  96.  
  97.         private void CreateProducts()
  98.         {
  99.             _products.Add(new Product("йогурт", 50));
  100.             _products.Add(new Product("банан", 150));
  101.             _products.Add(new Product("помидор", 200));
  102.             _products.Add(new Product("морковь", 30));
  103.             _products.Add(new Product("хлеб", 80));
  104.             _products.Add(new Product("молоко", 100));
  105.             _products.Add(new Product("печенье", 50));
  106.             _products.Add(new Product("мыло", 50));
  107.             _products.Add(new Product("веревка", 50));
  108.         }
  109.     }
  110.  
  111.     public class Client
  112.     {
  113.         private const int MinimumProductCount = 1;
  114.         private const int MaximumProductCount = 20;
  115.  
  116.         private List<Product> _cart = new List<Product>();
  117.         private List<Product> _bag = new List<Product>();
  118.         private int _money;
  119.         private int _desirePercent;
  120.  
  121.         public Client(int money, int desirePercent)
  122.         {
  123.             _money = money;
  124.             _desirePercent = desirePercent;
  125.         }
  126.  
  127.         public bool IsEmptyCart => _cart.Count == 0;
  128.  
  129.         public void DecideProduct(Product product)
  130.         {
  131.             if(UserUtils.IsProbability(_desirePercent))
  132.             {
  133.                 _cart.Add(product.Clone(UserUtils.GenerateRandomNumber(MinimumProductCount, MaximumProductCount)));
  134.             }
  135.         }
  136.  
  137.         private int CalcCartCost()
  138.         {
  139.             int cartCost = 0;
  140.  
  141.             foreach(Product product in _cart)
  142.             {
  143.                 cartCost += product.Cost;
  144.             }
  145.  
  146.             return cartCost;
  147.         }
  148.  
  149.         public void ValidateCart()
  150.         {
  151.             while (CalcCartCost() > _money)
  152.             {
  153.                 RemoveRandomProduct();
  154.             }
  155.         }
  156.  
  157.         public int GiveMoneyForProducts()
  158.         {
  159.             int cartCost = CalcCartCost();
  160.  
  161.             _money -= cartCost;
  162.             return cartCost;
  163.         }
  164.  
  165.         public void TakeProducts()
  166.         {
  167.             foreach(Product product in _cart)
  168.             {
  169.                 _bag.Add(product);
  170.             }
  171.  
  172.             _cart.Clear();
  173.         }
  174.  
  175.         private void RemoveRandomProduct()
  176.         {
  177.             Product randomProduct = _cart[UserUtils.GenerateRandomNumber(0, _cart.Count)];
  178.            
  179.             Console.Write("Не хватает денег и выкидывает: ");
  180.             randomProduct.ShowInfo();
  181.             _cart.Remove(randomProduct);
  182.         }
  183.  
  184.         public void ShowCart()
  185.         {
  186.             foreach(Product product in _cart)
  187.             {
  188.                 product.ShowInfo();
  189.             }
  190.         }
  191.     }
  192.  
  193.     public class Product
  194.     {
  195.         private string _name;
  196.         private int _price;
  197.         private int _count;
  198.  
  199.         public Product(string name, int price, int count = 0)
  200.         {
  201.             _name = name;
  202.             _price = price;
  203.             _count = count;
  204.         }
  205.  
  206.         public int Cost => _price * _count;
  207.  
  208.         public void ShowShortInfo()
  209.         {
  210.             Console.WriteLine($"\"{_name}\" : {_price} рублей");
  211.         }
  212.  
  213.         public void ShowInfo()
  214.         {
  215.             Console.WriteLine($"\"{_name}\" : {_price} x {_count} = {Cost} рублей");
  216.         }
  217.  
  218.         public Product Clone(int count)
  219.         {
  220.             return new Product( _name, _price, count);
  221.         }
  222.     }
  223.  
  224.     public class UserUtils
  225.     {
  226.         private const int MinimumPercent = 0;
  227.         private const int MaximumPercent = 100;
  228.  
  229.         private static Random s_random = new Random();
  230.  
  231.         public static int GenerateRandomNumber(int minimumNumber, int maximumNumber)
  232.         {
  233.             return s_random.Next(minimumNumber, maximumNumber);
  234.         }
  235.  
  236.         public static bool IsProbability(int percent)
  237.         {
  238.             return s_random.Next(MinimumPercent, MaximumPercent) < percent;
  239.         }
  240.     }
  241. }
  242.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement