RedFlys

OnlineStore v3

Apr 10th, 2024
934
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) == false)
  42.             _goods[good] = 0;
  43.  
  44.         _goods[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) == false)
  55.             return false;
  56.            
  57.         return count >= countGoods;        
  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) == false || _goods[good] < countGoods)
  68.             throw new ArgumentOutOfRangeException();
  69.        
  70.         _goods[good] -= countGoods;
  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 (_warehouse.CanIssue(good, countGoods) == false)
  107.             throw new InvalidOperationException();
  108.  
  109.         if (_goods.ContainsKey(good) == false)
  110.             _goods[good] = 0;
  111.  
  112.         _goods[good] += countGoods;          
  113.     }
  114.  
  115.     public PayOrder Order()
  116.     {
  117.         foreach(var goods in _goods)
  118.         {
  119.             _warehouse.TransferForDelivery(goods.Key, goods.Value);
  120.         }
  121.  
  122.         _goods.Clear();
  123.         return new PayOrder();
  124.     }
  125. }
  126.  
  127. public class Good
  128. {
  129.     public Good(string name)
  130.     {
  131.         if (string.IsNullOrEmpty(name))
  132.             throw new ArgumentNullException();
  133.  
  134.         Name = name;
  135.     }
  136.  
  137.     public string Name { get; }
  138. }
  139.  
  140. public class PayOrder
  141. {
  142.     public PayOrder() { }
  143.  
  144.     public string Paylink { get; }
  145. }
  146.  
  147. public interface IDeliveryWarehouse
  148. {
  149.     public bool CanIssue(Good good, int countGoods);
  150.  
  151.     public void TransferForDelivery(Good good, int countGoods);
  152. }
  153.  
  154. public class GoodEqualityCompare : IEqualityComparer<Good>
  155. {
  156.     public bool Equals(Good? good1, Good? good2)
  157.     {
  158.         if (ReferenceEquals(good1, good2))
  159.             return true;
  160.  
  161.         if (good1 == null || good2 == null)
  162.             return false;
  163.  
  164.         return good1.Name == good2.Name;
  165.     }
  166.  
  167.     public int GetHashCode(Good good) => good.Name.GetHashCode();
  168. }
Advertisement
Add Comment
Please, Sign In to add comment