Advertisement
IGRODELOFF

Task46.4

Jul 30th, 2022 (edited)
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 11.01 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 Task46._2
  8. {
  9.     internal class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             Seller seller = new Seller();
  14.             Supermarket supermarket = new Supermarket(seller);
  15.  
  16.             supermarket.Work();
  17.         }
  18.     }
  19.  
  20.     class Supermarket
  21.     {
  22.         private Seller _seller;
  23.         private Queue<Customer> _customer = new Queue<Customer>();
  24.  
  25.         public Supermarket(Seller seller)
  26.         {
  27.             _seller = seller;
  28.         }
  29.  
  30.         public void Work()
  31.         {
  32.             bool isExit = false;
  33.             string welcomeJob =
  34.                 "Добро пожаловать на работу.";
  35.  
  36.             Console.WriteLine(welcomeJob);
  37.  
  38.             while (isExit == false)
  39.             {
  40.                 CreateQueue();
  41.  
  42.                 bool isActive = true;
  43.  
  44.                 while (isActive)
  45.                 {
  46.                     Console.Write(
  47.                     "Перед вашей кассой очередь из " + _customer.Count + " человек(а)\n" +
  48.                     "Пробить - посчитать человека и принять оплату\n" +
  49.                     "Уйти - закрыть кассу и пойти домой\n" +
  50.                     "Введите команду: ");
  51.  
  52.                     string userInput = Console.ReadLine();
  53.  
  54.                     switch (userInput)
  55.                     {
  56.                         case "Пробить":
  57.                             ClearanceSale();
  58.                             break;
  59.                         case "Уйти":
  60.                             Leave(ref isExit);
  61.                             break;
  62.                         default:
  63.                             Console.WriteLine("Вы вели не существующую команду.");
  64.                             break;
  65.                     }
  66.  
  67.                     if (_customer.Count <= 0)
  68.                     {
  69.                         isActive = false;
  70.                     }
  71.                 }
  72.             }
  73.         }
  74.  
  75.         private void Leave(ref bool isExit)
  76.         {
  77.             _customer.Clear();
  78.             isExit = true;
  79.         }
  80.  
  81.         private void CreateQueue()
  82.         {
  83.             Random random = new Random();
  84.  
  85.             AddCustomerQueue(random);
  86.  
  87.             foreach (Customer customer in _customer)
  88.             {
  89.                 GiveProductsCustomer(customer, random);
  90.             }
  91.         }
  92.  
  93.         private void GiveProductsCustomer(Customer customer, Random random)
  94.         {
  95.             Product product;
  96.  
  97.             int maxProductIndex = _seller.GetMaxIndexProduct();
  98.             int minCountProductNeedCustomers = 1;
  99.             int maxCountProductNeedCustomers = maxProductIndex;
  100.             int indexChooseBuyProduct;
  101.  
  102.             int randCountProductBuyNeedCustomers;
  103.  
  104.             randCountProductBuyNeedCustomers = random.Next(minCountProductNeedCustomers, maxCountProductNeedCustomers);
  105.  
  106.             for (int i = 0; i < randCountProductBuyNeedCustomers; i++)
  107.             {
  108.                 indexChooseBuyProduct = random.Next(0, maxProductIndex - 1);
  109.                
  110.                 _seller.FindProduct(indexChooseBuyProduct, out product);
  111.                 customer.TakeProduct(product);
  112.             }
  113.         }
  114.  
  115.         private void ClearanceSale()
  116.         {
  117.             int totalPrice;
  118.             int countProduct;
  119.  
  120.             bool isSell = false;
  121.             bool haveGoodsInCart = true;
  122.  
  123.             Customer customer = _customer.Dequeue();
  124.  
  125.             countProduct = customer.GetCountProduct();
  126.  
  127.             if (countProduct == 0)
  128.             {
  129.                 Console.WriteLine("Покупатель ничего не взял просто хотел посмотреть. ");
  130.             }
  131.  
  132.             while (isSell == false && haveGoodsInCart)
  133.             {
  134.                 Console.WriteLine(customer.Money);
  135.  
  136.                 customer.ShowCart();
  137.                 customer.OutputTotalPrice(out totalPrice);
  138.  
  139.                 Console.WriteLine(totalPrice);
  140.  
  141.                 isSell = _seller.TrySellProduct(customer, totalPrice);
  142.  
  143.                 if (isSell == false && countProduct > 0)
  144.                 {
  145.                     customer.DeleteProduct();
  146.                     Console.WriteLine("Покупатель решил убрать один из товаров. ");
  147.                 }
  148.                 else if (countProduct <= 0)
  149.                 {
  150.                     haveGoodsInCart = false;
  151.                 }
  152.                
  153.                 countProduct = customer.GetCountProduct();
  154.             }
  155.  
  156.             if (countProduct == 0)
  157.             {
  158.                 Console.WriteLine("Клиент не сумел ничего приобрести и ушёл с пустыми руками. ");
  159.             }
  160.         }
  161.  
  162.         private void AddCustomerQueue(Random random)
  163.         {
  164.             int indexCustomer = 0;
  165.             int minValueCountCustomersQueue = 1;
  166.             int maxValueCountCustomersQueue = 10;
  167.             int valueCountCustomersQueue = random.Next(minValueCountCustomersQueue, maxValueCountCustomersQueue);
  168.             int maxValueMoneyCustomer = 500;
  169.             int minValueMoneyCustomer = 50;
  170.             int moneyCustomer;
  171.  
  172.             for (int i = 0; i < valueCountCustomersQueue; i++)
  173.             {
  174.                 moneyCustomer = random.Next(minValueMoneyCustomer, maxValueMoneyCustomer);
  175.                 _customer.Enqueue(new Customer(moneyCustomer, indexCustomer));
  176.                 indexCustomer++;
  177.             }
  178.         }
  179.     }
  180.  
  181.     class Human
  182.     {
  183.         protected List<Product> Products = new List<Product>();
  184.  
  185.         public int Money { get; private set; }
  186.  
  187.         public Human(int money)
  188.         {
  189.             Money = money;
  190.         }
  191.         public void ShowInfoProduct()
  192.         {
  193.             if (Products.Count > 0)
  194.             {
  195.                 Console.WriteLine("Список: ");
  196.                 foreach (Product item in Products)
  197.                 {
  198.                     item.ShowIndo();
  199.                 }
  200.             }
  201.             else
  202.             {
  203.                 Console.WriteLine("Пусто.");
  204.             }
  205.         }
  206.     }
  207.  
  208.     class Seller : Human
  209.     {
  210.         public Seller(int money = 0) : base(money)
  211.         {
  212.             int indexProduct = -1;
  213.  
  214.             Products.Add(new Product(indexProduct++, "Кола", 30));
  215.             Products.Add(new Product(indexProduct++, "Пельмени", 150));
  216.             Products.Add(new Product(indexProduct++, "Хлеб", 15));
  217.             Products.Add(new Product(indexProduct++, "Мороженное", 90));
  218.             Products.Add(new Product(indexProduct++, "Жвачка", 35));
  219.             Products.Add(new Product(indexProduct++, "Молоко", 70));
  220.         }
  221.  
  222.         public int GetMaxIndexProduct()
  223.         {
  224.             return Products.Count;
  225.         }
  226.  
  227.         public void ShowShelf()
  228.         {
  229.             Console.WriteLine("У меня доступны следующие товары: ");
  230.  
  231.             foreach (var item in Products)
  232.             {
  233.                 Console.WriteLine(
  234.                     $"=========================================\n" +
  235.                     $"Название продукта - {item.Name}\n" +
  236.                     $"Цена за 1 шт. ----- {item.Price}\n" +
  237.                     $"===========================================");
  238.             }
  239.  
  240.             Console.WriteLine();
  241.         }
  242.  
  243.         public void FindProduct(int indexProduct, out Product product)
  244.         {
  245.             product = null;
  246.             foreach (Product findProduct in Products)
  247.             {
  248.                 if (findProduct.Index == indexProduct)
  249.                 {
  250.                     product = findProduct;
  251.                 }
  252.             }
  253.         }
  254.  
  255.         public bool TrySellProduct(Customer customer, int totalPrice)
  256.         {
  257.             if (totalPrice < customer.Money && customer.GetCountProduct() > 0)
  258.             {
  259.                 Console.WriteLine("Покупателю хватило денег и он успешно оплатил.");
  260.                 return true;
  261.             }
  262.             else if (customer.GetCountProduct() > 0)
  263.             {
  264.                 Console.WriteLine("Покупателю не хватило денег. ");
  265.                 return false;
  266.             }
  267.             else
  268.             {
  269.                 return false;
  270.             }
  271.         }
  272.     }
  273.  
  274.     class Customer : Human
  275.     {
  276.         public int Index { get; private set; }
  277.         public Customer(int money, int index) : base(money)
  278.         {
  279.             Index = index;
  280.         }
  281.  
  282.         public void ShowCart()
  283.         {
  284.             if (Products.Count > 0)
  285.             {
  286.                 Console.WriteLine("Товары в карзине: ");
  287.                 foreach (var item in Products)
  288.                 {
  289.                     Console.WriteLine(
  290.                     $"=========================================\n" +
  291.                     $"Название продукта - {item.Name}\n" +
  292.                     $"Цена за 1 шт. ----- {item.Price}\n" +
  293.                     $"===========================================");
  294.                 }
  295.             }
  296.             else
  297.             {
  298.                 Console.WriteLine("Тележка пуста пуста. ");
  299.             }
  300.         }
  301.  
  302.         public void TakeProduct(Product findProduct)
  303.         {
  304.             Products.Add(findProduct);
  305.         }
  306.  
  307.         public void OutputTotalPrice(out int totalPrice)
  308.         {
  309.             totalPrice = 0;
  310.             foreach (var item in Products)
  311.             {
  312.                 totalPrice += item.Price;
  313.             }
  314.         }
  315.  
  316.         public int GetCountProduct()
  317.         {
  318.             return Products.Count;
  319.         }
  320.  
  321.         public void DeleteProduct()
  322.         {
  323.             Random rand = new Random();
  324.  
  325.             Console.WriteLine(Products.Count);
  326.  
  327.             if (Products.Count > 0)
  328.             {
  329.                 int indexProduct = rand.Next(0, Products.Count);
  330.                 Products.RemoveAt(indexProduct);
  331.             }
  332.             else
  333.             {
  334.                 Products.RemoveAt(0);
  335.             }
  336.         }
  337.     }
  338.  
  339.     public class Product
  340.     {
  341.         public string Name { get; private set; }
  342.         public int Price { get; private set; }
  343.         public int Index { get; private set; }
  344.         public Product(int index, string name, int price)
  345.         {
  346.             Index = index;
  347.             Name = name;
  348.             Price = price;
  349.         }
  350.  
  351.         public void ShowIndo()
  352.         {
  353.             Console.WriteLine(
  354.                     $"=========================================\n" +
  355.                     $"Название продукта - {Name}\n" +
  356.                     $"Цена за 1 шт. ----- {Price}\n" +
  357.                     $"===========================================");
  358.         }
  359.     }
  360. }
  361.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement