Skip to content

Instantly share code, notes, and snippets.

@QRemark
Created July 17, 2024 16:06
Show Gist options
  • Save QRemark/a5e9cfd9613d50c900089b12bf8107fd to your computer and use it in GitHub Desktop.
Save QRemark/a5e9cfd9613d50c900089b12bf8107fd to your computer and use it in GitHub Desktop.
Определение просрочки
using System;
using System.Collections.Generic;
using System.Linq;
namespace Linq
{
internal class Program
{
static void Main(string[] args)
{
MeatFactory meatFactory = new MeatFactory();
Shelf shelf = new Shelf(meatFactory);
shelf.Work();
}
}
class Shelf
{
private List<Meat> _meats;
private int _currentYear = 2024;
public Shelf(MeatFactory meatFactory)
{
_meats = meatFactory.Create();
}
public void Work()
{
const string CommandShowAllMeat = "1";
const string CommandShowDelayMeats = "2";
const string CommandExit = "3";
bool isRunning = true;
string userInput;
while (isRunning)
{
Console.WriteLine($"Добро пожаловать на полку с тушенкой!\nТекущий год - {_currentYear}\nВам доступно: ");
Console.WriteLine($"{CommandShowAllMeat} - посмотреть весь список тушенки");
Console.WriteLine($"{CommandShowDelayMeats} - посмотреть просрочку");
Console.WriteLine($"{CommandExit} - выйти из приложения");
Console.Write("Выберите действие: ");
userInput = Console.ReadLine();
switch (userInput)
{
case CommandShowAllMeat:
ShowAllMeat();
break;
case CommandShowDelayMeats:
ShowDelay();
break;
case CommandExit:
isRunning = false;
break;
default:
UserUtils.HandleInvalidInput();
break;
}
Console.Clear();
}
Console.WriteLine("Всего доброго! \nДля закрытия приложения нажмите любую кнопку...");
Console.ReadKey();
}
private void Show(List<Meat> meats)
{
int number = 1;
UserUtils.ShowLine();
foreach (var meat in meats)
{
Console.Write(number++ + ") ");
meat.ShowStats();
}
UserUtils.ShowLine();
}
private void ShowDelay()
{
Console.WriteLine("Вы решили посмотреть просроченную продукцию: ");
var result = _meats.Where(meat => meat.ProductionDate + meat.ExpirationDate < _currentYear).ToList();
Show(result);
Console.WriteLine("Нажмите любую клавишу для продолжения...");
Console.ReadKey();
}
private void ShowAllMeat()
{
Console.WriteLine("Вы выбрали посмотреть список всех банок с тушенкой, вот он: ");
Show(_meats);
Console.WriteLine("Для продолжения нажмите любую клавишу...");
Console.ReadKey();
}
}
class MeatFactory
{
public List<Meat> Create()
{
List<Meat> meats = new List<Meat>
{
new Meat("Веселый теленок", 1980, 10),
new Meat("Веселый теленок", 2015, 10),
new Meat("Веселый теленок", 2020, 10),
new Meat("Веселый теленок", 2024, 10),
new Meat("Веселый теленок", 2011, 10),
new Meat("Веселая свинка", 2024, 7),
new Meat("Веселая свинка", 2017, 7),
new Meat("Веселая свинка", 2000, 7),
new Meat("Веселая свинка", 2021, 7),
new Meat("Веселая свинка", 2008, 7),
new Meat("Веселая курочка", 1990, 5),
new Meat("Веселая курочка", 2020, 5),
new Meat("Веселая курочка", 2023, 5)
};
return new List<Meat>(meats);
}
}
class Meat
{
public Meat(string name, int productionDate, int expirationDate)
{
Name = name;
ProductionDate = productionDate;
ExpirationDate = expirationDate;
}
public string Name { get; private set; }
public int ProductionDate { get; private set; }
public int ExpirationDate { get; private set; }
public void ShowStats()
{
Console.WriteLine($"Название тушенки: {Name}, Дата производства: {ProductionDate}, Срок годности: {ExpirationDate} лет");
}
}
static class UserUtils
{
public static void HandleInvalidInput()
{
Console.Clear();
Console.WriteLine("Команда не была распознана, нажмите любую клавишу для продолжения...");
Console.ReadKey();
}
public static void ShowLine() => Console.WriteLine("\n** " + new string('-', 40) + " **");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment