Advertisement
RedFlys

OnlineStore v2

Mar 30th, 2024
873
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Good iPhone12 = new Good("IPhone 12");
  2. Good iPhone11 = new Good("IPhone 11");
  3.  
  4. Warehouse warehouse = new Warehouse();
  5.  
  6. Shop shop = new Shop(warehouse);
  7.  
  8. warehouse.Delive(iPhone12, 10);
  9. warehouse.Delive(iPhone11, 1);
  10.  
  11. //Вывод всех товаров на складе с их остатком
  12.  
  13. Cart cart = shop.Cart();
  14. cart.Add(iPhone12, 4);
  15. cart.Add(iPhone11, 3); //при такой ситуации возникает ошибка так, как нет нужного количества товара на складе
  16.  
  17. //Вывод всех товаров в корзине
  18.  
  19. Console.WriteLine(cart.Order().Paylink);
  20.  
  21. cart.Add(iPhone12, 9); //Ошибка, после заказа со склада убираются заказанные товары
  22.  
  23.  
  24. public class Warehouse : IDeliveryWarehouse
  25. {
  26.     private readonly Dictionary<Good, int> _goods;
  27.  
  28.     public Warehouse()
  29.     {
  30.         GoodEqualityCompare goodEqualityCompare = new();
  31.         _goods = new(goodEqualityCompare);
  32.     }
  33.  
  34.     public void Delive(Good good, int countGoods)
  35.     {
  36.         good = good ?? throw new ArgumentNullException();
  37.  
  38.         if (countGoods < 0)
  39.             throw new ArgumentOutOfRangeException();
  40.  
  41.         if (_goods.ContainsKey(good))
  42.             _goods[good] += countGoods;
  43.         else
  44.             _goods.Add(good, countGoods);
  45.     }
  46.  
  47.     public bool CanIssue(Good good, int countGoods)
  48.     {
  49.         good = good ?? throw new ArgumentNullException();
  50.  
  51.         if (countGoods < 0)
  52.             throw new ArgumentOutOfRangeException();
  53.  
  54.         if (_goods.TryGetValue(good, out int count))
  55.             return count >= countGoods;
  56.         else
  57.             return false;
  58.     }
  59.  
  60.     public void TransferForDelivery(Good good, int countGoods)
  61.     {
  62.         good = good ?? throw new ArgumentNullException();
  63.  
  64.         if (countGoods < 0)
  65.             throw new ArgumentOutOfRangeException();
  66.  
  67.         if (_goods.ContainsKey(good) && _goods[good] >= countGoods)
  68.             _goods[good] -= countGoods;
  69.         else
  70.             throw new ArgumentOutOfRangeException();
  71.     }
  72. }
  73.  
  74. public class Shop
  75. {
  76.     private readonly Warehouse _warehouse;
  77.  
  78.     public Shop(Warehouse warehouse) => _warehouse = warehouse ?? throw new ArgumentNullException();
  79.    
  80.     public Cart Cart()
  81.     {
  82.         return new Cart(_warehouse);
  83.     }
  84. }
  85.  
  86. public class Cart
  87. {
  88.     private readonly Dictionary<Good, int> _goods;
  89.     private readonly IDeliveryWarehouse _warehouse;
  90.  
  91.     public Cart(IDeliveryWarehouse warehouse)
  92.     {
  93.         _warehouse = warehouse ?? throw new ArgumentNullException();
  94.  
  95.         GoodEqualityCompare goodEqualityCompare = new();
  96.         _goods = new(goodEqualityCompare);
  97.     }
  98.  
  99.     public void Add(Good good, int countGoods)
  100.     {
  101.         good = good ?? throw new ArgumentNullException();
  102.  
  103.         if (countGoods < 0)
  104.             throw new ArgumentOutOfRangeException();
  105.  
  106.         if (_goods.ContainsKey(good))
  107.             _goods[good] += countGoods;
  108.         else
  109.             _goods.Add(good, countGoods);
  110.     }
  111.  
  112.     public PayOrder Order()
  113.     {
  114.         foreach(var goods in _goods)
  115.         {
  116.             _warehouse.TransferForDelivery(goods.Key, goods.Value);
  117.         }
  118.  
  119.         _goods.Clear();
  120.         return new PayOrder();
  121.     }
  122. }
  123.  
  124. public class Good
  125. {
  126.     public Good(string name)
  127.     {
  128.         if (string.IsNullOrEmpty(name))
  129.             throw new ArgumentNullException();
  130.  
  131.         Name = name;
  132.     }
  133.  
  134.     public string Name { get; }
  135. }
  136.  
  137. public class PayOrder
  138. {
  139.     public PayOrder() { }
  140.  
  141.     public string Paylink { get; }
  142. }
  143.  
  144. public interface IDeliveryWarehouse
  145. {
  146.     public bool CanIssue(Good good, int countGoods);
  147.  
  148.     public void TransferForDelivery(Good good, int countGoods);
  149. }
  150.  
  151. public class GoodEqualityCompare : IEqualityComparer<Good>
  152. {
  153.     public bool Equals(Good? good1, Good? good2)
  154.     {
  155.         if (ReferenceEquals(good1, good2))
  156.             return true;
  157.  
  158.         if (good1 == null || good2 == null)
  159.             return false;
  160.  
  161.         return good1.Name == good2.Name;
  162.     }
  163.  
  164.     public int GetHashCode(Good good) => good.Name.GetHashCode();
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement