Advertisement
Guest User

эта?

a guest
Dec 16th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 19.16 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 Наследования
  8. {
  9.     class Program
  10.     {
  11.         #region Описание класса Animal
  12.         //Базовый класс
  13.         abstract class Animal
  14.         {
  15.             private string _Name;
  16.             public string Name { get { return _Name; } set { _Name = value; } }
  17.             private int _Age;
  18.             public int Age { get { return _Age; } set { if (value >= 0) _Age = value; else _Age = 0; } }
  19.             private string AnClass;
  20.  
  21.             public Animal()
  22.             {
  23.                 Console.Write("Введите имя животного: ");
  24.                 Name = Console.ReadLine();
  25.                 Console.Write("Введите его возраст: ");
  26.                 if (!Int32.TryParse(Console.ReadLine(), out _Age))
  27.                 {
  28.                     var rnd = new Random();
  29.                     Age = rnd.Next(1, 80);
  30.                     ClWrite("\nНеправильно введён (если вообще введён) возраст\nЗадам рандомом, пусть будет " + Age + " годиков.\n", ConsoleColor.DarkGreen);
  31.                 }
  32.                 Console.WriteLine();
  33.             }
  34.             public Animal(string name, int age)
  35.             {
  36.                 Name = name;
  37.                 Age = age;
  38.             }
  39.             virtual public void Show()
  40.             {
  41.                 Console.WriteLine($"\tНазвание животного:\t{Name}.\n\tВозраст животного:\t{Age} годиков.");
  42.             }
  43.  
  44.             // Эта херня нужна для задания...
  45.             abstract public void SwitchName(string NewName);
  46.             abstract public void SwitchAge(int NewAge);
  47.  
  48.             // Косметика
  49.             internal void ClWrite(string s, ConsoleColor c = ConsoleColor.Red)
  50.             {
  51.                 var Def = Console.ForegroundColor;
  52.                 Console.ForegroundColor = c;
  53.                 Console.WriteLine(s);
  54.                 Console.ForegroundColor = Def;
  55.             }
  56.         }
  57.  
  58.         #endregion
  59.  
  60.         #region Описание наследников Animal
  61.         //Млекопитающее
  62.         class M : Animal
  63.         {
  64.             public M()
  65.             {
  66.  
  67.             }
  68.             public M(string name, int age) : base (name, age)
  69.             {
  70.                 Name = name;
  71.                 Age = age;
  72.             }
  73.             public override void SwitchName(string NewName)
  74.             {
  75.                 ClWrite($"[LOG]: Переименовали [{Name}] на [{NewName}]...");
  76.                 Name = NewName;
  77.             }
  78.             public override void SwitchAge(int NewAge)
  79.             {
  80.                 ClWrite($"[LOG]: Изменили возраст [{Age}] на [{NewAge}]...");
  81.                 Age = NewAge;
  82.             }
  83.             public override void Show()
  84.             {
  85.                 Console.WriteLine($"\tНазвание животного:\t{Name}.\n\tВозраст животного:\t{Age} годиков.\n\tКласс:\tМлекопитающие.\n");
  86.             }
  87.         }
  88.         //Парнокопытное
  89.         class A : Animal
  90.         {
  91.             public A()
  92.             {
  93.  
  94.             }
  95.             public A(string name, int age) : base(name, age)
  96.             {
  97.                 Name = name;
  98.                 Age = age;
  99.             }
  100.             public override void SwitchName(string NewName)
  101.             {
  102.                 ClWrite($"[LOG]: Переименовали [{Name}] на [{NewName}]...");
  103.                 Name = NewName;
  104.             }
  105.             public override void SwitchAge(int NewAge)
  106.             {
  107.                 ClWrite($"[LOG]: Изменили возраст [{Age}] на [{NewAge}]...");
  108.                 Age = NewAge;
  109.             }
  110.             public override void Show()
  111.             {
  112.                 Console.WriteLine($"\tНазвание животного:\t{Name}.\n\tВозраст животного:\t{Age} годиков.\n\tКласс:\tПарнокопытные.\n");
  113.             }
  114.         }
  115.         //Птицька
  116.         class B : Animal
  117.         {
  118.             public B()
  119.             {
  120.  
  121.             }
  122.             public B(string name, int age) : base(name, age)
  123.             {
  124.                 Name = name;
  125.                 Age = age;
  126.             }
  127.             public override void SwitchName(string NewName)
  128.             {
  129.                 ClWrite($"[LOG]: Переименовали [{Name}] на [{NewName}]...");
  130.                 Name = NewName;
  131.             }
  132.             public override void SwitchAge(int NewAge)
  133.             {
  134.                 ClWrite($"[LOG]: Изменили возраст [{Age}] на [{NewAge}]...");
  135.                 Age = NewAge;
  136.             }
  137.             public override void Show()
  138.             {
  139.                 Console.WriteLine($"\tНазвание животного:\t{Name}.\n\tВозраст животного:\t{Age} годиков.\n\tКласс:\tПтицы.\n");
  140.             }
  141.         }
  142.         #endregion
  143.  
  144.         class Zoo
  145.         {
  146.             private static string[] Names = {"Голубь", "Корова", "Собака", "Кошка", "Жириновский", "Бык", "Носорог", "Обезьяна", "Кенгуру", "Депутат", "Гадюка", "Негр", "Кит", "Дельфин", "Леопард", "Тигр", "Волк", "Медведь", "Заяц", "Кролик", "Овечка", "Барашек", "Дятел", "Филипп Гросс-Днепров (DOKA 2)", "Алкаш из твоего подъезда", "Та жирная бабка в автобусе"};
  147.             private List<Animal> Animals = new List<Animal>();
  148.             public int AnimalCount { get { return Animals.Count; } }
  149.             public Zoo()
  150.             {
  151.                 Animals = new List<Animal>();
  152.                 int n;
  153.                 Console.Write("Введите кол-во животных в зоопарке: ");
  154.                 if (!Int32.TryParse(Console.ReadLine(), out n))
  155.                 {
  156.                     var rnd = new Random();
  157.                                        
  158.                     Animals = new List<Animal>(new Animal[rnd.Next(1, 8)]);
  159.                     ClWrite("Не могу понять, это int? По-моему - нет!\nТогда будем методом тыка, их будет " + AnimalCount + "\n");
  160.                 }
  161.                 Animals= new List<Animal>(new Animal[n]);
  162.                 Fill();
  163.             }
  164.             public Zoo(int count, bool rnd)
  165.             {
  166.                 Animals = new List<Animal>(new Animal[count]);
  167.                 Console.WriteLine($"В зоопарке теперь {count} животных!\n");
  168.                 if (rnd) FillRandom();
  169.                 else Fill();
  170.             }
  171.  
  172.             public void Add(string name, int age, int Cl)
  173.             {
  174.                 switch (Cl)
  175.                 {
  176.                     case 1: Animals.Add(new M(name, age));
  177.                         break;
  178.                     case 2: Animals.Add(new A(name, age));
  179.                         break;
  180.                     case 3: Animals.Add(new B(name, age));
  181.                         break;
  182.                     default: ClWrite("Неверно введён параметр Class (только числа 1 2 3)...");
  183.                         return;
  184.                         break;
  185.                 }
  186.             }
  187.             public void Remove(int index)
  188.             {
  189.                 try { Animals.RemoveAt(index); } catch { ClWrite("Невозможно удалить элемент с таким индексом..."); }
  190.             }
  191.             public void Show()
  192.             {
  193.                 Console.WriteLine($"Количество животных в зоопарке = {AnimalCount}\nСамому старому зверьку {Animals.Max(x => x.Age)} годиков\nэтот самый зверёк - {Animals.OrderByDescending(x => x.Age).FirstOrDefault().Name}!\n");
  194.             }
  195.             private void Fill()
  196.             {
  197.                 var rnd = new Random();
  198.                 for (int i = 0; i < AnimalCount; i++)
  199.                 {
  200.                     if (i == 0) Console.WriteLine("Нажмите, чтобы задать класс:\n1 - Млекопитающее.\n2 - Парнокопытное.\n3 - Птица.\nДругое - задать случайно... (всё равно будем выбирать именно это -_-)\n");
  201.                     else Console.WriteLine("Нажмите, чтобы задать класс:\n1 - Млекопитающее.\n2 - Парнокопытное.\n3 - Птица.\nДругое - задать случайно.\n");
  202.                     //switchcase и другие плюшки
  203.                     #region Скукота
  204.                     switch (Console.ReadKey().Key)
  205.                     {
  206.                         case ConsoleKey.D1: Animals[i] = new M();
  207.                             break;
  208.                         case ConsoleKey.D2: Animals[i] = new A();
  209.                             break;
  210.                         case ConsoleKey.D3: Animals[i] = new B();
  211.                             break;
  212.                         case ConsoleKey.NumPad1: Animals[i] = new M();
  213.                             break;
  214.                         case ConsoleKey.NumPad2: Animals[i] = new A();
  215.                             break;
  216.                         case ConsoleKey.NumPad3: Animals[i] = new B();
  217.                             break;
  218.                         default:
  219.                             switch (rnd.Next(1,4))
  220.                             {
  221.                                 case 1: Animals[i] = new M();
  222.                                     ClWrite("Рандом сказал: \"Это млекопитающее!\".\n", ConsoleColor.Cyan);
  223.                                     break;
  224.                                 case 2: Animals[i] = new A();
  225.                                     ClWrite("Рандом сказал: \"Это парнокопытное!\".\n", ConsoleColor.Cyan);
  226.                                     break;
  227.                                 case 3: Animals[i] = new B();
  228.                                     ClWrite("-Это супермен!?\n-Это самолёт!?\n-Ах, рандом сказал что это птица... -_-\n", ConsoleColor.Cyan);
  229.                                     break;
  230.                             }
  231.                             break;
  232.                     }
  233.                     #endregion
  234.                 }
  235.             }
  236.  
  237.             public void FillRandom(int MaxAge = 100)
  238.             {
  239.                 var rnd = new Random();
  240.                 for (int i = 0; i < AnimalCount; i++)
  241.                 {
  242.                     switch (rnd.Next(1, 4))
  243.                     {
  244.                         case 1:
  245.                             Animals[i] = new M(Names[rnd.Next(0, Names.Length)], rnd.Next(0, MaxAge));
  246.                             break;
  247.                         case 2:
  248.                             Animals[i] = new A(Names[rnd.Next(0, Names.Length)], rnd.Next(0, MaxAge));
  249.                             break;
  250.                         case 3:
  251.                             Animals[i] = new B(Names[rnd.Next(0, Names.Length)], rnd.Next(0, MaxAge));
  252.                             break;
  253.                     }
  254.                 }
  255.             }
  256.             // индексатор
  257.             public Animal this[int index]
  258.             {
  259.                 get
  260.                 {
  261.                     return Animals[index];
  262.                 }
  263.                 set
  264.                 {
  265.                     Animals[index] = value;
  266.                 }
  267.             }
  268.  
  269.             //Косметика
  270.             internal void ClWrite(string s, ConsoleColor c = ConsoleColor.Red)
  271.             {
  272.                 var Def = Console.ForegroundColor;
  273.                 Console.ForegroundColor = c;
  274.                 Console.WriteLine(s);
  275.                 Console.ForegroundColor = Def;
  276.             }
  277.         }
  278.         static void Main(string[] args)
  279.         {
  280.             var t = new Zoo(5, true);
  281.  
  282.             Console.WriteLine("Управление ниже:");
  283.  
  284.             #region Беконечный цикл
  285.             while (true)
  286.             {
  287.                 Console.ForegroundColor = ConsoleColor.DarkGreen;
  288.                 Console.WriteLine("\nENTER\t-\tДобавить животное\n1 2 3\t-\tДобавить млекопитающее, парнокопытное, птицу\nПробел\t-\tОсмотреть вольер\nСтрелка ВВЕРХ\t-\tПереименовать животное\nСтрелка ВНИЗ\t-\tИзменить возраст животного\nCтрелка ВПРАВО\t-\tСтатус зоопарка.\nСтрелка ВЛЕВО\t-\tПоказать всех животных в зоопарке.\nDelete\t-\tВыгнать животное из вольера.\nESC\t-\tВЫХОД");
  289.                 Console.ForegroundColor = ConsoleColor.Gray;
  290.                 switch (Console.ReadKey().Key)
  291.                 {
  292.                     case ConsoleKey.Enter:
  293.                         Console.WriteLine("[Имя животного] [Возраст] [1 - млекопитающее, 2 - парнокопытное, 3 - птица]");
  294.                         string add = Console.ReadLine();
  295.                         try { t.Add(add.Split(' ')[0], Int32.Parse(add.Split(' ')[1]), Int32.Parse(add.Split(' ')[2])); }
  296.                         catch (Exception e) { Console.WriteLine($"Ошибка: {e.Message}"); continue; }
  297.                         t[t.AnimalCount - 1].Show();
  298.                         break;
  299.                     case ConsoleKey.Escape:
  300.                         Environment.Exit(0);
  301.                         break;
  302.                     case ConsoleKey.Spacebar:
  303.                         try
  304.                         {
  305.                             Console.Write($"№ вольера (от 1 до {t.AnimalCount}) = ");
  306.                             t[Int32.Parse(Console.ReadLine()) - 1].Show();
  307.                         }
  308.                         catch(Exception e) { Console.WriteLine($"Ошибка: {e.Message}"); }
  309.                         break;
  310.                     case ConsoleKey.UpArrow:
  311.                         Console.Write($"№ вольера (от 1 до {t.AnimalCount}) = ");
  312.                         int id = Int32.Parse(Console.ReadLine()) - 1;
  313.                         Console.Write($"Переименовать {t[id].Name} на -> ");
  314.                         string name = Console.ReadLine();
  315.                         if (name != "") t[id].SwitchName(name);
  316.                         else Console.WriteLine("Кличка не была изменена.");
  317.                         break;
  318.                     case ConsoleKey.DownArrow:
  319.                         Console.Write($"№ вольера (от 1 до {t.AnimalCount}) = ");
  320.                         int i = Int32.Parse(Console.ReadLine()) - 1;
  321.                         Console.Write($"Изменить возраст с {t[i].Age} на ->");
  322.                         try { t[i].Age = Int32.Parse(Console.ReadLine()); }
  323.                         catch { Console.WriteLine("Возраст не был изменён."); }
  324.                         break;
  325.                     case ConsoleKey.D1:
  326.                         Console.WriteLine("[Имя животного] [Возраст] Класс: Млекопитающее");
  327.                         name = Console.ReadLine();
  328.                         try { t.Add(name.Split(' ')[0], Int32.Parse(name.Split(' ')[1]), 1); }
  329.                         catch (Exception e) { Console.WriteLine($"Ошибка: {e.Message}"); continue; }
  330.                         break;
  331.                     case ConsoleKey.D2:
  332.                         Console.WriteLine("[Имя животного] [Возраст] Класс: Парнокопытное");
  333.                         name = Console.ReadLine();
  334.                         try { t.Add(name.Split(' ')[0], Int32.Parse(name.Split(' ')[1]), 2); }
  335.                         catch (Exception e) { Console.WriteLine($"Ошибка: {e.Message}"); continue; }
  336.                         break;
  337.                     case ConsoleKey.D3:
  338.                         Console.WriteLine("[Имя животного] [Возраст] Класс: Птица");
  339.                         name = Console.ReadLine();
  340.                         try { t.Add(name.Split(' ')[0], Int32.Parse(name.Split(' ')[1]), 3); }
  341.                         catch (Exception e) { Console.WriteLine($"Ошибка: {e.Message}"); continue; }
  342.                         break;
  343.                     case ConsoleKey.NumPad1:
  344.                         Console.WriteLine("[Имя животного] [Возраст] Класс: Млекопитающее");
  345.                         name = Console.ReadLine();
  346.                         try { t.Add(name.Split(' ')[0], Int32.Parse(name.Split(' ')[1]), 1); }
  347.                         catch (Exception e) { Console.WriteLine($"Ошибка: {e.Message}"); continue; }
  348.                         break;
  349.                     case ConsoleKey.NumPad2:
  350.                         Console.WriteLine("[Имя животного] [Возраст] Класс: Парнокопытное");
  351.                         name = Console.ReadLine();
  352.                         try { t.Add(name.Split(' ')[0], Int32.Parse(name.Split(' ')[1]), 2); }
  353.                         catch (Exception e) { Console.WriteLine($"Ошибка: {e.Message}"); continue; }
  354.                         break;
  355.                     case ConsoleKey.NumPad3:
  356.                         Console.WriteLine("[Имя животного] [Возраст] Класс: Птица");
  357.                         name = Console.ReadLine();
  358.                         try { t.Add(name.Split(' ')[0], Int32.Parse(name.Split(' ')[1]), 3); }
  359.                         catch (Exception e) { Console.WriteLine($"Ошибка: {e.Message}"); continue; }
  360.                         break;
  361.                     case ConsoleKey.RightArrow:
  362.                         t.Show();
  363.                         break;
  364.                     case ConsoleKey.LeftArrow:
  365.                         for (int k = 0; k < t.AnimalCount; k++)
  366.                         {
  367.                             Console.WriteLine($"\t{k + 1})");
  368.                             t[k].Show();
  369.                         }
  370.                         break;
  371.                     case ConsoleKey.Delete:
  372.                         Console.Write($"№ вольера с которого удалим животное (от 1 до {t.AnimalCount}) = ");
  373.                         try
  374.                         {
  375.                             i = Int32.Parse(Console.ReadLine()) - 1;
  376.                             t.Remove(i);
  377.                         }
  378.                         catch (Exception e) { Console.WriteLine($"Ошибка: {e.Message}"); }
  379.                         break;
  380.                    
  381.                     default: continue;
  382.                         break;
  383.                 }
  384.             }
  385.             #endregion
  386.  
  387.             Console.WriteLine("Any key to continue...");
  388.             Console.ReadKey();
  389.  
  390.            
  391.         }
  392.     }
  393. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement