Загрузка данных


using System;
using System.Drawing;
using System.Windows.Forms;

namespace RocketApp
{
    // ====================== ИНТЕРФЕЙС ======================
    public interface IRocket
    {
        void DisplayInfo();
    }

    // ====================== БАЗОВЫЙ КЛАСС ======================
    public abstract class Rocket : IRocket
    {
        public string Name { get; protected set; }
        public double Height { get; protected set; }
        public double PayloadToLEO { get; protected set; }
        public string FuelType { get; protected set; }

        public virtual void DisplayInfo()
        {
            string info = $"Ракета: {Name}\n" +
                          $"Высота: {Height} м\n" +
                          $"Полезная нагрузка на НОО: {PayloadToLEO} т\n" +
                          $"Тип топлива: {FuelType}\n\n";

            AppendText(info);
        }

        protected void AppendText(string text)
        {
            if (Application.OpenForms.Count > 0 && Application.OpenForms[0] is Form1 form)
            {
                if (form.Controls["txtOutput"] is TextBox txt)
                {
                    txt.AppendText(text);
                    txt.ScrollToCaret();
                }
            }
        }
    }

    // ====================== КОНКРЕТНЫЕ КЛАССЫ ======================
    public class Falcon9 : Rocket
    {
        public Falcon9()
        {
            Name = "Falcon 9";
            Height = 70;
            PayloadToLEO = 22.8;
            FuelType = "RP-1 / LOX (керосин + жидкий кислород)";
        }

        public override void DisplayInfo()
        {
            base.DisplayInfo();
            AppendText("Особенность: первая ступень возвращается и может быть использована повторно.\n\n");
        }
    }

    public class Starship : Rocket
    {
        public Starship()
        {
            Name = "Starship (SpaceX)";
            Height = 120;
            PayloadToLEO = 100;
            FuelType = "Метан (CH4) / LOX";
        }

        public override void DisplayInfo()
        {
            base.DisplayInfo();
            AppendText("Особенность: полностью многоразовая система. Предназначена для полётов на Марс.\n\n");
        }
    }

    public class ProtonM : Rocket
    {
        public ProtonM()
        {
            Name = "Протон-М";
            Height = 58.2;
            PayloadToLEO = 23;
            FuelType = "Гептил (UDMH) + Азотный тетроксид";
        }

        public override void DisplayInfo()
        {
            base.DisplayInfo();
            AppendText("Особенность: одна из самых мощных ракет России. Использует токсичное топливо.\n\n");
        }
    }

    // ====================== ГЛАВНАЯ ФОРМА ======================
    public partial class Form1 : Form
    {
        private Falcon9 falcon;
        private Starship starship;
        private ProtonM proton;

        public Form1()
        {
            this.Text = "Лабораторная работа - Полиморфизм (Ракеты)";
            this.Size = new Size(950, 720);
            this.StartPosition = FormStartPosition.CenterScreen;
            this.BackColor = Color.WhiteSmoke;

            CreateControls();

            // Создаём объекты ракет
            falcon = new Falcon9();
            starship = new Starship();
            proton = new ProtonM();
        }

        private void CreateControls()
        {
            // Кнопки
            Button btnFalcon = new Button
            {
                Text = "Falcon 9",
                Location = new Point(30, 30),
                Size = new Size(220, 55),
                Font = new Font("Segoe UI", 11, FontStyle.Bold)
            };

            Button btnStarship = new Button
            {
                Text = "Starship",
                Location = new Point(30, 100),
                Size = new Size(220, 55),
                Font = new Font("Segoe UI", 11, FontStyle.Bold)
            };

            Button btnProton = new Button
            {
                Text = "Протон-М",
                Location = new Point(30, 170),
                Size = new Size(220, 55),
                Font = new Font("Segoe UI", 11, FontStyle.Bold)
            };

            Button btnPolymorphism = new Button
            {
                Text = "Демонстрация полиморфизма",
                Location = new Point(30, 260),
                Size = new Size(220, 55),
                Font = new Font("Segoe UI", 11, FontStyle.Bold),
                BackColor = Color.LightBlue
            };

            // Поле вывода
            TextBox txtOutput = new TextBox
            {
                Name = "txtOutput",
                Multiline = true,
                ScrollBars = ScrollBars.Vertical,
                Location = new Point(280, 30),
                Size = new Size(630, 620),
                Font = new Font("Consolas", 11),
                BackColor = Color.Black,
                ForeColor = Color.Lime,
                ReadOnly = true
            };

            // Подписываемся на события
            btnFalcon.Click += (s, e) => { AppendHeader("=== Информация о Falcon 9 ==="); falcon.DisplayInfo(); };
            btnStarship.Click += (s, e) => { AppendHeader("=== Информация о Starship ==="); starship.DisplayInfo(); };
            btnProton.Click += (s, e) => { AppendHeader("=== Информация о Протон-М ==="); proton.DisplayInfo(); };
            btnPolymorphism.Click += (s, e) => DemonstratePolymorphism();

            // Добавляем элементы на форму
            this.Controls.Add(btnFalcon);
            this.Controls.Add(btnStarship);
            this.Controls.Add(btnProton);
            this.Controls.Add(btnPolymorphism);
            this.Controls.Add(txtOutput);
        }

        private void AppendHeader(string header)
        {
            if (this.Controls["txtOutput"] is TextBox txt)
            {
                txt.AppendText(header + "\n");
                txt.AppendText(new string('=', header.Length) + "\n");
            }
        }

        private void DemonstratePolymorphism()
        {
            if (this.Controls["txtOutput"] is TextBox txt)
            {
                txt.AppendText("=== ДЕМОНСТРАЦИЯ ПОЛИМОРФИЗМА ===\n");
                txt.AppendText(new string('=', 40) + "\n\n");

                Rocket[] rockets = { falcon, starship, proton };

                foreach (var rocket in rockets)
                {
                    rocket.DisplayInfo();   // Полиморфизм в действии!
                    txt.AppendText("-----------------------------------\n\n");
                }
            }
        }
    }

    // ====================== ЗАПУСК ПРИЛОЖЕНИЯ ======================
    static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}