IGRODELOFF

Task43

Jul 23rd, 2022 (edited)
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 10.71 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
  8. {
  9.     internal class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             Shop shop = new Shop();
  14.  
  15.             string requestCustomerMoney =
  16.                 "Вы решили пойти закупиться в магазин, сколько денег вы берёте? Введите количество денег: ";
  17.             string menu = "" +
  18.                 "Вы подошли к продавцу. \n" +
  19.                 "Вам доступны следующие команды: \n" +
  20.                 "Предложение - показать то, что предлагает продавец \n" +
  21.                 "Покупки ----- показать то, что вы купили \n" +
  22.                 "Купить ------ купить товар по его названию \n" +
  23.                 "Уйти -------- уйти домой ";
  24.             string requestCommand =
  25.                 "Введите команду: ";
  26.             string requestInputKey =
  27.                 "Ведите любой символ для продолжение или просто нажмите Enter. ";
  28.             string noSearchCommand =
  29.                 "Вы ввели команду которой нет, проверьте правильность написания и соответсвтвия. Попробуйте снова. ";
  30.             string goHome =
  31.                 "Побывав в магазине вы пошли домой. \n" +
  32.                 "Продавец на последок вам крикнул: <<До свидания!>>.";
  33.             string inputCommand;
  34.  
  35.             int inputMoney;
  36.  
  37.             bool isExit = false;
  38.  
  39.             inputMoney = GetInt(requestCustomerMoney);
  40.             Customer customer = new Customer(inputMoney);
  41.  
  42.             while (isExit == false)
  43.             {
  44.                 Console.WriteLine(menu);
  45.                 Console.Write(requestCommand);
  46.                 inputCommand = Console.ReadLine();
  47.  
  48.                 switch (inputCommand)
  49.                 {
  50.                     case "Предложение":
  51.                         shop.ShowProduct();
  52.                         break;
  53.                     case "Покупки":
  54.                         customer.ShowBusket();
  55.                         break;
  56.                     case "Купить":
  57.                         shop.Sell(customer);
  58.                         break;
  59.                     case "Уйти":
  60.                         isExit = true;
  61.                         break;
  62.                     default:
  63.                         Console.WriteLine(noSearchCommand);
  64.                         break;
  65.                 }
  66.                 Console.WriteLine();
  67.                 customer.ShowMoney();
  68.                 Console.WriteLine(requestInputKey);
  69.                 Console.ReadKey();
  70.                 Console.Clear();
  71.             }
  72.  
  73.             Console.WriteLine(goHome);
  74.         }
  75.  
  76.         private static int GetInt(string requestInput)
  77.         {
  78.             string errorConversion = "Ошибка,вы вели не цифры! Попробуйте снова.";
  79.             string userInput;
  80.  
  81.             bool resultConverted = false;
  82.  
  83.             int number = 0;
  84.  
  85.             while (resultConverted == false)
  86.             {
  87.                 Console.Write(requestInput);
  88.                 userInput = Console.ReadLine();
  89.  
  90.                 resultConverted = int.TryParse(userInput, out int numberConvert);
  91.  
  92.                 if (resultConverted != true)
  93.                     Console.WriteLine(errorConversion);
  94.                 else
  95.                     number = numberConvert;
  96.             }
  97.             return number;
  98.         }
  99.     }
  100.  
  101.     class Customer
  102.     {
  103.         private Dictionary<string, Cell> _basket = new Dictionary<string, Cell>();
  104.  
  105.         public int Money { get; private set; }
  106.  
  107.         public Customer(int money)
  108.         {
  109.             Money = money;
  110.         }
  111.  
  112.         public void Buy(Item item, int count)
  113.         {
  114.             string succesBuy =
  115.                 "Покупка совершена. ";
  116.  
  117.             Money -= item.Price * count;
  118.             AddToBasket(item, count);
  119.             Console.WriteLine(succesBuy);
  120.         }
  121.  
  122.         public void AddToBasket(Item item, int count)
  123.         {
  124.             if (_basket.ContainsKey(item.Title) == false || _basket.Count == 0)
  125.             {
  126.                 _basket.Add(item.Title, new Cell(item, count));
  127.             }
  128.             else
  129.             {
  130.                 foreach (var cell in _basket)
  131.                 {
  132.                     if (_basket.ContainsKey(item.Title) == true)
  133.                         cell.Value.IncreaseAmount(count);
  134.                 }
  135.             }
  136.         }
  137.  
  138.         public bool TryToBuy(Item item, int count)
  139.         {
  140.             string noMoney =
  141.                 "У вас нет денег. =(";
  142.             string notEnoughMoney =
  143.                 "Недостаточно средств. ";
  144.  
  145.             if (Money == 0)
  146.             {
  147.                 Console.WriteLine(noMoney);
  148.                 return false;
  149.             }
  150.             else if (item.Price * count > Money)
  151.             {
  152.                 Console.WriteLine(notEnoughMoney);
  153.                 return false;
  154.             }
  155.             else
  156.             {
  157.                 return true;
  158.             }
  159.         }
  160.  
  161.         public void ShowBusket()
  162.         {
  163.             string itemBuy =
  164.                 "Вы приобрели: ";
  165.  
  166.             int totalPrice;
  167.  
  168.             Console.WriteLine(itemBuy);
  169.  
  170.             foreach (var cell in _basket)
  171.             {
  172.                 totalPrice = cell.Value.Item.Price * cell.Value.Count;
  173.                 Console.WriteLine($"{cell.Key} вы купили {cell.Value.Count} шт. по цене {cell.Value.Item.Price}. В общей суме вы потратили на этот тип предмета {totalPrice} кол-во денег.");
  174.             }
  175.         }
  176.  
  177.         public void ShowMoney()
  178.         {
  179.             Console.WriteLine($"Осталось денег: {Money}");
  180.         }
  181.     }
  182.  
  183.     class Shop
  184.     {
  185.         private List<Cell> _product = new List<Cell>();
  186.  
  187.         public Shop()
  188.         {
  189.             _product.Add(new Cell(new Item("Кола", 30), 120));
  190.             _product.Add(new Cell(new Item("Пельмени", 150), 10));
  191.             _product.Add(new Cell(new Item("Хлеб", 15), 50));
  192.             _product.Add(new Cell(new Item("Мороженное", 90), 80));
  193.             _product.Add(new Cell(new Item("Жвачка", 35), 100));
  194.             _product.Add(new Cell(new Item("Молоко", 70), 90));
  195.         }
  196.  
  197.         public void ShowProduct()
  198.         {
  199.             foreach (var cell in _product)
  200.             {
  201.                 Console.WriteLine(
  202.                     $"=========================================\n" +
  203.                     $"Название продукта - {cell.Item.Title}\n" +
  204.                     $"В наличии имеется - {cell.Count}\n" +
  205.                     $"Цена за 1 шт. ----- {cell.Item.Price}\n" +
  206.                     $"===========================================");
  207.             }
  208.  
  209.             Console.WriteLine();
  210.         }
  211.  
  212.         public void Sell(Customer customer)
  213.         {
  214.             string requestTitleProduct =
  215.                 "Введите товар который хотите купить: ";
  216.             string requestCountProduct =
  217.                 "Введите количество товара: ";
  218.             string notEnoughGoods =
  219.                 "В магазине не достаточно товара. ";
  220.             string buyFailed =
  221.                 "Покупка отклонена. ";
  222.  
  223.             string title;
  224.             int count;
  225.  
  226.             Console.Write(requestTitleProduct);
  227.             title = Console.ReadLine();
  228.  
  229.             if (FindItem(title, out Cell cell))
  230.             {
  231.                 count = GetInt(requestCountProduct);
  232.  
  233.                 if (count > cell.Count)
  234.                 {
  235.                     Console.WriteLine(notEnoughGoods);
  236.                 }
  237.                 else
  238.                 {
  239.                     if (customer.TryToBuy(cell.Item, count))
  240.                     {
  241.                         customer.Buy(cell.Item, count);
  242.                         cell.DecreaseAmount(count);
  243.                     }
  244.                     else
  245.                     {
  246.                         Console.WriteLine(buyFailed);
  247.                     }
  248.                 }
  249.             }
  250.         }
  251.  
  252.         private static int GetInt(string requestInput)
  253.         {
  254.             string errorConversion = "Ошибка,вы вели не цифры! Попробуйте снова.";
  255.             string userInput;
  256.  
  257.             bool resultConverted = false;
  258.  
  259.             int number = 0;
  260.  
  261.             while (resultConverted == false)
  262.             {
  263.                 Console.Write(requestInput);
  264.                 userInput = Console.ReadLine();
  265.  
  266.                 resultConverted = int.TryParse(userInput, out int numberConvert);
  267.  
  268.                 if (resultConverted != true)
  269.                     Console.WriteLine(errorConversion);
  270.                 else
  271.                     number = numberConvert;
  272.             }
  273.             return number;
  274.         }
  275.  
  276.         private bool FindItem(string title, out Cell findItem)
  277.         {
  278.             string errorFindItem =
  279.                 "Таково товара не нашли, повторите поиск и проверьте правильность написания и соотвествия.";
  280.             findItem = null;
  281.  
  282.             foreach (var cell in _product)
  283.             {
  284.                 if (cell.Item.Title.ToLower() == title.ToLower())
  285.                 {
  286.                     findItem = cell;
  287.                     return true;
  288.                 }
  289.             }
  290.  
  291.             Console.WriteLine(errorFindItem);
  292.             return false;
  293.         }
  294.     }
  295.  
  296.     class Item
  297.     {
  298.         public string Title { get; private set; }
  299.         public int Price { get; private set; }
  300.  
  301.         public Item(string title, int price)
  302.         {
  303.             Title = title;
  304.             Price = price;
  305.         }
  306.     }
  307.  
  308.     class Cell
  309.     {
  310.         public Item Item { get; private set; }
  311.         public int Count { get; private set; }
  312.  
  313.         public Cell(Item item, int count)
  314.         {
  315.             Item = item;
  316.             Count = count;
  317.         }
  318.  
  319.         public void DecreaseAmount(int count)
  320.         {
  321.             Count -= count;
  322.         }
  323.         public void IncreaseAmount(int count)
  324.         {
  325.             Count += count;
  326.         }
  327.     }
  328. }
Add Comment
Please, Sign In to add comment