Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев_С++_CLI_C#_Java_J#.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

If(lorry.GetFull())

g.fillOval (lorry.p.x - 10, lorry.p.y - 10, 20, 20);

If(lorry.GetLeftRight()) g.SetColor(Color.Red);

else g.setColor(Color.green);

g.drawStrlng (Integer.toStrlng(lorry.number), lorry.p.x + 10,

lorry.p.y + 10);

}

>

// Обработать уведомление склада

public void update (Observable obs, Object args)

{

// Изменить направлеие грузовиков

leftRight= lleftRight;

for (lnt i= 0; i<aL.size(); i++)

{

Lorry lorry= (Lorry) aL.get(l);

lorry.leftRlght= this.leftRight;

>

WarehouseEventArgs arg=(WarehouseEventArgs) args;

// Изменить направление перемещения грузовиков

if(arg.getLeft() && larg.getFull())

leftRight= false;

if (larg.getLeft() && larg.getFull())

leftRight= true;

// Завершить потоки грузовиков

for(inti= 0; i<aL.slze(); i++)

<

Lorry lorry= (Lorry) aL.get(i);

lorry.setLeftRight(leftRight);

>

// Выдать информацию о направлении перемещения и

// о складе, объект которого сгенерировал событие

If (arg.getLeft())

System.out.prlnt("CKflafl leftWH ");

else

System.out.print(" Склад rightWH ");

if (arg.getFull())

System.out.println(" полный");

else

System.out.println(" пустой");

>

// Выполнить основной поток приложения

public static void main ()

{

LorryAndWarehouses laWH= new LorryAndWarehouses ( );

laWH.show ();

>

>

///////////////

// C++/CLI File ccLorryAndWarehouse класс LorryAndWarhouses

#include "stdafx.h"

#using <System.Drawing.dll>

#using <System.Wlndows.Forms.dll>

using namespace System;

using namespace System::Windows::Forms;

using namespace System::Drawing;

using namespace System::Threading;

using namespace System::Collections;

using namespace cJLorryDII;

using namespace pjWarehouseDII;

using namespace pjContrlRegionDII;

refclassLorryAndWarehouses: Form

{

Lorry ^lorry; // Ссылки на объект грузовика

Warehouse ^leftWH; // Ссылки на объектлевого склада

Warehouse ^rlghtWH; // Ссылки на объект правого склада

ContrlRegion ^rsQiOnj // Ссыякз нз объсктзоны контроля

Thread ^thread; // Ссылка но объект потока перерисовки

bool llfe; // Признак жизни потока перерисовки

Button ^butRun, ^butStop;// Ссылки на интерфейсные кнопки

Button ^butAdd, ^butDel; // Ссылки на интерфейсные кнопки

ListBox ^listBox; // Список номеров грузовиков

Int numLorry; // Номер грузовика

lnt Y; // Координата Y пути грузовика

Random ^rand; // Ссылка на случайное число

ArrayList ^aL; ; // Ссылка на список номеров грузовиков

bool leftRight; // Признак направления перемещения грузовиков

// Конструктор

public:

LorryAndWarehouses ()

{

thls->Text= "Test";

thls->ClientSlze= Drawing::Size (350, 130);

numLorry= 0;

aL= gcnew ArrayList (); // Создать список номеров грузовиков

rand= gcnew Random (); // Создать случайное число

leftRlght= true; // Двигаться слева направо

// Создать кнопки

butRun= gcnew Button ( ); // Создать кнопку пуска

butRun-> Location= Point (240,5);

butRun-> Size= Drawlng::Size (45, 20);

butRun-> Text= "Run";

butRun-> BackColor= Color::LightGray;

butRun-> Click += gcnew EventHandler (thls,

&LorryAndWarehouses::But_Run);

this-> Controls-> Add (butRun);

//

butStop= gcnew Button (); // Создать кнопку останова

butStop-> Location= Point (290,5);

butStop-> Size= Drawlng::Size (45, 20);

butStop-> Text= "Stop";

butStop-> BackColor= Color::LightGray;

butStop-> Click += gcnew EventHandler (this,

&LorryAndWarehouses::But_Stop);

this-> Controls-> Add (butStop);

/ / - —

butAdd= gcnew Button (); // Создать кнопку добавления

butAdd-> Location= Point (240,30);

butAdd-> Slze= Drawing::Slze (65, 20);

butAdd-> Text= "Добавить";

butAdd-> BackColor= Color::LightGray;

butAdd-> Click += gcnew EventHandler (thls,

&LorryAndWarehouses::But__Add);

this-> Controls-> Add (butAdd);

butDel= gcnew Button (); // Создать кнопку удаления

butDel-> Location= Point (240,60);

butDel->Size= Drawing::Size (65, 20);

butDel->Text= "Удалить";

butDel-> BackColor= Color::LightGray;

butDei-> Ciick += gcnew EventHanaier (this,

&LorryAndWarehouses::But_Del);

this-> Controls-> Add (butDel);

listBox= gcnew ListBox (); // Создать элемент списка

listBox-> Location= Point (240, 90);

listBox-> Size= Drawing::Slze (60, 20);

this-> Controls-> Add (listBox);

// Создать склады

// Создать объект левого склада

leftWH= gcnew Warehouse (true, true);

leftWH-> Location= Point (10, 10);

leftWH-> Slze= Drawing::Size (30, 100);

leftWH-> BackColor= Color::White;

leftWH-> evFromWarehouse+= gcnew DelEvFromWarehouse

(thls, &LorryAndWarehouses::EvFromWarehouseHandler);

this-> Controls-> Add (leftWH);

leftWH-> Show ();

// Создать объект правого склада

rightWH= gcnew Warehouse (false, false);

rightWH-> Location= Point (200, 10);

rightWH-> Size= Drawing::Size (30, 100);

rightWH-> BackColor= Color::White;

this-> Controls-> Add (rightWH);

rightWH->evFromWarehouse+= gcnew DelEvFromWarehouse

(this, &LorryAndWarehouses::EvFromWarehouseHandler);

rightWH-> Show ();

// Создать область контроля

region= gcnew ContrlRegion ( );

region-> Location= Point (100, 0);

region-> Size= Drawing::Size (40, CiientSlze.Height);

region-> BackColor= Coior::LightSkyBlue;

this-> Controls-> Add (region);

region-> Show ();

// Создать поток перерисовки и запустить его

life= true;

thread= gcnew Thread (gcnew ThreadStart (this,

&LorryAndWarehouses::ThrPaint));

thread-> Start ( );

// Обработать нажатие кнопки пуска

private: