Last active
December 15, 2025 18:04
-
-
Save Attosius/32613d94cbd33861e991c509275f1b70 to your computer and use it in GitHub Desktop.
ДЗ: Магазин
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| using System; | |
| using System.Collections.Generic; | |
| using System.Linq; | |
| namespace IJuniorTasks | |
| { | |
| internal class Program | |
| { | |
| static void Main(string[] args) | |
| { | |
| var administrator = new Administrator(); | |
| administrator.Run(); | |
| } | |
| } | |
| public class Administrator | |
| { | |
| private const string CommandShowGoods = "1"; | |
| private const string CommandBuy = "2"; | |
| private const string CommandShowPurchases = "3"; | |
| private const string CommandExit = "4"; | |
| public void Run() | |
| { | |
| bool isWork = true; | |
| var store = new Store(); | |
| while (isWork) | |
| { | |
| Console.WriteLine($"\n\nВведите команду:"); | |
| Console.WriteLine($"{CommandShowGoods}. Показать товары"); | |
| Console.WriteLine($"{CommandBuy}. Купить товары"); | |
| Console.WriteLine($"{CommandShowPurchases}. Показать купленные товары"); | |
| Console.WriteLine($"{CommandExit}. Выход"); | |
| Console.WriteLine(); | |
| var command = Console.ReadLine(); | |
| switch (command) | |
| { | |
| case CommandShowGoods: | |
| store.ShowSellersItems(); | |
| break; | |
| case CommandBuy: | |
| store.SellItem(); | |
| break; | |
| case CommandShowPurchases: | |
| store.ShowBuyerInfo(); | |
| break; | |
| case CommandExit: | |
| isWork = false; | |
| break; | |
| default: | |
| Console.WriteLine($"Некорректная команда!"); | |
| break; | |
| } | |
| } | |
| } | |
| } | |
| public class Store | |
| { | |
| private readonly Seller _seller; | |
| private readonly Buyer _buyer; | |
| public Store() | |
| { | |
| _seller = new Seller(); | |
| _buyer = new Buyer(); | |
| } | |
| public void ShowSellersItems() | |
| { | |
| Console.WriteLine($"Товары продавца"); | |
| _seller.ShowItems(); | |
| } | |
| public void SellItem() | |
| { | |
| ShowSellersItems(); | |
| Console.WriteLine($"Введите Id товара для покупки:"); | |
| var idString = Console.ReadLine(); | |
| if (int.TryParse(idString, out var id) == false) | |
| { | |
| Console.WriteLine("Некорректный Id"); | |
| return; | |
| } | |
| if (_seller.TryGetItemById(id, out var item) == false) | |
| { | |
| Console.WriteLine("Не удалось найти товар"); | |
| return; | |
| } | |
| if (_buyer.TryBuyItem(item) == false) | |
| { | |
| Console.WriteLine("Неудалось совершить покупку"); | |
| return; | |
| } | |
| _seller.SellItem(item); | |
| Console.WriteLine($"Покупка успешно совершена: {item}"); | |
| } | |
| public void ShowBuyerInfo() | |
| { | |
| _buyer.ShowMoney(); | |
| Console.WriteLine($"Товары у покупателя"); | |
| _buyer.ShowItems(); | |
| } | |
| } | |
| public class Seller : Person | |
| { | |
| private int _maxItemId = 0; | |
| public Seller() | |
| { | |
| Fill(); | |
| } | |
| public void Fill() | |
| { | |
| Items.Add(new Item(++_maxItemId, "Ржавый меч", 5)); | |
| Items.Add(new Item(++_maxItemId, "Меч", 10)); | |
| Items.Add(new Item(++_maxItemId, "Длинный меч", 20)); | |
| Items.Add(new Item(++_maxItemId, "Зелье здоровья", 10)); | |
| Items.Add(new Item(++_maxItemId, "Зелье маны", 10)); | |
| } | |
| public bool TryGetItemById(int id, out Item item) | |
| { | |
| item = Items.FirstOrDefault(item => item.Id == id); | |
| return item != null; | |
| } | |
| public void SellItem(Item item) | |
| { | |
| Items.Remove(item); | |
| Money += item.Cost; | |
| } | |
| } | |
| public class Buyer : Person | |
| { | |
| private static readonly decimal s_defaultMoney = 20; | |
| public Buyer() | |
| { | |
| Money = s_defaultMoney; | |
| } | |
| public void ShowMoney() | |
| { | |
| Console.WriteLine($"Количество денег у покупателя: {Money}"); | |
| } | |
| public bool TryBuyItem(Item item) | |
| { | |
| if (item.Cost > Money) | |
| { | |
| Console.WriteLine($"Недостаточно денег"); | |
| return false; | |
| } | |
| Items.Add(item); | |
| Money -= item.Cost; | |
| return true; | |
| } | |
| } | |
| public class Person | |
| { | |
| protected List<Item> Items = new(); | |
| public int ItemsCount => Items.Count; | |
| public decimal Money { get; protected set; } | |
| public void ShowItems() | |
| { | |
| if (Items.Count == 0) | |
| { | |
| Console.WriteLine($"Пусто"); | |
| return; | |
| } | |
| var index = 0; | |
| foreach (var item in Items) | |
| { | |
| index++; | |
| Console.WriteLine($"{index}. {item}"); | |
| } | |
| } | |
| } | |
| public class Item | |
| { | |
| public Item(int id, string name, decimal cost) | |
| { | |
| Id = id; | |
| Name = name; | |
| Cost = cost; | |
| } | |
| public int Id { get; } | |
| public string Name { get; } | |
| public decimal Cost { get; } | |
| public override string ToString() | |
| { | |
| return $"Id: {Id}, {Name}, {Cost}$"; | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment