Загрузка данных
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());
}
}
}