Здраствуйте.
Начну с того что сразу скажу что исправление при помощи
throw new NotImplementedException();
которое предлагает VS Code не подойдёт тк при использовании combobox поментально кидает к ошибке...
Form1.cs:
using static SDM_Lab5.PasMove;
namespace SDM_Lab5
{
public partial class Form1 : Form
{
Aeroplane aero;
Train tr;
Avto av;
public Form1()
{
InitializeComponent();
}
PasMove pm;
Gorod[] towns;
string pathString = @"C:\Users\Miste\Desktop\Задания_СИ(шарп)\Лабораторные\ЛР_5\SDM_Lab5\SDM_Lab5\img";
private void Form1_Load(object sender, EventArgs e)
{
aero = new Aeroplane(); // создаем экземпляры классов с начальными значениями
tr = new Train();
av = new Avto();
towns = new Gorod[5]; // Задаем значения полей
towns[0] = new Gorod("Москва", 709, "Moscow.jpg");
towns[1] = new Gorod("Рим", 3016, "Rome.jpg");
towns[2] = new Gorod("Нью-Йорк", 6883, "New-york.jpg");
towns[3] = new Gorod("Токио", 7598, "Tokyo.jpg");
towns[4] = new Gorod("Лондон", 2818, "London.jpg");
// добавим поле Name из каждого объекта в выпадающий список
for (int i = 0; i < 5; i++)
{ comboBox1.Items.Add(towns[i].Name); }
}
int k;
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
k = comboBox1.SelectedIndex;
// выводим расстояние до нужного города
label1.Text = towns[k].ToString();
// выводим соответствующую картинку
pictureBox1.Image = Image.FromFile(pathString + "\\" + towns[k].Url);
}
private void button1_Click(object sender, EventArgs e)
{
if (comboBox2.Text == "")
{ MessageBox.Show("Не выбран транспорт!"); return; }
Form2 frm2 = new Form2(pm);
frm2.ShowDialog();
}
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
switch (comboBox2.SelectedIndex)
{
case 0: pm = aero; break; // Ошибки здесь, у aero; tr; av
case 1: pm = tr; break;
case 2: pm = av; break;
}
}
private void button2_Click(object sender, EventArgs e)
{
if (comboBox1.Text == "" || comboBox2.Text == "")
{ MessageBox.Show("Не выбраны данные для расчета"); return; }
else
{
double g = pm.Time(towns[k].Rast);
double c = (pm.Equals(av)) ? pm.CostTrip(towns[k].Rast) : pm.CostTrip(g);
label1.Text = string.Format("Стоимость поездки на 1 человека {0:f2} (без учета прочих сборов)", c);
}
}
}
}
PasMove.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SDM_Lab5
{
public class PasMove
{
public virtual int CountPas { get; set; }
public virtual double Speed { get; set; }
public string Name { get; set; }
public double CostFuel { get; set; }
public double Rashod { get; set; }
public double Time(double s)
{ return s / Speed; }
public virtual double CostTrip(double t)
{ return t * Rashod * CostFuel / CountPas; }
public class Aeroplane
{
int countPas;
double speed;
public int CountPas
{
get { return countPas; }
set { if (value <= 300) countPas = value; }
}
public double Speed
{
get => speed;
set { if (value > 600 && value <= 900) speed = value; }
}
string Name;
double CostFuel;
double Rashod;
public Aeroplane()
{
Name = "Самолет";
CountPas = 280;
Speed = 800;
CostFuel = 37.2;
Rashod = 2600;
}
}
public class Train
{
int countPas;
double speed;
public int CountPas
{
get { return countPas; }
set { if (value <= 300) countPas = value; }
}
public double Speed
{
get => speed;
set { if (value > 600 && value <= 900) speed = value; }
}
string Name;
double CostFuel;
double Rashod;
public Train()
{
Name = "Поезд";
CountPas = 500;
Speed = 80;
CostFuel = 3.2;
Rashod = 1600;
}
}
public class Avto
{
int countPas;
double speed;
public int CountPas
{
get { return countPas; }
set { if (value <= 300) countPas = value; }
}
public double Speed
{
get => speed;
set { if (value > 600 && value <= 900) speed = value; }
}
double CostFuel;
double Rashod;
public virtual double CostTrip(double t) { return t / 100 * Rashod * CostFuel / CountPas;}
string Name;
public Avto()
{
Name = "Автомобиль";
CountPas = 3;
Speed = 110;
CostFuel = 3.2;
Rashod = 1600;
}
}
}
}
Извините что всё так конкретно и всё сразу не могу найти решение уже 2 дня :(