Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace Наследования
- {
- class Program
- {
- #region Описание класса Animal
- //Базовый класс
- abstract class Animal
- {
- private string _Name;
- public string Name { get { return _Name; } set { _Name = value; } }
- private int _Age;
- public int Age { get { return _Age; } set { if (value >= 0) _Age = value; else _Age = 0; } }
- private string AnClass;
- public Animal()
- {
- Console.Write("Введите имя животного: ");
- Name = Console.ReadLine();
- Console.Write("Введите его возраст: ");
- if (!Int32.TryParse(Console.ReadLine(), out _Age))
- {
- var rnd = new Random();
- Age = rnd.Next(1, 80);
- ClWrite("\nНеправильно введён (если вообще введён) возраст\nЗадам рандомом, пусть будет " + Age + " годиков.\n", ConsoleColor.DarkGreen);
- }
- Console.WriteLine();
- }
- public Animal(string name, int age)
- {
- Name = name;
- Age = age;
- }
- virtual public void Show()
- {
- Console.WriteLine($"\tНазвание животного:\t{Name}.\n\tВозраст животного:\t{Age} годиков.");
- }
- // Эта херня нужна для задания...
- abstract public void SwitchName(string NewName);
- abstract public void SwitchAge(int NewAge);
- // Косметика
- internal void ClWrite(string s, ConsoleColor c = ConsoleColor.Red)
- {
- var Def = Console.ForegroundColor;
- Console.ForegroundColor = c;
- Console.WriteLine(s);
- Console.ForegroundColor = Def;
- }
- }
- #endregion
- #region Описание наследников Animal
- //Млекопитающее
- class M : Animal
- {
- public M()
- {
- }
- public M(string name, int age) : base (name, age)
- {
- Name = name;
- Age = age;
- }
- public override void SwitchName(string NewName)
- {
- ClWrite($"[LOG]: Переименовали [{Name}] на [{NewName}]...");
- Name = NewName;
- }
- public override void SwitchAge(int NewAge)
- {
- ClWrite($"[LOG]: Изменили возраст [{Age}] на [{NewAge}]...");
- Age = NewAge;
- }
- public override void Show()
- {
- Console.WriteLine($"\tНазвание животного:\t{Name}.\n\tВозраст животного:\t{Age} годиков.\n\tКласс:\tМлекопитающие.\n");
- }
- }
- //Парнокопытное
- class A : Animal
- {
- public A()
- {
- }
- public A(string name, int age) : base(name, age)
- {
- Name = name;
- Age = age;
- }
- public override void SwitchName(string NewName)
- {
- ClWrite($"[LOG]: Переименовали [{Name}] на [{NewName}]...");
- Name = NewName;
- }
- public override void SwitchAge(int NewAge)
- {
- ClWrite($"[LOG]: Изменили возраст [{Age}] на [{NewAge}]...");
- Age = NewAge;
- }
- public override void Show()
- {
- Console.WriteLine($"\tНазвание животного:\t{Name}.\n\tВозраст животного:\t{Age} годиков.\n\tКласс:\tПарнокопытные.\n");
- }
- }
- //Птицька
- class B : Animal
- {
- public B()
- {
- }
- public B(string name, int age) : base(name, age)
- {
- Name = name;
- Age = age;
- }
- public override void SwitchName(string NewName)
- {
- ClWrite($"[LOG]: Переименовали [{Name}] на [{NewName}]...");
- Name = NewName;
- }
- public override void SwitchAge(int NewAge)
- {
- ClWrite($"[LOG]: Изменили возраст [{Age}] на [{NewAge}]...");
- Age = NewAge;
- }
- public override void Show()
- {
- Console.WriteLine($"\tНазвание животного:\t{Name}.\n\tВозраст животного:\t{Age} годиков.\n\tКласс:\tПтицы.\n");
- }
- }
- #endregion
- class Zoo
- {
- private static string[] Names = {"Голубь", "Корова", "Собака", "Кошка", "Жириновский", "Бык", "Носорог", "Обезьяна", "Кенгуру", "Депутат", "Гадюка", "Негр", "Кит", "Дельфин", "Леопард", "Тигр", "Волк", "Медведь", "Заяц", "Кролик", "Овечка", "Барашек", "Дятел", "Филипп Гросс-Днепров (DOKA 2)", "Алкаш из твоего подъезда", "Та жирная бабка в автобусе"};
- private List<Animal> Animals = new List<Animal>();
- public int AnimalCount { get { return Animals.Count; } }
- public Zoo()
- {
- Animals = new List<Animal>();
- int n;
- Console.Write("Введите кол-во животных в зоопарке: ");
- if (!Int32.TryParse(Console.ReadLine(), out n))
- {
- var rnd = new Random();
- Animals = new List<Animal>(new Animal[rnd.Next(1, 8)]);
- ClWrite("Не могу понять, это int? По-моему - нет!\nТогда будем методом тыка, их будет " + AnimalCount + "\n");
- }
- Animals= new List<Animal>(new Animal[n]);
- Fill();
- }
- public Zoo(int count, bool rnd)
- {
- Animals = new List<Animal>(new Animal[count]);
- Console.WriteLine($"В зоопарке теперь {count} животных!\n");
- if (rnd) FillRandom();
- else Fill();
- }
- public void Add(string name, int age, int Cl)
- {
- switch (Cl)
- {
- case 1: Animals.Add(new M(name, age));
- break;
- case 2: Animals.Add(new A(name, age));
- break;
- case 3: Animals.Add(new B(name, age));
- break;
- default: ClWrite("Неверно введён параметр Class (только числа 1 2 3)...");
- return;
- break;
- }
- }
- public void Remove(int index)
- {
- try { Animals.RemoveAt(index); } catch { ClWrite("Невозможно удалить элемент с таким индексом..."); }
- }
- public void Show()
- {
- Console.WriteLine($"Количество животных в зоопарке = {AnimalCount}\nСамому старому зверьку {Animals.Max(x => x.Age)} годиков\nэтот самый зверёк - {Animals.OrderByDescending(x => x.Age).FirstOrDefault().Name}!\n");
- }
- private void Fill()
- {
- var rnd = new Random();
- for (int i = 0; i < AnimalCount; i++)
- {
- if (i == 0) Console.WriteLine("Нажмите, чтобы задать класс:\n1 - Млекопитающее.\n2 - Парнокопытное.\n3 - Птица.\nДругое - задать случайно... (всё равно будем выбирать именно это -_-)\n");
- else Console.WriteLine("Нажмите, чтобы задать класс:\n1 - Млекопитающее.\n2 - Парнокопытное.\n3 - Птица.\nДругое - задать случайно.\n");
- //switchcase и другие плюшки
- #region Скукота
- switch (Console.ReadKey().Key)
- {
- case ConsoleKey.D1: Animals[i] = new M();
- break;
- case ConsoleKey.D2: Animals[i] = new A();
- break;
- case ConsoleKey.D3: Animals[i] = new B();
- break;
- case ConsoleKey.NumPad1: Animals[i] = new M();
- break;
- case ConsoleKey.NumPad2: Animals[i] = new A();
- break;
- case ConsoleKey.NumPad3: Animals[i] = new B();
- break;
- default:
- switch (rnd.Next(1,4))
- {
- case 1: Animals[i] = new M();
- ClWrite("Рандом сказал: \"Это млекопитающее!\".\n", ConsoleColor.Cyan);
- break;
- case 2: Animals[i] = new A();
- ClWrite("Рандом сказал: \"Это парнокопытное!\".\n", ConsoleColor.Cyan);
- break;
- case 3: Animals[i] = new B();
- ClWrite("-Это супермен!?\n-Это самолёт!?\n-Ах, рандом сказал что это птица... -_-\n", ConsoleColor.Cyan);
- break;
- }
- break;
- }
- #endregion
- }
- }
- public void FillRandom(int MaxAge = 100)
- {
- var rnd = new Random();
- for (int i = 0; i < AnimalCount; i++)
- {
- switch (rnd.Next(1, 4))
- {
- case 1:
- Animals[i] = new M(Names[rnd.Next(0, Names.Length)], rnd.Next(0, MaxAge));
- break;
- case 2:
- Animals[i] = new A(Names[rnd.Next(0, Names.Length)], rnd.Next(0, MaxAge));
- break;
- case 3:
- Animals[i] = new B(Names[rnd.Next(0, Names.Length)], rnd.Next(0, MaxAge));
- break;
- }
- }
- }
- // индексатор
- public Animal this[int index]
- {
- get
- {
- return Animals[index];
- }
- set
- {
- Animals[index] = value;
- }
- }
- //Косметика
- internal void ClWrite(string s, ConsoleColor c = ConsoleColor.Red)
- {
- var Def = Console.ForegroundColor;
- Console.ForegroundColor = c;
- Console.WriteLine(s);
- Console.ForegroundColor = Def;
- }
- }
- static void Main(string[] args)
- {
- var t = new Zoo(5, true);
- Console.WriteLine("Управление ниже:");
- #region Беконечный цикл
- while (true)
- {
- Console.ForegroundColor = ConsoleColor.DarkGreen;
- 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ВЫХОД");
- Console.ForegroundColor = ConsoleColor.Gray;
- switch (Console.ReadKey().Key)
- {
- case ConsoleKey.Enter:
- Console.WriteLine("[Имя животного] [Возраст] [1 - млекопитающее, 2 - парнокопытное, 3 - птица]");
- string add = Console.ReadLine();
- try { t.Add(add.Split(' ')[0], Int32.Parse(add.Split(' ')[1]), Int32.Parse(add.Split(' ')[2])); }
- catch (Exception e) { Console.WriteLine($"Ошибка: {e.Message}"); continue; }
- t[t.AnimalCount - 1].Show();
- break;
- case ConsoleKey.Escape:
- Environment.Exit(0);
- break;
- case ConsoleKey.Spacebar:
- try
- {
- Console.Write($"№ вольера (от 1 до {t.AnimalCount}) = ");
- t[Int32.Parse(Console.ReadLine()) - 1].Show();
- }
- catch(Exception e) { Console.WriteLine($"Ошибка: {e.Message}"); }
- break;
- case ConsoleKey.UpArrow:
- Console.Write($"№ вольера (от 1 до {t.AnimalCount}) = ");
- int id = Int32.Parse(Console.ReadLine()) - 1;
- Console.Write($"Переименовать {t[id].Name} на -> ");
- string name = Console.ReadLine();
- if (name != "") t[id].SwitchName(name);
- else Console.WriteLine("Кличка не была изменена.");
- break;
- case ConsoleKey.DownArrow:
- Console.Write($"№ вольера (от 1 до {t.AnimalCount}) = ");
- int i = Int32.Parse(Console.ReadLine()) - 1;
- Console.Write($"Изменить возраст с {t[i].Age} на ->");
- try { t[i].Age = Int32.Parse(Console.ReadLine()); }
- catch { Console.WriteLine("Возраст не был изменён."); }
- break;
- case ConsoleKey.D1:
- Console.WriteLine("[Имя животного] [Возраст] Класс: Млекопитающее");
- name = Console.ReadLine();
- try { t.Add(name.Split(' ')[0], Int32.Parse(name.Split(' ')[1]), 1); }
- catch (Exception e) { Console.WriteLine($"Ошибка: {e.Message}"); continue; }
- break;
- case ConsoleKey.D2:
- Console.WriteLine("[Имя животного] [Возраст] Класс: Парнокопытное");
- name = Console.ReadLine();
- try { t.Add(name.Split(' ')[0], Int32.Parse(name.Split(' ')[1]), 2); }
- catch (Exception e) { Console.WriteLine($"Ошибка: {e.Message}"); continue; }
- break;
- case ConsoleKey.D3:
- Console.WriteLine("[Имя животного] [Возраст] Класс: Птица");
- name = Console.ReadLine();
- try { t.Add(name.Split(' ')[0], Int32.Parse(name.Split(' ')[1]), 3); }
- catch (Exception e) { Console.WriteLine($"Ошибка: {e.Message}"); continue; }
- break;
- case ConsoleKey.NumPad1:
- Console.WriteLine("[Имя животного] [Возраст] Класс: Млекопитающее");
- name = Console.ReadLine();
- try { t.Add(name.Split(' ')[0], Int32.Parse(name.Split(' ')[1]), 1); }
- catch (Exception e) { Console.WriteLine($"Ошибка: {e.Message}"); continue; }
- break;
- case ConsoleKey.NumPad2:
- Console.WriteLine("[Имя животного] [Возраст] Класс: Парнокопытное");
- name = Console.ReadLine();
- try { t.Add(name.Split(' ')[0], Int32.Parse(name.Split(' ')[1]), 2); }
- catch (Exception e) { Console.WriteLine($"Ошибка: {e.Message}"); continue; }
- break;
- case ConsoleKey.NumPad3:
- Console.WriteLine("[Имя животного] [Возраст] Класс: Птица");
- name = Console.ReadLine();
- try { t.Add(name.Split(' ')[0], Int32.Parse(name.Split(' ')[1]), 3); }
- catch (Exception e) { Console.WriteLine($"Ошибка: {e.Message}"); continue; }
- break;
- case ConsoleKey.RightArrow:
- t.Show();
- break;
- case ConsoleKey.LeftArrow:
- for (int k = 0; k < t.AnimalCount; k++)
- {
- Console.WriteLine($"\t{k + 1})");
- t[k].Show();
- }
- break;
- case ConsoleKey.Delete:
- Console.Write($"№ вольера с которого удалим животное (от 1 до {t.AnimalCount}) = ");
- try
- {
- i = Int32.Parse(Console.ReadLine()) - 1;
- t.Remove(i);
- }
- catch (Exception e) { Console.WriteLine($"Ошибка: {e.Message}"); }
- break;
- default: continue;
- break;
- }
- }
- #endregion
- Console.WriteLine("Any key to continue...");
- Console.ReadKey();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement