Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- namespace CSLight
- {
- internal class Program
- {
- static void Main(string[] args)
- {
- Supermarket shop = new Supermarket();
- shop.ServeQueue();
- }
- }
- class Supermarket
- {
- private Queue<Buyer> _buyers = new Queue<Buyer>();
- private List<Product> _products = new List<Product>();
- private int _money = 0;
- public Supermarket()
- {
- InitProducts();
- InitBuyers();
- }
- private void InitProducts()
- {
- int maxProductPrice = 100;
- int minProductPrice = 10;
- _products.Add(new Product("Product1", UserUtils.GetRandomNumber(minProductPrice, maxProductPrice)));
- _products.Add(new Product("Product2", UserUtils.GetRandomNumber(minProductPrice, maxProductPrice)));
- _products.Add(new Product("Product3", UserUtils.GetRandomNumber(minProductPrice, maxProductPrice)));
- _products.Add(new Product("Product4", UserUtils.GetRandomNumber(minProductPrice, maxProductPrice)));
- _products.Add(new Product("Product5", UserUtils.GetRandomNumber(minProductPrice, maxProductPrice)));
- _products.Add(new Product("Product6", UserUtils.GetRandomNumber(minProductPrice, maxProductPrice)));
- _products.Add(new Product("Product7", UserUtils.GetRandomNumber(minProductPrice, maxProductPrice)));
- _products.Add(new Product("Product8", UserUtils.GetRandomNumber(minProductPrice, maxProductPrice)));
- _products.Add(new Product("Product9", UserUtils.GetRandomNumber(minProductPrice, maxProductPrice)));
- _products.Add(new Product("Product10", UserUtils.GetRandomNumber(minProductPrice, maxProductPrice)));
- }
- public void ServeQueue()
- {
- while (_buyers.Count > 0)
- {
- Trade();
- }
- Console.WriteLine("Очередь закончилась");
- }
- private void InitBuyers()
- {
- int minBuyers = 7;
- int maxBuyers = 20;
- int buyers = UserUtils.GetRandomNumber(minBuyers, maxBuyers);
- for (int i = 0; i < buyers; i++)
- {
- _buyers.Enqueue(CreateBuyer());
- }
- }
- private Buyer CreateBuyer()
- {
- Buyer buyer = new Buyer();
- for (int i = 0; i < buyer.ProductsNeededCout; i++)
- {
- int productId = UserUtils.GetRandomNumber(0, _products.Count - 1);
- buyer.AddProductToBasket(_products[productId]);
- }
- return buyer;
- }
- private void Trade()
- {
- bool isTrading = true;
- Buyer buyer = _buyers.Dequeue();
- Console.WriteLine($"В очереди еще {_buyers.Count} человек");
- while (isTrading)
- {
- Console.WriteLine($"У покупателя {buyer.Money} денег");
- Console.WriteLine("Его корзина:");
- buyer.ShowProductsInBasket();
- Console.WriteLine($"Общая стоимость {buyer.CalculateTotalPrice()}");
- if (buyer.TryPayProducts())
- {
- buyer.ExchangeProductFromBasketToInventory();
- _money += buyer.CalculateTotalPrice();
- isTrading = false;
- }
- else
- {
- buyer.RemoveRandomProduct();
- }
- Console.ReadKey();
- }
- if (buyer.GetProductsInInventoryCount() == 0)
- {
- Console.WriteLine("У покупателя не хватло денег ни на что");
- }
- Console.WriteLine("Покупатель ушел");
- }
- }
- class Buyer
- {
- private List<Product> _basket = new List<Product>();
- private List<Product> _inventory = new List<Product>();
- private int _minProductsNeededCount = 1;
- private int _maxProductsNeededCount = 10;
- public Buyer()
- {
- int maxPossibleMoney = 350;
- int minPossibleMoney = 10;
- Money = UserUtils.GetRandomNumber(minPossibleMoney, maxPossibleMoney);
- ProductsNeededCout = UserUtils.GetRandomNumber(_minProductsNeededCount, _maxProductsNeededCount);
- }
- public int Money { get; private set; }
- public int ProductsNeededCout { get; private set; }
- public void RemoveRandomProduct()
- {
- if (_basket.Count > 0)
- {
- _basket.RemoveAt(UserUtils.GetRandomNumber(0, _basket.Count - 2));
- }
- else
- {
- _basket.Clear();
- }
- }
- public void ShowProductsInBasket()
- {
- foreach (Product product in _basket)
- {
- Console.WriteLine($"{product.Name} - {product.Price}");
- }
- }
- public bool TryPayProducts()
- {
- if (CalculateTotalPrice() > Money)
- {
- return false;
- }
- else
- {
- Money -= CalculateTotalPrice();
- return true;
- }
- }
- public void ExchangeProductFromBasketToInventory()
- {
- Product tempProduct;
- foreach (Product product in _basket)
- {
- tempProduct = product;
- _inventory.Add(tempProduct);
- }
- _basket.Clear();
- Console.WriteLine(_inventory.Count);
- }
- public int GetProductsInInventoryCount()
- {
- return _inventory.Count;
- }
- public void AddProductToBasket(Product product)
- {
- _basket.Add(product);
- }
- public int CalculateTotalPrice()
- {
- int totalPrice = 0;
- foreach (Product product in _basket)
- {
- totalPrice += product.Price;
- }
- return totalPrice;
- }
- }
- class Product
- {
- public Product(string name, int price)
- {
- Name = name;
- Price = price;
- }
- public string Name { get; private set; }
- public int Price { get; private set; }
- }
- class UserUtils
- {
- private static Random s_random = new Random();
- public static int GetRandomNumber(int minValue, int maxValue)
- {
- return s_random.Next(minValue, maxValue + 1);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement