Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
484606.docx
Скачиваний:
22
Добавлен:
20.09.2019
Размер:
892.44 Кб
Скачать
    1. Листинг основных классов и форм

Форма 1 – главная рабочая форма программы

public partial class Form1 : Form

{

System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer(); //новый таймер

int timerCounter = -1; //счётчик для основного таймера

public Form1()

{

InitializeComponent();

timer.Interval = 50; //интервал таймера

timer.Tick += new EventHandler(timer_Tick); //событие плавного убывания при закрытии

}

PictureBox[] picture = new PictureBox[100]; //массив пикчербоксов

string[] aaa = new string[2]; //сюда будем сплитировать полученнные данные о новом самолете с формы 2

int kol = 0; //счетчик самолетов построенных

int kolzap = 0; //счетчик самолетов запущенных

Samolet[] samolets= new Samolet[100];

SamoletNaZemle[] samoletsnazem = new SamoletNaZemle[100]; //массивы объектов "новых самолетов", "самолетов в запасе" и "саммолетов запущенных"

SamoletVvozduhe[] samoletsvvozd = new SamoletVvozduhe[100];

Goroda [] goroda = new Goroda[15]; //массив объектов "городов"

int[] Vputi = new int[100];

int[] Sort = new int[100];

private void button2_Click(object sender, EventArgs e) //метод создание нового самолета

{

dataGridView1.RowCount = kol + 1;

dataGridView1.ColumnCount = 3;

dataGridView1.Columns[0].HeaderCell.Value = " Город "; //обновляем/заполняем таблицу

dataGridView1.Columns[1].HeaderCell.Value = " Модель ";

dataGridView1.Columns[2].HeaderCell.Value = " Состояние ";

Form2 dlg = new Form2();

dlg.Owner = this; //открываем форму 2

dlg.ShowDialog();

////события после закрытия заполеной формы 2////

StreamReader re = new StreamReader("blnkO");

aaa = re.ReadToEnd().Split('*'); //получение данных с формы2

re.Close();

picture[kol] = new PictureBox(); //добавляем новый пикчербокс на форму1

if (aaa[1] == goroda[8].gorod) //устанавливаем новый пикчербокс на место, в зависимости от указанного города

{

picture[kol].Location = new Point(goroda[8].x, goroda[8].y);

}

if (aaa[1] == goroda[9].gorod)

{

picture[kol].Location = new Point(goroda[9].x, goroda[9].y);

}

if (aaa[1] == goroda[1].gorod)

{

picture[kol].Location = new Point(goroda[1].x, goroda[1].y);

}

if (aaa[1] == goroda[11].gorod)

{

picture[kol].Location = new Point(goroda[11].x, goroda[11].y);

}

if (aaa[1] == goroda[13].gorod)

{

picture[kol].Location = new Point(goroda[13].x, goroda[13].y);

}

Samolet rr = new Samolet(aaa[1], aaa[0], false, picture[kol].Location); //создание исходного объекта самолета

samolets[kol] = rr; //присваимаем и-тому объекту самолета значение исходного

samolets[kol].Pvilet = rr.Pvilet;

samolets[kol].Tip = rr.Tip;

samolets[kol].expl = false;

for (int i = 0; i < kol + 1; i++) //создаем таблицу имеющихся самолетов

{

dataGridView1.Rows[i].HeaderCell.Value = "Самолет " + Convert.ToInt32(i + 1);

dataGridView1.Rows[i].Cells[0].Value = samolets[i].Pvilet;

dataGridView1.Rows[i].Cells[1].Value = samolets[i].Tip;

if (samolets[i].expl) //определяем статус самолета

{

dataGridView1.Rows[i].Cells[2].Value = "Работет";

}

else

{

dataGridView1.Rows[i].Cells[2].Value = "Простаивает";

}

}

picture[kol].Size = new Size(256, 256); //устанавливаем рамер пикчербокса

Bitmap image1 = new Bitmap("Новый самолет.ico");

picture[kol].Image = (Image)image1;

Graphics g = this.pictureBox1.CreateGraphics();

Icon newIcon = new Icon(samolets[kol].Tip + ".ico");//прорисовываем самолет

g.DrawIcon(newIcon, picture[kol].Location.X , picture[kol].Location.Y );

g.Dispose(); //очищаем рисовальщика

kol++; //увеличиваем кол-во самолетов

}

private void Form1_Load(object sender, EventArgs e) //событие при загрузке формы

{

Goroda gg = new Goroda(0, 0, "fdfd"); //создаем объект города

for (int i = 0; i < 15; i++)

{

goroda[i] = gg;

}

//// заполняем массив объектов городов уникальной инфой о его координатах и назвинях в зависимоти от лейблов, идентичных городам////

goroda[0] = new Goroda(label1.Location.X - 30 - 32, label1.Location.Y - 112 - 16, label1.Text);

goroda[1] = new Goroda(label2.Location.X - 30 - 32, label2.Location.Y - 112 - 16, label2.Text);

goroda[2] = new Goroda(label3.Location.X - 30 - 32, label3.Location.Y - 112 - 16, label3.Text);

goroda[3] = new Goroda(label4.Location.X - 30 - 32, label4.Location.Y - 112 - 16, label4.Text);

goroda[4] = new Goroda(label5.Location.X - 30 - 32, label5.Location.Y - 112 - 16, label5.Text);

goroda[5] = new Goroda(label6.Location.X - 30 - 32, label6.Location.Y - 112 - 16, label6.Text);

goroda[6] = new Goroda(label7.Location.X - 30 - 32, label7.Location.Y - 112 - 16, label7.Text);

goroda[7] = new Goroda(label8.Location.X - 30 - 32, label8.Location.Y - 112 - 16, label8.Text);

goroda[8] = new Goroda(label9.Location.X - 30 - 32, label9.Location.Y - 112 - 16, label9.Text);

goroda[9] = new Goroda(label10.Location.X - 30 - 32, label10.Location.Y - 112 - 16, label10.Text);

goroda[10] = new Goroda(label11.Location.X - 30 - 32, label11.Location.Y - 112 - 16, label11.Text);

goroda[11] = new Goroda(label12.Location.X - 30 - 32, label12.Location.Y - 112 - 16, label12.Text);

goroda[12] = new Goroda(label13.Location.X - 30 - 32, label13.Location.Y - 112 - 16, label13.Text);

goroda[13] = new Goroda(label14.Location.X - 30 - 32, label14.Location.Y - 112 - 16, label14.Text);

goroda[14] = new Goroda(label15.Location.X - 30 - 32, label15.Location.Y - 112 - 16, label15.Text);

timer.Start();

}

private void button3_Click(object sender, EventArgs e)

{

//события нажатия кнопки "запустить выбранное устройтсво"

Random rand2 = new Random(); //генерируем номер pейса

double b = rand2.Next(0, 1500);

string sst2 = Convert.ToString(b);

Random rand = new Random(); //генерируем точку прилета

double a = rand.Next(0, 14);

int sst = Convert.ToInt32(a);

string pvlt = "";

Point xx = new Point(0, 0);

switch (sst) //в зависимости от случайных чисел заполнем инфу о точках прибытия самолетов

{

case 1:

{

pvlt = label1.Text;

xx.X = goroda[0].x ;

xx.Y = goroda[0].y ;

break;

}

case 2:

{

pvlt = label2.Text;

xx.X = goroda[1].x;

xx.Y = goroda[1].y;

break;

}

case 15:

{

pvlt = label15.Text;

xx.X = goroda[14].x;

xx.Y = goroda[2].y;

break;

}

case 3:

{

pvlt = label3.Text;

xx.X = goroda[2].x;

xx.Y = goroda[2].y;

break;

}

case 4:

{

pvlt = label4.Text;

xx.X = goroda[3].x;

xx.Y = goroda[3].y;

break;

}

case 5:

{

pvlt = label5.Text;

xx.X = goroda[4].x;

xx.Y = goroda[4].y;

break;

}

case 6:

{

pvlt = label6.Text;

xx.X = goroda[5].x;

xx.Y = goroda[5].y;

break;

}

case 7:

{

pvlt = label7.Text;

xx.X = goroda[6].x;

xx.Y = goroda[6].y;

break;

}

case 8:

{

pvlt = label8.Text;

xx.X = goroda[7].x;

xx.Y = goroda[7].y;

break;

}

case 9:

{

pvlt = label9.Text;

xx.X = goroda[8].x;

xx.Y = goroda[8].y;

break;

}

case 10:

{

pvlt = label10.Text;

xx.X = goroda[9].x;

xx.Y = goroda[9].y;

break;

}

case 11:

{

pvlt = label11.Text;

xx.X = goroda[10].x;

xx.Y = goroda[10].y;

break;

}

case 12:

{

pvlt = label12.Text;

xx.X = goroda[11].x;

xx.Y = goroda[11].y;

break;

}

case 13:

{

pvlt = label13.Text;

xx.X = goroda[12].x;

xx.Y = goroda[12].y;

break;

}

case 14:

{

pvlt = label14.Text;

xx.X = goroda[13].x;

xx.Y = goroda[13].y;

break;

}

}

Vputi[kolzap] = 0;

//заполняем элемент массива объектов класса "самолеты в воздухе"

samoletsvvozd[kolzap] = new SamoletVvozduhe(sst2, samolets[Convert.ToInt32(label16.Text) - 1].Pvilet, pvlt,

samolets[Convert.ToInt32(label16.Text) - 1].Tip, DateTime.Now.ToString("HH:mm:ss"), true,

samolets[Convert.ToInt32(label16.Text) - 1].pointGorod, xx, samolets[Convert.ToInt32(label16.Text) - 1].pointGorod, Vputi[kolzap]);

//заполняем/обновляем таблицу со списком запущенных самолетов

dataGridView22.RowCount = kolzap + 1;

dataGridView22.ColumnCount = 7;

dataGridView22.Columns[0].HeaderCell.Value = "Город отправки";

dataGridView22.Columns[1].HeaderCell.Value = "Город прибытия";

dataGridView22.Columns[2].HeaderCell.Value = "№ рейса";

dataGridView22.Columns[3].HeaderCell.Value = "Тип транспорта";

dataGridView22.Columns[4].HeaderCell.Value = "Время отправки";

dataGridView22.Columns[5].HeaderCell.Value = "Координаты сейчас";

dataGridView22.Columns[6].HeaderCell.Value = "Пройдено пути";

samolets[Convert.ToInt32(label16.Text)-1].expl = true;

for (int i = 0; i < kol ; i++) //bpvtyztv gthde. nf,kbwe

{

dataGridView1.Rows[i].HeaderCell.Value = "Самолет " + Convert.ToInt32(i + 1);

dataGridView1.Rows[i].Cells[0].Value = samolets[i].Pvilet;

dataGridView1.Rows[i].Cells[1].Value = samolets[i].Tip;

if (samolets[i].expl) //определяем статус

{

dataGridView1.Rows[i].Cells[2].Value = "Работет";

}

else

{

dataGridView1.Rows[i].Cells[2].Value = "Простаивает";

}

}

sortir(); //запускаем метод сортировки наших самолетов

kolzap++; //увеличиваем количество запущенных самолетов

}

private void Clic1tabl(object sender, DataGridViewCellEventArgs e) ///выбор стоячего самолета

{

int ccc1 = dataGridView1.CurrentCell.RowIndex + 1; //событие нажатия("выбора") на табл.1

label16.Text = Convert.ToString(ccc1);

}

private void timer_Tick(object sender, EventArgs e) //события тика таймера

{

Bitmap btmBack = new Bitmap(925, 374); //создаем "наборы художника"

Bitmap btmFront = new Bitmap(925, 374);

Graphics grBack = Graphics.FromImage(btmBack);

Graphics grFront = Graphics.FromImage(btmFront);

pictureBox1.Image = btmFront;

pictureBox1.BackgroundImage = btmBack;

int x2 = (++timerCounter); //увеличиваем число тиков таймера

int x11, y11, x21, y21, x31, y31, x12, y12;

for (int i = 0; i <kolzap ; i++) //расчеты точки нахождения каждого запущенного самолета в каждый момент времени

{

x11 = samoletsvvozd[i].pointOtpr.X;

y11 = samoletsvvozd[i].pointOtpr.Y;

x21 = samoletsvvozd[i].pointPrbl.X ;

y21 = samoletsvvozd[i].pointPrbl.Y ;

x31 = samoletsvvozd[i].pointSeich.X;

y31 = samoletsvvozd[i].pointSeich.Y;

if (x21 < x11)

{

x12 = (x11 - x21)/64;

if (y21 > y11)

{

y12 = (y11 - y21) /64;

x31 = samoletsvvozd[i].pointSeich.X - x12;

y31 = samoletsvvozd[i].pointSeich.Y - y12;

}

else

{

y12 = (y21 - y11) /64;

x31 = samoletsvvozd[i].pointSeich.X - x12;

y31 = samoletsvvozd[i].pointSeich.Y + y12;

}

}

else

{

x12 = (x21 - x11)/64;

if (y21 > y11)

{

y12 = (y11 - y21) /64;

x31 = samoletsvvozd[i].pointSeich.X + x12;

y31 = samoletsvvozd[i].pointSeich.Y - y12;

}

else

{

y12 = (y21 - y11) /64;

x31 = samoletsvvozd[i].pointSeich.X + x12;

y31 = samoletsvvozd[i].pointSeich.Y + y12;

}

}

samoletsvvozd[i].pointSeich.X = x31;

samoletsvvozd[i].pointSeich.Y = y31;

Vputi[i]++; //увеличиваем время нахождения самолета в пути

samoletsvvozd[i].vputi = Vputi[i];

if (Vputi[i] == 64) //если самолет долетел до п.назначения, то ...

{

Vputi[i] = 0; //время в пути делаем = 0

NoviiGorod(i); //и вызываем метод, назначающий новый город для самолета

}

//обновляем таблицу

dataGridView22.Rows[i].HeaderCell.Value = "№" + Convert.ToInt32(i + 1);

dataGridView22.Rows[i].Cells[0].Value = samoletsvvozd[i].Pvilet;

dataGridView22.Rows[i].Cells[1].Value = samoletsvvozd[i].Pnazn;

dataGridView22.Rows[i].Cells[2].Value = samoletsvvozd[i].Nomrei;

dataGridView22.Rows[i].Cells[3].Value = samoletsvvozd[i].Tip;

dataGridView22.Rows[i].Cells[4].Value = samoletsvvozd[i].vremy;

dataGridView22.Rows[i].Cells[5].Value = samoletsvvozd[i].pointSeich;

dataGridView22.Rows[i].Cells[6].Value = samoletsvvozd[i].vputi + " / 32";

Pen yellowPen = new System.Drawing.Pen(Color.Aqua, 1);

Icon icci = new Icon(samoletsvvozd[i].Tip + ".ico"); //создаем кисти для рисования

grFront.DrawIcon(icci, x31 , y31 ); //и рисуем линии, соединяющие города и их положение

grFront.DrawLine(yellowPen, x31+16, y31+16, samoletsvvozd[i].pointPrbl.X +16, samoletsvvozd[i].pointPrbl.Y +16);

}

for (int i = 0; i < kol; i++)// для каждого из самолетов ...

{

if (samolets[i].expl) //...если он запущен, то ничего не делаем ...

{

//...так как \мы их уже прорисовали

}

else //иначе

{

Icon icci = new Icon(samolets[i].Tip + ".ico"); //прорисовываем

grFront.DrawIcon(icci, samolets[i].pointGorod.X , samolets[i].pointGorod.Y );

}

}

}

public void NoviiGorod(int h) //метод назначения нового города самолету

{

Random rand = new Random(); //генерируем случайную точку прилета

double a = rand.Next(1, 15);

int sst = Convert.ToInt32(a);

string pvlt = "";

Point xx = new Point(0, 0);

switch (sst) //в зависимости от случайно сгенерированной точки прилета...

{

case 1:

{

pvlt = label1.Text;

xx.X = goroda[0].x;//...выбираем унфу о новой точки прилета

xx.Y = goroda[0].y;

break;

}

case 2:

{

pvlt = label2.Text;

xx.X = goroda[1].x;

xx.Y = goroda[1].y;

break;

}

case 15:

{

pvlt = label15.Text;

xx.X = goroda[14].x;

xx.Y = goroda[14].y;

break;

}

case 3:

{

pvlt = label3.Text;

xx.X = goroda[2].x;

xx.Y = goroda[2].y;

break;

}

case 4:

{

pvlt = label4.Text;

xx.X = goroda[3].x;

xx.Y = goroda[3].y;

break;

}

case 5:

{

pvlt = label5.Text;

xx.X = goroda[4].x;

xx.Y = goroda[4].y;

break;

}

case 6:

{

pvlt = label6.Text;

xx.X = goroda[5].x;

xx.Y = goroda[5].y;

break;

}

case 7:

{

pvlt = label7.Text;

xx.X = goroda[6].x;

xx.Y = goroda[6].y;

break;

}

case 8:

{

pvlt = label8.Text;

xx.X = goroda[7].x;

xx.Y = goroda[7].y;

break;

}

case 9:

{

pvlt = label9.Text;

xx.X = goroda[8].x;

xx.Y = goroda[8].y;

break;

}

case 10:

{

pvlt = label10.Text;

xx.X = goroda[9].x;

xx.Y = goroda[9].y;

break;

}

case 11:

{

pvlt = label11.Text;

xx.X = goroda[10].x;

xx.Y = goroda[10].y;

break;

}

case 12:

{

pvlt = label12.Text;

xx.X = goroda[11].x;

xx.Y = goroda[11].y;

break;

}

case 13:

{

pvlt = label13.Text;

xx.X = goroda[12].x;

xx.Y = goroda[12].y;

break;

}

case 14:

{

pvlt = label14.Text;

xx.X = goroda[13].x;

xx.Y = goroda[13].y;

break;

}

}

samoletsvvozd[h].pointSeich = samoletsvvozd[h].pointPrbl;

samoletsvvozd[h].pointOtpr = samoletsvvozd[h].pointPrbl;

samoletsvvozd[h].pointPrbl = xx;

samoletsvvozd[h].Pnazn = pvlt;

Random rand2 = new Random(); //генерируем номер pейса

double b = rand2.Next(0, 1500);

string sst2 = Convert.ToString(b);

samoletsvvozd[h].vremy = DateTime.Now.ToString("HH:mm:ss"); //заполняем атрибут "время вылета"

samoletsvvozd[h].Nomrei = sst2;

sortir(); //сортируем записи методом сортировки

}

private void button1_Click(object sender, EventArgs e) //событие нажатия кнопки "поиск"

{

int dll = dataGridView22.RowCount;

string[] massNom = new string[dll];

string[] massGor = new string[dll];

int[] stroka = new int[100];

int k = 0;

for (int i = 0; i < dll; i++)

{

massGor[i] = samoletsvvozd[i].Pnazn;

massNom[i] = samoletsvvozd[i].Nomrei;

if (massGor[i] == textBox1.Text || massNom[i] == textBox1.Text)

{

stroka[k] = i;

k++;

}

}

if (k != 0)

{

string poisk = "";

for (int i = 0; i < k; i++)

{

poisk += "Рейс № " + samoletsvvozd[stroka[i]].Nomrei + " " + samoletsvvozd[stroka[i]].Pvilet + "-" + samoletsvvozd[stroka[i]].Pnazn + " вылетел в " + samoletsvvozd[stroka[i]].vremy;

}

MessageBox.Show(poisk);

}

else

{

MessageBox.Show("Рейсов не найдено !!..");

}

}

public void sortir() //метод сортировки

{

j22: //лейбл для перехода с гото

for (int i = 0; i < kolzap ; i++)

{

int t = 0; //переменная для перевода символов в числовые значения

if (samoletsvvozd[i].Pnazn != "")

{

t = Convert.ToInt32(samoletsvvozd[i].Pnazn[0]); //конвертируем первый символ из Пназн в чило

}

Sort[i] = t; //записываем его в массив чисел

}

if (kolzap > 1) //если количество самолетев больше 1 то начинаем сортировку

{

bool perem = false; //условие поменяли местами записи или нет

for (int i = 1; i < kolzap; i++) //пробегаемся по самолетам начиная со второго

{

if (Sort[i] < Sort[i - 1]) //если символ самолета "1" выше самолета "0"

{

perem = true; //утверждение условия: да, что-то поменяли

SamoletVvozduhe peremen = samoletsvvozd[i]; //временная запись для и-того самолета

samoletsvvozd[i] = samoletsvvozd[i - 1]; //заменяем студента на предыдущего самолета

samoletsvvozd[i - 1] = peremen; //заменяем предыдущего самолета на инфу их временной записи

}

}

if (perem) //если поменяли, то ...

{

goto j22; //проходим проверку на сортированность ...

}

} //конец сортировки

for (int i = 0; i < kolzap ; i++) //обновляем таблицу работающих самолетов

{

dataGridView22.Rows[i].HeaderCell.Value = "№" + Convert.ToInt32(i + 1);

dataGridView22.Rows[i].Cells[0].Value = samoletsvvozd[i].Pvilet;

dataGridView22.Rows[i].Cells[1].Value = samoletsvvozd[i].Pnazn;

dataGridView22.Rows[i].Cells[2].Value = samoletsvvozd[i].Nomrei;

dataGridView22.Rows[i].Cells[3].Value = samoletsvvozd[i].Tip;

dataGridView22.Rows[i].Cells[4].Value = samoletsvvozd[i].vremy;

dataGridView22.Rows[i].Cells[5].Value = samoletsvvozd[i].pointSeich;

dataGridView22.Rows[i].Cells[6].Value = samoletsvvozd[i].vputi + " / 8";

}

}

}

Форма 2 отвечает за сбор информации о создании нового самолета. Комбобоксы содержат списки доступных самолетов и городов, где их можно построить.

public partial class Form2 : Form //форма сбора информации о новом самолете

{

public Form2()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

string tip = Convert.ToString(comboBox1.Text);

string basa = Convert.ToString(comboBox2.Text);

if (tip != "..." && basa != "...")

{

string blin = tip + "*" + basa;

StreamWriter wer = new StreamWriter("blnkO");

wer.Write(blin);

wer.Close();

this.Close();

}

else

{

MessageBox.Show("Некоторые данные не указаны");

}

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]