Advertisement
IGRODELOFF

Task43.11

Jul 24th, 2022 (edited)
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 12.22 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace Task43._10
  8. {
  9.     internal class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             string requestCustomerMoney =
  14.                 "Вы решили пойти закупиться в магазин, сколько денег вы берёте? Введите количество денег: ";
  15.            
  16.             Seller seller = new Seller();
  17.  
  18.             int inputMoney = GetInt(requestCustomerMoney);
  19.  
  20.             Customer customer = new Customer(inputMoney);
  21.  
  22.             Shop shop = new Shop(seller);
  23.  
  24.             shop.Work(customer);
  25.         }
  26.  
  27.         private static int GetInt(string requestInput)
  28.         {
  29.             string errorConversion = "Ошибка,вы вели не цифры! Попробуйте снова.";
  30.             string userInput;
  31.  
  32.             bool resultConverted = false;
  33.  
  34.             int number = 0;
  35.  
  36.             while (resultConverted == false)
  37.             {
  38.                 Console.Write(requestInput);
  39.                 userInput = Console.ReadLine();
  40.  
  41.                 resultConverted = int.TryParse(userInput, out int numberConvert);
  42.  
  43.                 if (resultConverted != true)
  44.                     Console.WriteLine(errorConversion);
  45.                 else
  46.                     number = numberConvert;
  47.             }
  48.             return number;
  49.         }
  50.     }
  51.  
  52.     class Shop
  53.     {
  54.         private Seller _seller;
  55.         private bool _isExit = false;
  56.  
  57.         public Shop(Seller seller)
  58.         {
  59.             _seller = seller;
  60.         }
  61.  
  62.         public void Work(Customer customer)
  63.         {
  64.             string menu = "" +
  65.                 "Вы подошли к продавцу. \n" +
  66.                 "Вам доступны следующие команды: \n" +
  67.                 "Предложение - показать то, что предлагает продавец \n" +
  68.                 "Покупки ----- показать то, что вы купили \n" +
  69.                 "Купить ------ купить товар по его названию \n" +
  70.                 "Уйти -------- уйти домой ";
  71.             string requestCommand =
  72.                 "Введите команду: ";
  73.             string requestInputKey =
  74.                 "Ведите любой символ для продолжение или просто нажмите Enter. ";
  75.             string noSearchCommand =
  76.                 "Вы ввели команду которой нет, проверьте правильность написания и соответсвтвия. Попробуйте снова. ";
  77.             string goHome =
  78.                 "Побывав в магазине вы пошли домой. \n" +
  79.                 "Продавец на последок вам крикнул: <<До свидания!>>.";
  80.             string inputCommand;
  81.  
  82.             while (_isExit == false)
  83.             {
  84.                 customer.ShowMoney(customer);
  85.                 Console.WriteLine(menu);
  86.                 Console.Write(requestCommand);
  87.                 inputCommand = Console.ReadLine();
  88.  
  89.                 switch (inputCommand)
  90.                 {
  91.                     case "Предложение":
  92.                         _seller.ShowShowcase();
  93.                         break;
  94.                     case "Покупки":
  95.                         customer.ShowBasket();
  96.                         break;
  97.                     case "Купить":
  98.                         _seller.SellProduct(customer);
  99.                         break;
  100.                     case "Уйти":
  101.                         _isExit = true;
  102.                         break;
  103.                     default:
  104.                         Console.WriteLine(noSearchCommand);
  105.                         break;
  106.                 }
  107.                 Console.WriteLine();
  108.                 Console.WriteLine(requestInputKey);
  109.                 Console.ReadKey();
  110.                 Console.Clear();
  111.             }
  112.  
  113.             Console.WriteLine(goHome);
  114.         }
  115.     }
  116.  
  117.     class Human
  118.     {
  119.         protected List<Inventory> _products = new List<Inventory>();
  120.  
  121.         public int Money { get; protected set; }
  122.  
  123.         public Human(int money)
  124.         {
  125.             Money = money;
  126.         }
  127.  
  128.         public void ShowProducts()
  129.         {
  130.             if (_products.Count > 0)
  131.             {
  132.                 Console.WriteLine("Список: ");
  133.                 foreach (Inventory item in _products)
  134.                 {
  135.                     item.ShowInfo();
  136.                 }
  137.             }
  138.             else
  139.             {
  140.                 Console.WriteLine("Пусто");
  141.             }
  142.         }
  143.     }
  144.  
  145.     class Seller : Human
  146.     {
  147.         public Seller(int money = 0) : base(money)
  148.         {
  149.             _products.Add(new Inventory(new Product("Кола", 30), 120));
  150.             _products.Add(new Inventory(new Product("Пельмени", 150), 10));
  151.             _products.Add(new Inventory(new Product("Хлеб", 15), 50));
  152.             _products.Add(new Inventory(new Product("Мороженное", 90), 80));
  153.             _products.Add(new Inventory(new Product("Жвачка", 35), 100));
  154.             _products.Add(new Inventory(new Product("Молоко", 70), 90));
  155.         }
  156.  
  157.         public void ShowShowcase()
  158.         {
  159.             Console.WriteLine("У меня доступны следующие товары: ");
  160.  
  161.             foreach (var item in _products)
  162.             {
  163.                 Console.WriteLine(
  164.                     $"=========================================\n" +
  165.                     $"Название продукта - {item.Product.Name}\n" +
  166.                     $"В наличии имеется - {item.Count}\n" +
  167.                     $"Цена за 1 шт. ----- {item.Product.Price}\n" +
  168.                     $"===========================================");
  169.             }
  170.  
  171.             Console.WriteLine();
  172.         }
  173.  
  174.         public void SellProduct(Customer customer)
  175.         {
  176.             Inventory findProduct;
  177.             string inputNameProduct;
  178.  
  179.             int needCountProduct;
  180.             int totalPrice;
  181.  
  182.             bool checkCountProduct;
  183.             bool checkEnoughMoney;
  184.  
  185.             Console.Write("Введите название товара, который хотите купить: ");
  186.  
  187.             inputNameProduct = Console.ReadLine();
  188.  
  189.             needCountProduct = GetInt("Введи кол-во товара вы хотите приобрести: ");
  190.  
  191.  
  192.             if (TryGetFindProduct(inputNameProduct, out findProduct))
  193.             {
  194.                 Console.WriteLine("Товар нашёлся. ");
  195.                 checkCountProduct = CheckingExistenceSuchVolumeProduction(needCountProduct, findProduct, out totalPrice);
  196.                 checkEnoughMoney = EnoughMoney(customer, totalPrice);
  197.  
  198.                 if (checkCountProduct == true && checkEnoughMoney == true)
  199.                 {
  200.                     customer.Buy(findProduct, needCountProduct);
  201.                     findProduct.DecreaseAmount(needCountProduct);
  202.                 }
  203.                 else
  204.                 {
  205.                     if (checkCountProduct == false)
  206.                     {
  207.                         Console.WriteLine("Отмена покупки. Такого кол-во товара нет на складе. ");
  208.                     }
  209.                     else if (checkEnoughMoney == false)
  210.                     {
  211.                         Console.WriteLine("Отмена покупки. Недостаточно средств. ");
  212.                     }
  213.                 }      
  214.             }
  215.             else
  216.             {
  217.                 Console.WriteLine("Такого товара нет. ");
  218.             }
  219.         }
  220.  
  221.         private bool TryGetFindProduct(string nameProduct, out Inventory findProduct)
  222.         {
  223.             findProduct = null;
  224.  
  225.             foreach (var item in _products)
  226.             {
  227.                 if (item.Product.Name == nameProduct)
  228.                 {
  229.                     findProduct = item;
  230.                     return true;
  231.                 }
  232.             }
  233.  
  234.             return false;
  235.         }
  236.  
  237.         private bool CheckingExistenceSuchVolumeProduction(int needCountProduct, Inventory findProduct, out int totalPrice)
  238.         {
  239.             if (findProduct.Count >= needCountProduct)
  240.             {
  241.                 totalPrice = findProduct.Product.Price * needCountProduct;
  242.                 return true;
  243.             }
  244.             else
  245.             {
  246.                 Console.WriteLine("На складе нет такого количества данного товара. ");
  247.                 totalPrice = 0;
  248.                 return false;
  249.             }
  250.         }
  251.  
  252.         private bool EnoughMoney(Customer customer, int totalPrice)
  253.         {
  254.             if (totalPrice <= customer.Money)
  255.                 return true;
  256.             else
  257.                 return false;
  258.         }
  259.  
  260.         private int GetInt(string requestInput)
  261.         {
  262.             string errorConversion = "Ошибка,вы вели не цифры! Попробуйте снова.";
  263.             string userInput;
  264.  
  265.             bool resultConverted = false;
  266.  
  267.             int number = 0;
  268.  
  269.             while (resultConverted == false)
  270.             {
  271.                 Console.Write(requestInput);
  272.                 userInput = Console.ReadLine();
  273.  
  274.                 resultConverted = int.TryParse(userInput, out int numberConvert);
  275.  
  276.                 if (resultConverted != true)
  277.                     Console.WriteLine(errorConversion);
  278.                 else
  279.                     number = numberConvert;
  280.             }
  281.             return number;
  282.         }
  283.     }
  284.  
  285.     class Customer : Human
  286.     {
  287.         public Customer(int money) : base(money) { }
  288.  
  289.         public void ShowBasket()
  290.         {
  291.             if (_products.Count > 0)
  292.             {
  293.                 Console.WriteLine("Товары в карзине: ");
  294.                 foreach (var item in _products)
  295.                 {
  296.                     Console.WriteLine(
  297.                     $"=========================================\n" +
  298.                     $"Название продукта - {item.Product.Name}\n" +
  299.                     $"В наличии имеется - {item.Count}\n" +
  300.                     $"Цена за 1 шт. ----- {item.Product.Price}\n" +
  301.                     $"===========================================");
  302.                 }
  303.             }
  304.             else
  305.             {
  306.                 Console.WriteLine("Корзина пуста. ");
  307.             }
  308.         }
  309.         public void Buy(Inventory item, int count)
  310.         {
  311.             Money -= item.Product.Price * count;
  312.             _products.Add(item);
  313.             item.IncreaseAmount(count);
  314.             Console.WriteLine("Осталось денег: " + Money);
  315.         }
  316.  
  317.         public void ShowMoney(Customer customer)
  318.         {
  319.             Console.WriteLine("У вас сейчас: " + Money);
  320.         }
  321.     }
  322.  
  323.     public class Product
  324.     {
  325.         public string Name { get; private set; }
  326.         public int Price { get; private set; }
  327.  
  328.         public Product(string name, int price)
  329.         {
  330.             Name = name;
  331.             Price = price;
  332.         }
  333.     }
  334.  
  335.     class Cell
  336.     {
  337.         public Product Product { get; private set; }
  338.         public int Count { get; private set; }
  339.  
  340.         public Inventory(Product product, int count)
  341.         {
  342.             Product = product;
  343.             Count = count;
  344.         }
  345.  
  346.         public void DecreaseAmount(int count)
  347.         {
  348.             Count -= count;
  349.         }
  350.  
  351.         public void IncreaseAmount(int count)
  352.         {
  353.             Count += count;
  354.         }
  355.  
  356.         public void ShowInfo()
  357.         {
  358.             Console.WriteLine(
  359.                     $"=========================================\n" +
  360.                     $"Название продукта - {Product.Name}\n" +
  361.                     $"Количество -------- {Count}\n" +
  362.                     $"Цена за 1 шт. ----- {Product.Price}\n" +
  363.                     $"===========================================");
  364.         }
  365.     }
  366. }
  367.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement