Advertisement
ZhongNi

DefinitionOverdue

Dec 19th, 2024
32
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.31 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. namespace DefinitionOverdue
  6. {
  7.     internal class Program
  8.     {
  9.         static void Main()
  10.         {
  11.             Storage storage = new Storage();
  12.             storage.Work();
  13.         }
  14.     }
  15.  
  16.     public class Storage
  17.     {
  18.         private readonly StorageBase _storageBase;
  19.  
  20.         public Storage()
  21.         {
  22.             _storageBase = new StorageBase();
  23.         }
  24.  
  25.         public void Work()
  26.         {
  27.             List<Stew> stews = _storageBase.Fill();
  28.             _storageBase.Show(stews);
  29.             Console.WriteLine("\nBad stews:");
  30.             List<Stew> badStews = _storageBase.Sort(stews);
  31.             _storageBase.Show(badStews);
  32.             Console.ReadKey();
  33.         }
  34.     }
  35.  
  36.     public class StorageBase
  37.     {
  38.         public List<Stew> Fill()
  39.         {
  40.             StewFactory stewFactory = new StewFactory();
  41.  
  42.             return stewFactory.Create();
  43.         }
  44.  
  45.         public void Show(List<Stew> stews)
  46.         {
  47.             foreach (Stew stew in stews)
  48.             {
  49.                 if (stew.Date.AddMonths(stew.ShelfLife) < DateTime.Today)
  50.                 {
  51.                     Console.ForegroundColor = ConsoleColor.DarkRed;
  52.                 }
  53.                 else
  54.                 {
  55.                     Console.ForegroundColor = ConsoleColor.DarkGreen;
  56.                 }
  57.  
  58.                 Console.WriteLine($"{stew.Name}\tmanufactured: {stew.Date.ToShortDateString()}\tshelf life: {stew.ShelfLife} months");
  59.                 Console.ResetColor();
  60.             }
  61.         }
  62.  
  63.         public List<Stew> Sort(List<Stew> stews)
  64.         {
  65.             return stews.Where(stew => stew.Date.AddMonths(stew.ShelfLife) < DateTime.Today).ToList();
  66.         }
  67.     }
  68.  
  69.     public class StewFactory
  70.     {
  71.         private readonly List<string> _names;
  72.         private readonly List<int> _shelfLife;
  73.         private readonly Random _random;
  74.  
  75.         public StewFactory()
  76.         {
  77.             _random = new Random();
  78.             _names = new List<string>() { "Cow stew", "Pork stew", "Dog stew" };
  79.             _shelfLife = new List<int>() { 12, 24, 30 };
  80.         }
  81.  
  82.         public List<Stew> Create()
  83.         {
  84.             List<Stew> stews = new List<Stew>();
  85.             int stewCount = 20;
  86.  
  87.             for (int i = 0; i < stewCount; i++)
  88.             {
  89.                 stews.Add(new Stew(GetValue(_names), GetDate(), GetValue(_shelfLife)));
  90.             }
  91.  
  92.             return stews;
  93.         }
  94.  
  95.         private T GetValue<T>(List<T> values)
  96.         {
  97.             return values[_random.Next(values.Count)];
  98.         }
  99.  
  100.         private DateTime GetDate()
  101.         {
  102.             int yearsPeriod = -3;
  103.             DateTime startProductionDate = DateTime.Today.AddYears(yearsPeriod);
  104.             var daysPeriod = DateTime.Today - startProductionDate;
  105.  
  106.             return startProductionDate.AddDays(_random.Next((int)daysPeriod.TotalDays));
  107.         }
  108.     }
  109.  
  110.     public class Stew
  111.     {
  112.         public Stew(string name, DateTime date, int shelfLife)
  113.         {
  114.             Name = name;
  115.             Date = date;
  116.             ShelfLife = shelfLife;
  117.         }
  118.  
  119.         public string Name { get; private set; }
  120.         public DateTime Date { get; private set; }
  121.         public int ShelfLife { get; private set; }
  122.     }
  123. }
  124.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement