RedFlys

OnlineStore v4

Apr 12th, 2024
1,154
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.         _goods = new(new GoodEqualityCompare());
  30.    
  31.  
  32.     public void Delive(Good good, int countGoods)
  33.     {
  34.         good = good ?? throw new ArgumentNullException();
  35.  
  36.         if (countGoods < 0)
  37.             throw new ArgumentOutOfRangeException();
  38.  
  39.         if (_goods.ContainsKey(good) == false)
  40.             _goods[good] = 0;
  41.  
  42.         _goods[good] += countGoods;
  43.     }
  44.  
  45.     public bool CanIssue(Good good, int countGoods)
  46.     {
  47.         good = good ?? throw new ArgumentNullException();
  48.  
  49.         if (countGoods < 0)
  50.             throw new ArgumentOutOfRangeException();
  51.  
  52.         if (_goods.TryGetValue(good, out int count) == false)
  53.             return false;
  54.            
  55.         return count >= countGoods;        
  56.     }
  57.  
  58.     public void TransferForDelivery(Good good, int countGoods)
  59.     {
  60.         good = good ?? throw new ArgumentNullException();
  61.  
  62.         if (countGoods < 0)
  63.             throw new ArgumentOutOfRangeException();
  64.  
  65.         if (_goods.ContainsKey(good) == false || _goods[good] < countGoods)
  66.             throw new ArgumentOutOfRangeException();
  67.        
  68.         _goods[good] -= countGoods;
  69.     }
  70. }
  71.  
  72. public class Shop
  73. {
  74.     private readonly Warehouse _warehouse;
  75.  
  76.     public Shop(Warehouse warehouse) =>
  77.         _warehouse = warehouse ?? throw new ArgumentNullException();
  78.    
  79.     public Cart Cart() =>
  80.          new Cart(_warehouse);    
  81. }
  82.  
  83. public class Cart
  84. {
  85.     private readonly Dictionary<Good, int> _goods;
  86.     private readonly IDeliveryWarehouse _warehouse;
  87.  
  88.     public Cart(IDeliveryWarehouse warehouse)
  89.     {
  90.         _warehouse = warehouse ?? throw new ArgumentNullException();
  91.  
  92.         GoodEqualityCompare goodEqualityCompare = new();
  93.         _goods = new(goodEqualityCompare);
  94.     }
  95.  
  96.     public void Add(Good good, int countGoods)
  97.     {
  98.         good = good ?? throw new ArgumentNullException();
  99.  
  100.         if (countGoods < 0)
  101.             throw new ArgumentOutOfRangeException();
  102.  
  103.         if (_warehouse.CanIssue(good, countGoods) == false)
  104.             throw new InvalidOperationException();
  105.  
  106.         if (_goods.ContainsKey(good) == false)
  107.             _goods[good] = 0;
  108.  
  109.         _goods[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.  
  121.         return new PayOrder();
  122.     }
  123. }
  124.  
  125. public class Good
  126. {
  127.     public Good(string name)
  128.     {
  129.         if (string.IsNullOrEmpty(name))
  130.             throw new ArgumentNullException();
  131.  
  132.         Name = name;
  133.     }
  134.  
  135.     public string Name { get; }
  136. }
  137.  
  138. public class PayOrder
  139. {
  140.     public PayOrder() { }
  141.  
  142.     public string Paylink { get; }
  143. }
  144.  
  145. public interface IDeliveryWarehouse
  146. {
  147.     public bool CanIssue(Good good, int countGoods);
  148.  
  149.     public void TransferForDelivery(Good good, int countGoods);
  150. }
  151.  
  152. public class GoodEqualityCompare : IEqualityComparer<Good>
  153. {
  154.     public bool Equals(Good? good1, Good? good2)
  155.     {
  156.         if (ReferenceEquals(good1, good2))
  157.             return true;
  158.  
  159.         if (good1 == null || good2 == null)
  160.             return false;
  161.  
  162.         return good1.Name == good2.Name;
  163.     }
  164.  
  165.     public int GetHashCode(Good good) =>
  166.         good.Name.GetHashCode();
  167. }
Advertisement
Add Comment
Please, Sign In to add comment