- •Курсовая работа
- •«Классы и наследования c#»
- •Оглавление
- •Объявление классов
- •Создание объектов класса
- •Наследования
- •Наследование абстрактных и виртуальных методов
- •Абстрактные базовые классы
- •Наследование интерфейсов
- •Практическое задание
- •Тема 5. Описать структуру с именем aer0fl0t, содержащую следующие поля:
- •Общая диаграмма классов
- •Листинг классов необходимых объектов
- •Листинг основных классов и форм
- •Заключение
- •Список используемых источников
Листинг основных классов и форм
Форма 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("Некоторые данные не указаны");
}
}
}