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


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)
            {
                Form1 form = (Form1)Application.OpenForms[0];
                TextBox txt = (TextBox)form.Controls["txtOutput"];
                if (txt != null)
                {
                    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()
        {
            InitializeComponent();
            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)
        {
            TextBox txt = (TextBox)this.Controls["txtOutput"];
            txt.AppendText(header + "\n");
            txt.AppendText(new string('=', header.Length) + "\n");
        }

        private void DemonstratePolymorphism()
        {
            TextBox txt = (TextBox)this.Controls["txtOutput"];
            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");
            }
        }

        // Вспомогательный метод (на случай вызова из классов)
        private void AppendText(string text)
        {
            if (this.Controls["txtOutput"] is TextBox txt)
            {
                txt.AppendText(text);
                txt.ScrollToCaret();
            }
        }
    }

    // ====================== ЗАПУСК ПРИЛОЖЕНИЯ ======================
    static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.Enable