Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая. Отчет. Богданов 4205..docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
553.16 Кб
Скачать

5.3.4. Этап 4. Добавление элемента списка, добавление кнопок остановки и удаления.

Этот этап предпоследний. Добавим в дочернее окно управляющий элемент-список для выбора нужного номера автомобиля. Добавим кнопку остановки/возобновления перерисовки окна, а также кнопку удаления выбранного в списке автомобиля. Реализация этого этапа представлены в примерах 5.3.4.1, 5.3.4.2 и 5.3.4.3.

Пример 5.3.4.1. Реализация четвертого этапа разработки Avtos–приложения на языке С#.

using System;

using System.Drawing;

using System.Windows.Forms;

using System.Threading;

using System.Collections;

public delegate void delEv();

public class Avto

{

}

class Avtos : Form

{

ListBox listBoxNum;//список номеров машин

private Button del, ok;// ссылки на кнопки

public Avtos()//конструктор

{

ok = new Button();//создать кнопку приостановки

ok.Text = "Stop";//именовать кнопку

ok.Size = new Size(45, 30);//размеры кнопки

ok.Location = new Point(5, 10);//поместить кнопку в окне

ok.Click += new EventHandler(OK);//подписать обработчик

f.Controls.Add(ok);//поместить объект ок в контейнер окна

listBoxNum = new ListBox();//создать элемент списка номеров

listBoxNum.Location = new Point(140, 10);//разместить в окне

listBoxNum.Size = new Size(60, 70);//установить размер

f.Controls.Add(listBoxNum);//поместить в контейнер окна

del = new Button();//создать кнопку удаления машин

del.Text = "Del";//именовать кнопку

del.Size = new Size(40, 30);//установить размер

del.Location = new Point(90, 10);//поместить кнопку в окне

del.Click += new EventHandler(DEL);//подписать обработчик

f.Controls.Add(del);//поместить объект del в контейнер окна

}

//приостановить или возобновить поток перерисовки

private void OK(Object obj, EventArgs arg)

{

IEnumerator inum = al.GetEnumerator();

while (inum.MoveNext())

{

//перебрать список объектов машин

Avto a = (Avto)inum.Current;

if (run) { a.Suspend(); ok.Text = "Start"; }

else { a.Resume(); ok.Text = "Stop"; }

}

run = !run;

}

//создать автомобиль и включить его в список

public void ADD(Object obj, EventArgs arg)

{

listBoxNum.Items.Add(num);

al.Add(b);

IEnumerator inum = al.GetEnumerator();

while (inum.MoveNext())

{

Avto q = (Avto)inum.Current;

q.evSpecial += new delEv(this.HandlerEvSpecial);

}

}

//обработать нажатие кнопки удаления машины

private void DEL(Object o, EventArgs e)

{

if (listBoxNum.SelectedIndex == -1)

{

MessageBox.Show("Выделите номер"

+ "\n удаляемого объекта");

}

else

{

int numSel = (int)listBoxNum.SelectedItem;

listBoxNum.Items.Remove(numSel);//Удалить из списка

IEnumerator inum = al.GetEnumerator();

while (inum.MoveNext())

{

Avto a = (Avto)inum.Current;

if (a.N == numSel)

{//объект с указанным номером найден

a.Finish();//завершить поток

al.Remove(a);//удалить из списка

return;

}

}

}

}

}

static void Main()

{

Application.Run(new Avtos());

}

}

Результат:

Пример 5.3.4.2. Реализация четвертого этапа разработки Avtos–приложения на языке C++/CLI.

// kurs.cc.cpp : main project file.

#include "stdafx.h"

#using <System.Drawing.dll>

#using <System.Windows.Forms.dll>

using namespace System;

using namespace System::Threading;

using namespace System::Collections;

using namespace System::Drawing;

using namespace System::Windows::Forms;

delegate void delEv();

delegate void Del();

ref class Avto

{

};

ref class Avtos : public Form

{

private:

ArrayList ^al; //ссылка на список машин

ListBox ^listBoxNum;//список номеров машин

public:

Avtos()

{

ok = gcnew Button();

ok->Text = "Stop";

ok->Size = Drawing::Size(45, 30);

ok->Location = Point(5, 10);

ok->Click += gcnew EventHandler(this, &Avtos::OK);

f->Controls->Add(ok);

listBoxNum = gcnew ListBox();

listBoxNum->Location = Point(140, 10);

listBoxNum->Size = Drawing::Size(60, 70);

f->Controls->Add(listBoxNum);

del = gcnew Button();

del->Text = "Del";

del->Size = Drawing::Size(40, 30);

del->Location = Point(90, 10);

del->Click += gcnew EventHandler(this, &Avtos::DEL);

f->Controls->Add(del);

}

private:

void OK(Object ^obj, EventArgs ^arg)

{

IEnumerator ^inum = al->GetEnumerator();

while (inum->MoveNext())

{

Avto ^a = (Avto^)inum->Current;

if (run) { a->Suspend(); ok->Text = "Start"; }

else { a->Resume(); ok->Text = "Stop"; }

}

run = !run;

}

public:

void ADD(Object ^obj, EventArgs ^arg)

{

listBoxNum->Items->Add(num);

b->numA = num;

al->Add(b);

IEnumerator ^inum = al->GetEnumerator();

while (inum->MoveNext())

{

Avto ^q = (Avto^)inum->Current;

q->evSpecial += gcnew delEv(this, &Avtos::HandlerEvSpecial);

}

}

private:

void DEL(Object ^o, EventArgs ^e)

{

if (listBoxNum->SelectedIndex == -1)

{

MessageBox::Show("Выделите номер удаляемого объекта");

}

else

{

int numSel = (int)listBoxNum->SelectedItem;

listBoxNum->Items->Remove(numSel);//Удалить из списка

IEnumerator ^inum = al->GetEnumerator();

while (inum->MoveNext())

{

Avto ^a = (Avto^)inum->Current;

if (a->N == numSel)

{//объект с указанным номером найден

a->Finish();//завершить поток

al->Remove(a);//удалить из списка

return;

}

}

}

}

public:

void HandlerEvSpecial()

{

Invalidate();

}

protected:

virtual void OnPaint(PaintEventArgs ^arg) override

{

}

}

};

static void main()

{

Application::Run(gcnew Avtos());

}

Результат:

Пример 5.3.4.3. Реализация четвертого этапа разработки Avtos–приложения на языке Java.

import java.util.*;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

public class Avto extends Observable implements Runnable

{

}

public class Autos extends Frame implements Observer, ActionListener, ItemListener

{

private Button ok;

private Choice n;

private Button del;

public Autos()

{

ok = new Button("Стоп");

ok.setActionCommand("stop");

ok.addActionListener(this);

f.add(ok);

del = new Button("Del");

del.setActionCommand("DEL");

del.addActionListener(this);

f.add(del);

n = new Choice();

n.addItemListener(this);

f.add(n);

f.setVisible(true);

}

//выполнить команды для нажатия кнопок

public void actionPerformed(ActionEvent aE)

{

String str = aE.getActionCommand();

if (str.equals("stop"))

{

if (run)

{

run = false;

for (int n = 0; n < al.size(); n++)

{

Avto b = (Avto)al.get(n);

b.Suspend();

}

ok.setLabel("Старт");

}

else

if (!run)

{

run = true;

for (int n = 0; n < al.size(); n++)

{

Avto b = (Avto)al.get(n);

b.Resume();

}

ok.setLabel("Стоп");

}

}

if (str.equals("ADD"))

{

n.addItem(Integer.toString(num));

al.add(b);

}

if (str.equals("DEL") && !al.isEmpty())

{

String st = n.getSelectedItem();

n.remove(st);

int sel = Integer.parseInt(st);

for (int n = 0; n < al.size(); n++)

{

Avto b = (Avto)al.get(n);

if (b.num == sel)

{

b.Finish();

al.remove(n);

}

}

}

repaint();

}

public static void main(String[] args)

{

}

}

Результат: