Разработка приложения для моделирования работы аэропорта
Ознакомление с процессом проектирования дизайна табло аэропорта. Рассмотрение основных этапов программирования приложения. Изучение основных направлений организации моделирования и структуры для хранения накапливаемой информации о текущем моделировании.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 04.05.2014 |
Размер файла | 673,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Оглавление
1.Постановка задачи
2. Проектирование дизайна
3.Анализ и проектирование
3.1. «Рисуем» общие черты
3.2. «Первый блин всегда комом»
3.3. Небольшие итоги и «Как это работает?»
Приложения
1.Постановка задачи
Приложение должно моделировать работу аэропорта на заданном промежутке времени T. В аэропорт будут прилетать самолеты с некоторой определенной частотой t1. У аэропорта в наличии одна полоса. Если самолет не может сесть в данный момент он делает дополнительный круг. Через Х мин. самолет делает запрос на посадку.
Если после N круга он не садится, то борт отправляется на запасной аэродром. Во время посадки на основной аэродром, полоса считается занятой на время tпосадки..
Севшие самолеты находятся в аэропорту некоторое время t2, после чего готовы к взлету . Если полоса свободна, то самолет приступает к взлету и полоса становится занятой на время tвзлета . Если полоса занята, то вылет задерживают до освобождения полосы. На время взлета и время посадки влияют погодные условия.
Все самолеты находящиеся в очереди на взлет(посадку) после истечении времени работы аэропорта никак не учитываются.
2. Проектирование дизайна
Этот вопрос решился «быстро и безболезненно». Сразу было решено использовать темные тона, такое цветовое решение не так сильно раздражает глаза.
Стиль главного окна является одним из стандартных FixedToolWindow.
На главном окне располагается 13 полей с возможностью ввода или выбора информации. Девять из них для ввода границ интервалов, три для условий погоды, один для пути журнала Они выделены черным или более светлыми тонами.
В правой верхней части окна располагается «монитор», на котором будут выведены результаты после работы программы. До начала работы на нем располагается надпись «АЭРОПОРТ», базовым элементом которой являются знаки «#».
Вид готовой рабочей программы представлен на Рис.1 и Рис.2.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
3.Анализ и проектирование
3.1 «Рисуем» общие черты
Для начала сразу определимся с некоторыми условиями:
1. Программа будет написана без графической составляющей (кроме GUI).
2. Для создания программы будем использовать ООП язык C++.
3. Среда для разработки Microsoft Visual Studio 2010 Professional Edition.
4. Тип проекта в данной среде: Windows Forms.
5. Общий класс, который будет отвечать за симуляцию и обработку данных, назовем Simulation.
За основу возьмем идею, использованную в методическом пособии «Программирование на языках высокого уровня» Р.Г.Шахмаметов,2006г., Новосибирск.
В работе аэропорта на данном уровне абстракции есть два основных события: посадка самолета и взлет самолета. Реализация всех структур и классов будет представлена отдельно (см. Приложение).
Необходимо разработать структуру
Событие:
Тип события (посадка, взлет).
Время наступления события.
Продолжительность события.
Естественно очередь событий должна храниться в классе:
Очередь:
Элемент очереди (структура событие)
Методы:
Самолет встал в очередь очереди.
Самолет покинул очередь.
Погодные условия следует представить отдельной структурой. Эта структура взята из наработок лабораторных работ. В дальнейшем, в программе будут введены коэффициенты соответствующему погодному явлению, которые будут влиять на продолжительность событий:
Погода:
Туман(нет, слабый, средний, сильный).
Осадки(нет, слабый, средний, сильный).
Ветер.
На входе, т.е. при создании экземпляра класса Simulation мы задаем:
1. Время работы аэропорта.
2. Интервал времени, через который будут прилетать самолеты.
3. Интервал времени нахождения самолета в аэропорту.
4. Погоду, которая будет влиять на время взлета и посадки(об этом позже).
Для получения случайных величин, будем использовать класс Random из упомянутого выше методического пособия. Этот класс был мною проверен и отлажен для корректной работы.
Приведем примерный прототип класса Simulation :
1. Данные:
a. Погодные условия.
b. Статус полосы (занята, свободна).
c. Период симуляции.
d. Очередь событий.
e. Счетчик ушедших на запасной аэродром.
2. Методы:
a. Запуск симуляции.
b. Печать результатов.
c. Установка значений
3.2 «Первый блин всегда комом»
После первой попытки формализовать класс, сразу возникла необходимость в дополнительных данных и методах. Данные о продолжительности событий посадки и взлета. Методы установки интервалов, а так же методы, которые скорее всего будут перенесены в область private:
1. Формирование события, с готовыми случайными данными;
2. Формирование времени ожидания для посадки/взлета;
3. Формирование времени, следующего появления события посадки/взлета;
Для организации моделирования было определено мною два направления:
1. Двигаться от события к событию, пропуская «холостое время работы».
2. Итеративный процесс, когда каждый проход состояний аэропорта увеличивался на единицу исчисления времени.
Первый вариант вызвал некоторые трудности. После этого я решил параллельно проверить второй способ, но попытки поставили большой крест на этом методе по некоторым весомым причинам:
1. Низкая работоспособность.
2. Сложная(по сравнению с первым) для понимания организация программного кода.
По этим и другим менее важным показателям первый вариант выигрывал, плюс имелся пример рабочей программы «Банк», основанный на этом принципе.
Так же изменения коснулись очереди. Пришлось отказаться от неё и заменить на список. Так мы облегчим поддержку упорядоченности в очередности событий.
Например, мы извлекли событие из списка, но оно не может совершиться, так как канал обслуживания занят, тогда мы меняем время наступления у этого события на новое и просто «бросаем» обратно в список. И автоматически, используя предварительно перегруженные операторы, элемент-событие встанет на свое место согласно времени.
Решено было использовать отдельную структуру для хранения накапливаемой информации о текущем моделировании. Её примерный прототип: аэропорт табло программирование
Статистика:
1. Посадки без задержек.
2. Количество севших самолетов.
3. Взлеты без задержаний.
4. Количество взлетевших самолетов всего.
5. Количество самолетов, улетевших на запасной аэродром.
6. Общее время ожидания самолетов при посадке.
7. Общее время ожидания самолетов при взлете.
8. Общее количество сделанных дополнительных кругов.
Данная структура, как и все остальные структуры с классами будет описана в Приложении №3. В виду появления данной структуры некоторые данные-элементы из класса Simulation уберем (например «Счетчик ушедших на запасной аэродром»).
3.3 Небольшие итоги и «Как это работает?»
Теперь у нас есть прототипы основных структур и классов (описание на языке программирования, а так же связи между всеми данными см. в Приложении №1 и Приложении №3). Так же мы выбрали принцип, согласно которому будут обрабатываться данные. Вот в чем его идея:
Извлекается событие из очереди(очередь одна, в ней хранятся все события).Проверяется посадка это или взлет. Если посадка, то проверяется свободна ли полоса.
Если свободна, то она становится занята до «текущее время + время посадки» и формируется новое событие «посадка» с условием: если это не самолет, который прилетел еще раз после штрафного круга. Все это с проверкой не выйдет ли оно за пределы моделирования(время).
Если занята, то меняем время события на более позднее и помещаем обратно в очередь. И в событии инкрементируем счетчик «был задержан».
Со случаем когда это взлет все то же самое, однако нового события не создается после взлета.
После того как программа отработает время на экран выводится статистика. Нагрузка полосы, общее время ожидания самолетов и т.д. А в файле сохраняется журнал всех событий со временем, типом и продолжительностью.
Приложения
Приложение №1.Перичень модулей программы
Список библиотек:
Additionally.h - в этой библиотеке описаны все дополнительные структуры и классы, такие как погода, статистика, взлетная полоса и др.
EngienRandom.h - библиотека непосредственно генератора псевдослучайных чисел.
Form1.h - библиотека с описанием самой формы и ее элементами: кнопки, поля и т.д. Сдесь же объявляется и определяется экземпляр нашего класса Simulation.
Port.h - базовый класс, от которого наследуется класс Simulation.
Simulator.h - библиотека класса, отвечающего за процесс моделирования, обработку данным о моделировании, информирование пользователя о процессе…
stdafx.h - стандартная библиотека по умолчанию. Хранит в себе список зависимостей от других библиотек. Иными словами включает необходимые для корректной работы библиотеки.
Список исходных файлов:
Моделирование.cpp - с этого файла начинается запуск программы. Тут происходит инициализация формы и передача управления ей.
Следующие файлы содержат реализацию соответствующих библиотек.
EngienRandom.cpp
Port.cpp
Simulator.cpp
Приложение №2. Листинг программы
Моделирование.cpp
// Моделирование.cpp: главный файл проекта.
#include "stdafx.h"
#include "Form1.h"
using namespace Моделирование;
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// Включение визуальных эффектов Windows XP до создания каких-либо элементов управления
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
// Создание главного окна и его запуск
Application::Run(gcnew Form1());
return 0;
}
Form1.h
#pragma once
#include "stdafx.h"
namespace Моделирование {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/// <summary>
/// Сводка для Form1
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: добавьте код конструктора
//
}
protected:
/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
~Form1()
{
if (components)
{
delete components;
}
}
private: System::Windows::Forms::TextBox^ textBoxSimTime;
private: System::Windows::Forms::Label^ label1;
private: System::Windows::Forms::TextBox^ textBoxLL;
private: System::Windows::Forms::Label^ label2;
private: System::Windows::Forms::Label^ label3;
private: System::Windows::Forms::TextBox^ textBoxRL;
private: System::Windows::Forms::TextBox^ textBoxRS;
private: System::Windows::Forms::Label^ label4;
private: System::Windows::Forms::Label^ label5;
private: System::Windows::Forms::TextBox^ textBoxLS;
private: System::Windows::Forms::TextBox^ textBoxRLD;
private: System::Windows::Forms::Label^ label6;
private: System::Windows::Forms::Label^ label7;
private: System::Windows::Forms::TextBox^ textBoxLLD;
private: System::Windows::Forms::TextBox^ textBoxLSD;
private: System::Windows::Forms::TextBox^ textBoxRSD;
private: System::Windows::Forms::Label^ label8;
private: System::Windows::Forms::Label^ label9;
private: System::Windows::Forms::ComboBox^ comboBoxFOG;
private: System::Windows::Forms::Label^ label10;
private: System::Windows::Forms::Label^ label11;
private: System::Windows::Forms::ComboBox^ comboBoxRAIN;
private: System::Windows::Forms::Label^ label12;
private: System::Windows::Forms::TextBox^ textBoxWIND;
private: System::Windows::Forms::Button^ buttonSTART;
private: System::Windows::Forms::RichTextBox^ richTextBoxSCREEN;
private: System::Windows::Forms::Panel^ panel1;
private: System::Windows::Forms::Panel^ panel2;
private: System::Windows::Forms::Panel^ panel3;
private: System::Windows::Forms::TextBox^ textBoxWAYTXT;
private: System::Windows::Forms::Button^ buttonOPEN_TXT;
private: System::Windows::Forms::Label^ label13;
private: System::ComponentModel::IContainer^ components;
private:
/// <summary>
/// Требуется переменная конструктора.
/// </summary>
#pragma region Windows Form Designer generated code
/// <summary>
/// Обязательный метод для поддержки конструктора - не изменяйте
/// содержимое данного метода при помощи редактора кода.
/// </summary>
void InitializeComponent(void)
{
System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid));
this->textBoxSimTime = (gcnew System::Windows::Forms::TextBox());
this->label1 = (gcnew System::Windows::Forms::Label());
this->textBoxLL = (gcnew System::Windows::Forms::TextBox());
this->label2 = (gcnew System::Windows::Forms::Label());
this->label3 = (gcnew System::Windows::Forms::Label());
this->textBoxRL = (gcnew System::Windows::Forms::TextBox());
this->textBoxRS = (gcnew System::Windows::Forms::TextBox());
this->label4 = (gcnew System::Windows::Forms::Label());
this->label5 = (gcnew System::Windows::Forms::Label());
this->textBoxLS = (gcnew System::Windows::Forms::TextBox());
this->textBoxRLD = (gcnew System::Windows::Forms::TextBox());
this->label6 = (gcnew System::Windows::Forms::Label());
this->label7 = (gcnew System::Windows::Forms::Label());
this->textBoxLLD = (gcnew System::Windows::Forms::TextBox());
this->textBoxLSD = (gcnew System::Windows::Forms::TextBox());
this->textBoxRSD = (gcnew System::Windows::Forms::TextBox());
this->label8 = (gcnew System::Windows::Forms::Label());
this->label9 = (gcnew System::Windows::Forms::Label());
this->comboBoxFOG = (gcnew System::Windows::Forms::ComboBox());
this->label10 = (gcnew System::Windows::Forms::Label());
this->label11 = (gcnew System::Windows::Forms::Label());
this->comboBoxRAIN = (gcnew System::Windows::Forms::ComboBox());
this->label12 = (gcnew System::Windows::Forms::Label());
this->textBoxWIND = (gcnew System::Windows::Forms::TextBox());
this->buttonSTART = (gcnew System::Windows::Forms::Button());
this->richTextBoxSCREEN = (gcnew System::Windows::Forms::RichTextBox());
this->panel1 = (gcnew System::Windows::Forms::Panel());
this->panel2 = (gcnew System::Windows::Forms::Panel());
this->panel3 = (gcnew System::Windows::Forms::Panel());
this->textBoxWAYTXT = (gcnew System::Windows::Forms::TextBox());
this->buttonOPEN_TXT = (gcnew System::Windows::Forms::Button());
this->label13 = (gcnew System::Windows::Forms::Label());
this->panel1->SuspendLayout();
this->panel2->SuspendLayout();
this->panel3->SuspendLayout();
this->SuspendLayout();
//
// textBoxSimTime
//
this->textBoxSimTime->BackColor = System::Drawing::SystemColors::WindowText;
this->textBoxSimTime->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
this->textBoxSimTime->Font = (gcnew System::Drawing::Font(L"Book Antiqua", 9.75F));
this->textBoxSimTime->ForeColor = System::Drawing::Color::Chartreuse;
this->textBoxSimTime->Location = System::Drawing::Point(197, 13);
this->textBoxSimTime->MaxLength = 4;
this->textBoxSimTime->Name = L"textBoxSimTime";
this->textBoxSimTime->Size = System::Drawing::Size(68, 24);
this->textBoxSimTime->TabIndex = 1;
this->textBoxSimTime->Text = L"1440";
this->textBoxSimTime->TextAlign = System::Windows::Forms::HorizontalAlignment::Center;
this->textBoxSimTime->TextChanged += gcnew System::EventHandler(this, &Form1::StopNULL);
this->textBoxSimTime->KeyPress += gcnew System::Windows::Forms::KeyPressEventHandler(this, &Form1::FilterKeyPress);
//
// label1
//
this->label1->AutoSize = true;
this->label1->Font = (gcnew System::Drawing::Font(L"Times New Roman", 9, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(204)));
this->label1->ForeColor = System::Drawing::SystemColors::ControlLight;
this->label1->Location = System::Drawing::Point(20, 17);
this->label1->Name = L"label1";
this->label1->Size = System::Drawing::Size(167, 15);
this->label1->TabIndex = 2;
this->label1->Text = L"Время моделирования (мин):";
//
// textBoxLL
//
this->textBoxLL->BackColor = System::Drawing::SystemColors::WindowText;
this->textBoxLL->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
this->textBoxLL->Font = (gcnew System::Drawing::Font(L"Book Antiqua", 9.75F));
this->textBoxLL->ForeColor = System::Drawing::Color::Chartreuse;
this->textBoxLL->Location = System::Drawing::Point(58, 43);
this->textBoxLL->MaxLength = 4;
this->textBoxLL->Name = L"textBoxLL";
this->textBoxLL->Size = System::Drawing::Size(68, 24);
this->textBoxLL->TabIndex = 3;
this->textBoxLL->Text = L"20";
this->textBoxLL->TextAlign = System::Windows::Forms::HorizontalAlignment::Center;
this->textBoxLL->TextChanged += gcnew System::EventHandler(this, &Form1::StopNULL);
this->textBoxLL->KeyPress += gcnew System::Windows::Forms::KeyPressEventHandler(this, &Form1::FilterKeyPress);
//
// label2
//
this->label2->AutoSize = true;
this->label2->Font = (gcnew System::Drawing::Font(L"Times New Roman", 9, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(204)));
this->label2->ForeColor = System::Drawing::SystemColors::ControlLight;
this->label2->Location = System::Drawing::Point(13, 9);
this->label2->Name = L"label2";
this->label2->Size = System::Drawing::Size(249, 30);
this->label2->TabIndex = 4;
this->label2->Text = L"Временной энтервал между прилетающими \r\n самолетами (мин):";
this->label2->TextAlign = System::Drawing::ContentAlignment::MiddleCenter;
//
// label3
//
this->label3->AutoSize = true;
this->label3->Location = System::Drawing::Point(132, 46);
this->label3->Name = L"label3";
this->label3->Size = System::Drawing::Size(10, 13);
this->label3->TabIndex = 5;
this->label3->Text = L"-";
//
// textBoxRL
//
this->textBoxRL->BackColor = System::Drawing::SystemColors::WindowText;
this->textBoxRL->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
this->textBoxRL->Font = (gcnew System::Drawing::Font(L"Book Antiqua", 9.75F));
this->textBoxRL->ForeColor = System::Drawing::Color::Chartreuse;
this->textBoxRL->Location = System::Drawing::Point(148, 43);
this->textBoxRL->MaxLength = 4;
this->textBoxRL->Name = L"textBoxRL";
this->textBoxRL->Size = System::Drawing::Size(68, 24);
this->textBoxRL->TabIndex = 6;
this->textBoxRL->Text = L"40";
this->textBoxRL->TextAlign = System::Windows::Forms::HorizontalAlignment::Center;
this->textBoxRL->TextChanged += gcnew System::EventHandler(this, &Form1::StopNULL);
this->textBoxRL->KeyPress += gcnew System::Windows::Forms::KeyPressEventHandler(this, &Form1::FilterKeyPress);
//
// textBoxRS
//
this->textBoxRS->BackColor = System::Drawing::Color::Black;
this->textBoxRS->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
this->textBoxRS->Font = (gcnew System::Drawing::Font(L"Book Antiqua", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(0)));
this->textBoxRS->ForeColor = System::Drawing::Color::Chartreuse;
this->textBoxRS->Location = System::Drawing::Point(149, 107);
this->textBoxRS->MaxLength = 4;
this->textBoxRS->Name = L"textBoxRS";
this->textBoxRS->Size = System::Drawing::Size(68, 24);
this->textBoxRS->TabIndex = 10;
this->textBoxRS->Text = L"10";
this->textBoxRS->TextAlign = System::Windows::Forms::HorizontalAlignment::Center;
this->textBoxRS->TextChanged += gcnew System::EventHandler(this, &Form1::StopNULL);
this->textBoxRS->KeyPress += gcnew System::Windows::Forms::KeyPressEventHandler(this, &Form1::FilterKeyPress);
//
// label4
//
this->label4->AutoSize = true;
this->label4->Location = System::Drawing::Point(133, 111);
this->label4->Name = L"label4";
this->label4->Size = System::Drawing::Size(10, 13);
this->label4->TabIndex = 9;
this->label4->Text = L"-";
//
// label5
//
this->label5->AutoSize = true;
this->label5->Font = (gcnew System::Drawing::Font(L"Times New Roman", 9, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(204)));
this->label5->ForeColor = System::Drawing::SystemColors::ControlLight;
this->label5->Location = System::Drawing::Point(13, 76);
this->label5->Name = L"label5";
this->label5->Size = System::Drawing::Size(250, 30);
this->label5->TabIndex = 8;
this->label5->Text = L"Временной интервал нахождения самолетов\r\n в аэропорту (мин):";
this->label5->TextAlign = System::Drawing::ContentAlignment::MiddleCenter;
//
// textBoxLS
//
this->textBoxLS->BackColor = System::Drawing::Color::Black;
this->textBoxLS->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
this->textBoxLS->Font = (gcnew System::Drawing::Font(L"Book Antiqua", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(0)));
this->textBoxLS->ForeColor = System::Drawing::Color::Chartreuse;
this->textBoxLS->Location = System::Drawing::Point(59, 107);
this->textBoxLS->MaxLength = 4;
this->textBoxLS->Name = L"textBoxLS";
this->textBoxLS->Size = System::Drawing::Size(68, 24);
this->textBoxLS->TabIndex = 7;
this->textBoxLS->Text = L"5";
this->textBoxLS->TextAlign = System::Windows::Forms::HorizontalAlignment::Center;
this->textBoxLS->TextChanged += gcnew System::EventHandler(this, &Form1::StopNULL);
this->textBoxLS->KeyPress += gcnew System::Windows::Forms::KeyPressEventHandler(this, &Form1::FilterKeyPress);
//
// textBoxRLD
//
this->textBoxRLD->BackColor = System::Drawing::Color::Black;
this->textBoxRLD->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
this->textBoxRLD->Font = (gcnew System::Drawing::Font(L"Book Antiqua", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(0)));
this->textBoxRLD->ForeColor = System::Drawing::Color::Chartreuse;
this->textBoxRLD->Location = System::Drawing::Point(108, 20);
this->textBoxRLD->MaxLength = 4;
this->textBoxRLD->Name = L"textBoxRLD";
this->textBoxRLD->Size = System::Drawing::Size(68, 24);
this->textBoxRLD->TabIndex = 14;
this->textBoxRLD->Text = L"3";
this->textBoxRLD->TextAlign = System::Windows::Forms::HorizontalAlignment::Center;
this->textBoxRLD->TextChanged += gcnew System::EventHandler(this, &Form1::StopNULL);
this->textBoxRLD->KeyPress += gcnew System::Windows::Forms::KeyPressEventHandler(this, &Form1::FilterKeyPress);
//
// label6
//
this->label6->AutoSize = true;
this->label6->Location = System::Drawing::Point(92, 23);
this->label6->Name = L"label6";
this->label6->Size = System::Drawing::Size(10, 13);
this->label6->TabIndex = 13;
this->label6->Text = L"-";
//
// label7
//
this->label7->AutoSize = true;
this->label7->Font = (gcnew System::Drawing::Font(L"Times New Roman", 9, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(204)));
this->label7->ForeColor = System::Drawing::SystemColors::ControlLight;
this->label7->Location = System::Drawing::Point(12, 3);
this->label7->Name = L"label7";
this->label7->Size = System::Drawing::Size(177, 15);
this->label7->TabIndex = 12;
this->label7->Text = L"Протяженность посадки (мин):";
//
// textBoxLLD
//
this->textBoxLLD->BackColor = System::Drawing::Color::Black;
this->textBoxLLD->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
this->textBoxLLD->Font = (gcnew System::Drawing::Font(L"Book Antiqua", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(0)));
this->textBoxLLD->ForeColor = System::Drawing::Color::Chartreuse;
this->textBoxLLD->Location = System::Drawing::Point(19, 20);
this->textBoxLLD->MaxLength = 4;
this->textBoxLLD->Name = L"textBoxLLD";
this->textBoxLLD->Size = System::Drawing::Size(68, 24);
this->textBoxLLD->TabIndex = 11;
this->textBoxLLD->Text = L"2";
this->textBoxLLD->TextAlign = System::Windows::Forms::HorizontalAlignment::Center;
this->textBoxLLD->TextChanged += gcnew System::EventHandler(this, &Form1::StopNULL);
this->textBoxLLD->KeyPress += gcnew System::Windows::Forms::KeyPressEventHandler(this, &Form1::FilterKeyPress);
//
// textBoxLSD
//
this->textBoxLSD->BackColor = System::Drawing::Color::Black;
this->textBoxLSD->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
this->textBoxLSD->Font = (gcnew System::Drawing::Font(L"Book Antiqua", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(0)));
this->textBoxLSD->ForeColor = System::Drawing::Color::Chartreuse;
this->textBoxLSD->Location = System::Drawing::Point(20, 69);
this->textBoxLSD->MaxLength = 4;
this->textBoxLSD->Name = L"textBoxLSD";
this->textBoxLSD->Size = System::Drawing::Size(68, 24);
this->textBoxLSD->TabIndex = 15;
this->textBoxLSD->Text = L"5";
this->textBoxLSD->TextAlign = System::Windows::Forms::HorizontalAlignment::Center;
this->textBoxLSD->TextChanged += gcnew System::EventHandler(this, &Form1::StopNULL);
this->textBoxLSD->KeyPress += gcnew System::Windows::Forms::KeyPressEventHandler(this, &Form1::FilterKeyPress);
//
// textBoxRSD
//
this->textBoxRSD->BackColor = System::Drawing::Color::Black;
this->textBoxRSD->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
this->textBoxRSD->Font = (gcnew System::Drawing::Font(L"Book Antiqua", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(0)));
this->textBoxRSD->ForeColor = System::Drawing::Color::Chartreuse;
this->textBoxRSD->Location = System::Drawing::Point(110, 69);
this->textBoxRSD->MaxLength = 4;
this->textBoxRSD->Name = L"textBoxRSD";
this->textBoxRSD->Size = System::Drawing::Size(68, 24);
this->textBoxRSD->TabIndex = 18;
this->textBoxRSD->Text = L"8";
this->textBoxRSD->TextAlign = System::Windows::Forms::HorizontalAlignment::Center;
this->textBoxRSD->TextChanged += gcnew System::EventHandler(this, &Form1::StopNULL);
this->textBoxRSD->KeyPress += gcnew System::Windows::Forms::KeyPressEventHandler(this, &Form1::FilterKeyPress);
//
// label8
//
this->label8->AutoSize = true;
this->label8->Font = (gcnew System::Drawing::Font(L"Times New Roman", 9, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(204)));
this->label8->ForeColor = System::Drawing::SystemColors::ControlLight;
this->label8->Location = System::Drawing::Point(18, 53);
this->label8->Name = L"label8";
this->label8->Size = System::Drawing::Size(169, 15);
this->label8->TabIndex = 16;
this->label8->Text = L"Протяженность взлета (мин):";
//
// label9
//
this->label9->AutoSize = true;
this->label9->Location = System::Drawing::Point(94, 72);
this->label9->Name = L"label9";
this->label9->Size = System::Drawing::Size(10, 13);
this->label9->TabIndex = 17;
this->label9->Text = L"-";
//
// comboBoxFOG
//
this->comboBoxFOG->BackColor = System::Drawing::SystemColors::Window;
this->comboBoxFOG->DropDownStyle = System::Windows::Forms::ComboBoxStyle::DropDownList;
this->comboBoxFOG->FormattingEnabled = true;
this->comboBoxFOG->Items->AddRange(gcnew cli::array< System::Object^ >(4) {L"Нет", L"Слабый", L"Средний", L"Сильный"});
this->comboBoxFOG->Location = System::Drawing::Point(90, 8);
this->comboBoxFOG->Name = L"comboBoxFOG";
this->comboBoxFOG->Size = System::Drawing::Size(69, 21);
this->comboBoxFOG->TabIndex = 19;
//
// label10
//
this->label10->AutoSize = true;
this->label10->Font = (gcnew System::Drawing::Font(L"Times New Roman", 9, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(204)));
this->label10->ForeColor = System::Drawing::SystemColors::ControlLight;
this->label10->Location = System::Drawing::Point(42, 14);
this->label10->Name = L"label10";
this->label10->Size = System::Drawing::Size(41, 15);
this->label10->TabIndex = 20;
this->label10->Text = L"Туман";
//
// label11
//
this->label11->AutoSize = true;
this->label11->Font = (gcnew System::Drawing::Font(L"Times New Roman", 9, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(204)));
this->label11->ForeColor = System::Drawing::SystemColors::ControlLight;
this->label11->Location = System::Drawing::Point(42, 42);
this->label11->Name = L"label11";
this->label11->Size = System::Drawing::Size(48, 15);
this->label11->TabIndex = 22;
this->label11->Text = L"Осадки";
//
// comboBoxRAIN
//
this->comboBoxRAIN->DropDownStyle = System::Windows::Forms::ComboBoxStyle::DropDownList;
this->comboBoxRAIN->FormattingEnabled = true;
this->comboBoxRAIN->Items->AddRange(gcnew cli::array< System::Object^ >(4) {L"Нет", L"Слабый", L"Средний", L"Сильный"});
this->comboBoxRAIN->Location = System::Drawing::Point(90, 36);
this->comboBoxRAIN->Name = L"comboBoxRAIN";
this->comboBoxRAIN->Size = System::Drawing::Size(69, 21);
this->comboBoxRAIN->TabIndex = 21;
//
// label12
//
this->label12->AutoSize = true;
this->label12->Font = (gcnew System::Drawing::Font(L"Times New Roman", 9, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(204)));
this->label12->ForeColor = System::Drawing::SystemColors::ControlLight;
this->label12->Location = System::Drawing::Point(43, 71);
this->label12->Name = L"label12";
this->label12->Size = System::Drawing::Size(39, 15);
this->label12->TabIndex = 23;
this->label12->Text = L"Ветер";
//
// textBoxWIND
//
this->textBoxWIND->BackColor = System::Drawing::Color::Black;
this->textBoxWIND->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
this->textBoxWIND->Font = (gcnew System::Drawing::Font(L"Book Antiqua", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(0)));
this->textBoxWIND->ForeColor = System::Drawing::Color::Chartreuse;
this->textBoxWIND->Location = System::Drawing::Point(90, 62);
this->textBoxWIND->MaxLength = 3;
this->textBoxWIND->Name = L"textBoxWIND";
this->textBoxWIND->Size = System::Drawing::Size(42, 24);
this->textBoxWIND->TabIndex = 24;
this->textBoxWIND->Text = L"0";
this->textBoxWIND->TextAlign = System::Windows::Forms::HorizontalAlignment::Center;
this->textBoxWIND->TextChanged += gcnew System::EventHandler(this, &Form1::StopNULL2);
this->textBoxWIND->KeyPress += gcnew System::Windows::Forms::KeyPressEventHandler(this, &Form1::FilterKeyPress);
//
// buttonSTART
//
this->buttonSTART->Location = System::Drawing::Point(654, 368);
this->buttonSTART->Name = L"buttonSTART";
this->buttonSTART->Size = System::Drawing::Size(82, 28);
this->buttonSTART->TabIndex = 25;
this->buttonSTART->Text = L"Start";
this->buttonSTART->UseVisualStyleBackColor = true;
this->buttonSTART->Click += gcnew System::EventHandler(this, &Form1::buttonSTART_Click);
//
// richTextBoxSCREEN
//
this->richTextBoxSCREEN->BackColor = System::Drawing::SystemColors::ActiveCaptionText;
this->richTextBoxSCREEN->ForeColor = System::Drawing::Color::Green;
this->richTextBoxSCREEN->Location = System::Drawing::Point(304, 15);
this->richTextBoxSCREEN->Name = L"richTextBoxSCREEN";
this->richTextBoxSCREEN->ReadOnly = true;
this->richTextBoxSCREEN->Size = System::Drawing::Size(432, 296);
this->richTextBoxSCREEN->TabIndex = 0;
this->richTextBoxSCREEN->Text = resources->GetString(L"richTextBoxSCREEN.Text");
//
// panel1
//
this->panel1->BackColor = System::Drawing::Color::DimGray;
this->panel1->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
this->panel1->Controls->Add(this->label2);
this->panel1->Controls->Add(this->label4);
this->panel1->Controls->Add(this->label3);
this->panel1->Controls->Add(this->textBoxRS);
this->panel1->Controls->Add(this->textBoxLL);
this->panel1->Controls->Add(this->textBoxLS);
this->panel1->Controls->Add(this->textBoxRL);
this->panel1->Controls->Add(this->label5);
this->panel1->Location = System::Drawing::Point(7, 41);
this->panel1->Name = L"panel1";
this->panel1->Size = System::Drawing::Size(274, 143);
this->panel1->TabIndex = 27;
//
// panel2
//
this->panel2->BackColor = System::Drawing::Color::DimGray;
this->panel2->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
this->panel2->Controls->Add(this->textBoxLLD);
this->panel2->Controls->Add(this->textBoxRLD);
this->panel2->Controls->Add(this->label7);
this->panel2->Controls->Add(this->label6);
this->panel2->Controls->Add(this->label9);
this->panel2->Controls->Add(this->label8);
this->panel2->Controls->Add(this->textBoxRSD);
this->panel2->Controls->Add(this->textBoxLSD);
this->panel2->Location = System::Drawing::Point(46, 190);
this->panel2->Name = L"panel2";
this->panel2->Size = System::Drawing::Size(200, 100);
this->panel2->TabIndex = 28;
//
// panel3
//
this->panel3->BackColor = System::Drawing::Color::DimGray;
this->panel3->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
this->panel3->Controls->Add(this->comboBoxFOG);
this->panel3->Controls->Add(this->label10);
this->panel3->Controls->Add(this->comboBoxRAIN);
this->panel3->Controls->Add(this->label11);
this->panel3->Controls->Add(this->textBoxWIND);
this->panel3->Controls->Add(this->label12);
this->panel3->Location = System::Drawing::Point(46, 296);
this->panel3->Name = L"panel3";
this->panel3->Size = System::Drawing::Size(200, 100);
this->panel3->TabIndex = 29;
//
// textBoxWAYTXT
//
this->textBoxWAYTXT->Location = System::Drawing::Point(305, 330);
this->textBoxWAYTXT->MaxLength = 35;
this->textBoxWAYTXT->Name = L"textBoxWAYTXT";
this->textBoxWAYTXT->Size = System::Drawing::Size(160, 20);
this->textBoxWAYTXT->TabIndex = 30;
this->textBoxWAYTXT->Text = L"chronology.txt";
//
// buttonOPEN_TXT
//
this->buttonOPEN_TXT->Enabled = false;
this->buttonOPEN_TXT->Location = System::Drawing::Point(493, 329);
this->buttonOPEN_TXT->Name = L"buttonOPEN_TXT";
this->buttonOPEN_TXT->Size = System::Drawing::Size(101, 23);
this->buttonOPEN_TXT->TabIndex = 31;
this->buttonOPEN_TXT->Text = L"Открыть журнал";
this->buttonOPEN_TXT->UseVisualStyleBackColor = true;
this->buttonOPEN_TXT->Click += gcnew System::EventHandler(this, &Form1::button3_Click);
//
// label13
//
this->label13->AutoSize = true;
this->label13->Font = (gcnew System::Drawing::Font(L"Cambria", 8.25F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(204)));
this->label13->ForeColor = System::Drawing::SystemColors::ControlLight;
this->label13->Location = System::Drawing::Point(302, 316);
this->label13->Name = L"label13";
this->label13->Size = System::Drawing::Size(188, 12);
this->label13->TabIndex = 32;
this->label13->Text = L"Имя файла с отчетом моделирования";
//
// Form1
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->AutoSize = true;
this->AutoSizeMode = System::Windows::Forms::AutoSizeMode::GrowAndShrink;
this->BackColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(64)), static_cast<System::Int32>(static_cast<System::Byte>(64)),
static_cast<System::Int32>(static_cast<System::Byte>(64)));
this->ClientSize = System::Drawing::Size(748, 407);
this->Controls->Add(this->label13);
this->Controls->Add(this->buttonOPEN_TXT);
this->Controls->Add(this->textBoxWAYTXT);
this->Controls->Add(this->panel3);
this->Controls->Add(this->panel2);
this->Controls->Add(this->panel1);
this->Controls->Add(this->richTextBoxSCREEN);
this->Controls->Add(this->label1);
this->Controls->Add(this->buttonSTART);
this->Controls->Add(this->textBoxSimTime);
this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedToolWindow;
this->MaximumSize = System::Drawing::Size(764, 445);
this->Name = L"Form1";
this->Text = L"Моделирование работы аэропорта";
this->Load += gcnew System::EventHandler(this, &Form1::button2_Click);
this->panel1->ResumeLayout(false);
this->panel1->PerformLayout();
this->panel2->ResumeLayout(false);
this->panel2->PerformLayout();
this->panel3->ResumeLayout(false);
this->panel3->PerformLayout();
this->ResumeLayout(false);
this->PerformLayout();
}
#pragma endregion
//ОБРАБОТЧИК ВВОДА.НЕ ПРОПУСКАЕТ ПОСТОРОННИЕ СИМВОЛЫ КРОМЕ ЦИФР
private: System::Void FilterKeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
{
if(!Char::IsDigit(e->KeyChar) && e->KeyChar != 8) e->Handled = true;//e->Handled обработчик события.Если true,то не выведется символ в текстбокс. 8 - код backspace
}
//CТАРТ ПРОЭКТИРОВАНИЯ
private: System::Void buttonSTART_Click(System::Object^ sender, System::EventArgs^ e)
{
if(!Verification()) return;
level Fog, Rain;
switch(comboBoxFOG->SelectedIndex)
{
case 0: Fog = none;break;
case 1: Fog = easy;break;
case 2: Fog = medium;break;
case 3: Fog = hard;break;
}
switch(comboBoxRAIN->SelectedIndex)
{
case 0: Rain = none;break;
case 1: Rain = easy;break;
case 2: Rain = medium; break;
case 3: Rain = hard;break;
}
SimulatorPort *engien = new SimulatorPort(Fog,Rain,
Convert::ToInt32(textBoxWIND->Text), Convert::ToInt32(textBoxSimTime->Text),
Convert::ToInt32(textBoxLL->Text), Convert::ToInt32(textBoxRL->Text),
Convert::ToInt32(textBoxLS->Text), Convert::ToInt32(textBoxRS->Text),
Convert::ToInt32(textBoxLLD->Text), Convert::ToInt32(textBoxRLD->Text),
Convert::ToInt32(textBoxLSD->Text), Convert::ToInt32(textBoxRSD->Text),
and_SysStringToChar(textBoxWAYTXT->Text));
engien->Run();
buttonOPEN_TXT->Enabled = true;
richTextBoxSCREEN->Clear();
engien->Print(richTextBoxSCREEN);
//delete engien;
}
//ШАБЛОНЫ С УСТАНОВЛЕННЫМИ ПАРАМЕТРАМИ
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)
{
textBoxLL->Text ="10";
textBoxRL->Text ="20";
textBoxLS->Text ="30";
textBoxRS->Text ="50";
textBoxLLD->Text ="3";
textBoxRLD->Text ="5";
textBoxLSD->Text ="8";
textBoxRSD->Text ="10";
comboBoxFOG->SelectedIndex = 0;
comboBoxRAIN->SelectedIndex = 0;
}
//КНОПКА СТАРТ
private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e)
{
system(and_SysStringToChar(textBoxWAYTXT->Text));
}
//ПРОВЕРКА СООТВЕТСТВИЯ ПОЛЕЙ
private: bool Verification()
{
bool stop = false;
if(Convert::ToInt32(textBoxLL->Text) > Convert::ToInt32(textBoxRL->Text))
{
textBoxLL->BackColor = Color::Red;
textBoxRL->BackColor = Color::Red;
stop = true;
}
if(Convert::ToInt32(textBoxLS->Text) > Convert::ToInt32(textBoxRS->Text))
{
textBoxLS->BackColor = Color::Red;
textBoxRS->BackColor = Color::Red;
stop = true;
}
if(Convert::ToInt32(textBoxLLD->Text) > Convert::ToInt32(textBoxRLD->Text))
{
textBoxLLD->BackColor = Color::Red;
textBoxRLD->BackColor = Color::Red;
stop = true;
}
if(Convert::ToInt32(textBoxLSD->Text) > Convert::ToInt32(textBoxRSD->Text))
{
textBoxLSD->BackColor = Color::Red;
textBoxRSD->BackColor = Color::Red;
stop = true;
}
if(stop) return false;
else
{
textBoxLL->BackColor= Color::Black;
textBoxRL->BackColor= Color::Black;
textBoxLS->BackColor= Color::Black;
textBoxRS->BackColor= Color::Black;
textBoxLLD->BackColor= Color::Black;
textBoxRLD->BackColor= Color::Black;
textBoxLSD->BackColor= Color::Black;
textBoxRSD->BackColor= Color::Black;
return true;
}
}
//ДЛЯ ИСКЛЮЧЕНИЯ НУЛЕВЫХ ПОЛЕЙ
private: System::Void StopNULL(System::Object^ sender, System::EventArgs^ e)
{
TextBox^ box = (TextBox ^)sender;
if(box->TextLength == 0 || box->Text == "0") box->Text = "1";
}
private: System::Void StopNULL2(System::Object^ sender, System::EventArgs^ e)
{
TextBox^ box = (TextBox ^)sender;
if(box->Text == "") box->Text = "0";
}
};
}
Stdafx.h
// stdafx.h: включаемый файл для стандартных системных включаемых файлов
// или включаемых файлов для конкретного проекта, которые часто используются, но
// не часто изменяются
#pragma once
#include <iostream>
using namespace std;
#include <fstream>
#include "time.h"
#include "EngienRandom.h"
#include "list.h"
#include "Simulator.h"
// TODO: Установите здесь ссылки на дополнительные заголовки, требующиеся для программы
Additionally.h
#pragma once
#include "stdafx.h"
#define DEFAULT_LEVELnone//Стандартный уровень для тумана,дождя ...
#define DEFAULT_WIND0//Стандартная скорость ветра
#define MAX_WIND100//Максимальная скорость ветра.
#define METEO_EF_none0.0//Коэффициент влияния погоды
#define METEO_EF_easy0.15//на продолжительность посадки
#define METEO_EF_medium 0.25//или взлета.
#define METEO_EF_hard0.35//
#define METEO_EF_wind0.1//
enum level {none, easy, medium, hard};
enum flag {landing, start};
//ОПРЕДЕЛЕНИЕ СТРУКТУРЫ ПОГОДЫ
struct meteo
{
level fog;//Туман(слабый,средний,сильный)
level rain;//Осадки.
Int wind;//Ветер метров в секунду
meteo(level ff = DEFAULT_LEVEL, level rr = DEFAULT_LEVEL, int ww = DEFAULT_WIND)
{
fog = ff;
rain = rr;
wind = (ww > MAX_WIND ? MAX_WIND:ww);
}
};
//СТРУКТУРА СОБЫТИЯ
struct event
{
flagtype;//Тип события.
inttime;//Время в которое наступит событие(относительно нуля).
intduration;//Продолжительность события.
intcode;//Личный номер события.
intstopped;//Количество задержек.
event(flag ttype = landing, int ccode = 0, int ttime = 0, int dduration = 0)
{
type = ttype;
time = ttime;
duration = dduration;
code = ccode;
stopped = 0;
}
void plus_time(int ttime)
{
time = time + ttime;
}
bool operator <(event &obj)
{
if(time == obj.time && type == landing && obj.type == start) return true;
return (time < obj.time ? true:false);
}
};
//КЛАСС ПОЛОСЫ
class runway
{
int close_time;
public:
runway() { close_time = 0; }
void set_time(int ttime)
{
close_time = ttime;
}
int closetime()
{
return close_time;
}
void Print()
{
cout << "Close time = " << close_time << endl;
}
};
//СТРУКТУРА СТАТИСТИКА
struct statistic
{
int clear_land;//Посадки без задержек.
int land_bort;//Количество севших самолетов.
int clear_start;//Взлеты без задержаний.
int start_bort;//Количество взлетевших бортов всего.
int to_reserv_port;//Количество бортво,улетевших на запасной аэродром.
int land_wait_borts;//Время ожидания бортов при посадке.
int strt_wait_borts;//Время ожидания бортов при взлете.
int full_retry_circ;//Общее количество сделанных дополнительных кругов.
int worktime_road;//Общее время в которое полоса была занята.
statistic()
{
clear_land= 0;
land_bort= 0;
clear_start= 0;
start_bort= 0;
to_reserv_port= 0;
land_wait_borts= 0;
strt_wait_borts = 0;
full_retry_circ= 0;
worktime_road= 0;
}
void plus_work_road(int time)
{
worktime_road = worktime_road + time;
}
void plus_start_wait(int time)
{
strt_wait_borts = strt_wait_borts + time;
}
void plus_land_wait(int time)
{
land_wait_borts = land_wait_borts + time;
}
};
EngienRandom.h
#pragma once
#include <time.h>
//константы для создания случайного числа из seed-значения
const unsigned long maxshort= 65536L;
const unsigned long multiplier = 1194211693L;
const unsigned long adder= 12345L;
class EngienRandom
{
private:
unsigned long randSeed; //seed-значение
public:
EngienRandom(unsigned long s=0); //конструктор
~EngienRandom(void);
//функция, которая возвращает целое случайное число,
//равномерно распределенное в диапазоне [0,n-1]
unsigned short Random(unsigned long n);
//функция, которая возвращает вещественное случайное число,
//равномерно распределенное в диапазоне [0,1]
double fRandom();
};
Port.h
#pragma once
//КЛАСС АЭРОПОРТ
class Port
{
private:
runwayroad; //Состояние полосы.
meteo*wether; //Погодные условия
public:
Port();
Port(Port&);
Port(level, level, int);
~Port();
voidsetMETEO(level, level, int);
voidsetRoad(int);
meteo*getWether();
runway*getRoad();
virtual void Print();
};
Simulator.h
#pragma once
#include "stdafx.h"
#include "Additionally.h"//Тут лежат необходимые струтуры,перечисления,дефайны.
#include "Port.h"
define TIME_EXTRA_CIRC 10//Время круга ожидания
#define MAX_EXTRA_CIRC 2//Максимальное кол-во штрафных кругов для одного самолета.
#define WAY_TXT 15//Под массив для пути для записи журнала
char *and_SysStringToChar(System::String^);
System::String^ and_CharToSysString(char*);
//КЛАСС СИМУЛЯЦИЯ
class SimulatorPort: public Port
{
inttime_sim; //Время симуляции.
char*way_txt; //Путь до журнала.
EngienRandom rnd; //Генератор псевдослучайных чисел.
intcounter; //Для присваивания номера каждому самолету.
statisticstat; //Статистика
list<event> *EVqueue; //Список событий.
event*curr_event; //Текущее событие.
event*new_event; //Новое события.
intnow_time; //Время след. посадки.(ну и подобие общего времени)
intleft_lndng, right_lndng; //Интервал между посадками.
intleft_start, right_start; //Интервал между взлетами.
intleft_dur_l, right_dur_l; //Интервал времени посадки самолета.
intleft_dur_s, right_dur_s; //Интервал времени взлета самолета.
int getNextLanding(); //Получить время след. посадки из зад-го интервала.
int getNextStart(); //Получить время след. взлета из зад-го интервала.
int getDuration(flag); //Получить продолжительность посадки/взлета.
event *getNextEvent(flag, int); //Получить след. событие с заданным номером.
bool ChekEvent_andAdd(event *); //Проверка на соответствие границ времени.
public:
SimulatorPort(void);//Констр. по умолчания.
SimulatorPort( level, level, int, int, int, int, int, int, int, int, int, int, char*);//Конструктор с умолчанием.
~SimulatorPort(void);//Деструктор.
void Run();//Запуск процесса моделирования.
void setCOM_TIME(int);//Установка временных интервалов.
void setINTERVAL_L(int, int);//
void setINTERVAL_S(int, int);//
void setDUR_LAND(int, int);//
void setDUR_START (int, int);//
void Print(System::Windows::Forms::RichTextBox^);//Печать
};
EngienRandom.cpp
#include "StdAfx.h"
#include "EngienRandom.h"
EngienRandom::EngienRandom(unsigned long s)
{
if (s == 0)
randSeed = time(NULL);//seed-значение, заданное посредством функции time()
else
randSeed = s;//seed-значение пользователя
}
EngienRandom::~EngienRandom(void) {}
unsigned short EngienRandom :: Random(unsigned long n)
{//новое seed-значение
randSeed = multiplier * randSeed + adder;
//возврат целого случайного числа в диапазоне [0,n-1]
return (unsigned short) ((randSeed >> 16) %n);
}
double EngienRandom :: fRandom()
{
return Random(maxshort)/double(maxshort);
}
Port.cpp
#include "StdAfx.h"
#include "Port.h"
Port::Port()
{
wether= new meteo();
}
Port::Port(Port &origin)
{
road = *origin.getRoad();
wether = new meteo(origin.getWether()->fog,origin.getWether()->rain,origin.getWether()->wind);
}
Port::Port(level Fog = none, level Rain = none, int Wind = 0)
{
wether= new meteo(Fog, Rain, Wind);
}
Port::~Port()
{
delete wether;
}
//Методы установки значений.
void Port::setMETEO(level ffog, level rrain, int wwind)
{
wether->fog = ffog;
wether->rain = rrain;
wether->wind = wwind;
}
//Метод настройки полосы.
void Port::setRoad(int time)
{
road.set_time(time);
}
//Методв доступа к полосе.
runway *Port::getRoad()
{
return &road;
}
//Метод доступа к погоде
meteo *Port::getWether()
{
return wether;
}
//Печать.
void Port::Print()
{
cout << "Wether: " << endl;
cout << "Fog: " << wether->fog << endl;
cout << "Rain: " << wether->rain << endl;
cout << "Wind: " << wether->wind << endl;
cout << "Road line: " << endl;
road.Print();
}
Simulation.cpp
#include "stdafx.h"
using namespace System::Runtime::InteropServices;
SimulatorPort::SimulatorPort()
{
way_txt= new char[WAY_TXT];
curr_event= NULL;
new_event= NULL;
counter= 2;
time_sim= 0;
now_time= 0;
left_lndng= 0;
right_lndng= 0;
left_start= 0;
right_start= 0;
left_dur_l= 0;
right_dur_l= 0;
left_dur_s= 0;
right_dur_s= 0;
EVqueue= new list<event>();
curr_event = getNextEvent(landing, 1);//Занесли первое событие.
if(curr_event->time < time_sim)//Но с проверкой рамок времени.
EVqueue->Insert(curr_event);//
else {delete curr_event...
Подобные документы
Разработка программного продукта, обеспечивающего автоматизацию работы городского аэропорта. Анализ предметной области автоматизированной информационной системы. Этапы проектирования структуры баз данных, координирующих работу городского аэропорта.
курсовая работа [1,5 M], добавлен 22.04.2014Разработка приложения, которое будет выполнять функции показа точного времени и точной даты. Определение дополнительных функций разработанного приложения. Рассмотрение основных этапов создания программного продукта. Результаты тестирования приложения.
курсовая работа [2,2 M], добавлен 14.04.2019Рассмотрение основных этапов создания приложения "Записная книжка", основное предназначение. Анализ способов выбора среды программирования. Знакомство с элементом управления Data Grid View. Общая характеристика методов конструкции языка программирования.
контрольная работа [1002,4 K], добавлен 21.06.2014Разработка структуры класса "Экран курсового проектирования", которая будет основой для хранения информации о студентах, выполняющих курсовые работы. Реализация визуального приложения для тестирования иерархии классов на языке программирования С++.
курсовая работа [3,3 M], добавлен 18.03.2011Проектирование информационной системы отслеживания финансовой стороны работы автосервиса. Спецификация требований к системе. Проектирование прецедентов, определение классов приложения. Описание основных форм проектируемого интерфейса приложения.
курсовая работа [865,9 K], добавлен 12.10.2014Изучение инструментальной графической среды программирования промышленных контроллеров и языка программирования FBD. Разработка приложения, реализующего вычисление арифметических и логических выражений. Проверка работы приложения программой "Maple".
контрольная работа [2,2 M], добавлен 26.05.2015Проблема организации и хранения данных в информационной сети аэропорта. Разработка и заполнение таблиц соответствующими данными. Установление типа связей ячеек. Создание запросов для вывода необходимых полей, применение формы, отчетов и макросов.
курсовая работа [1,9 M], добавлен 27.12.2014Обзор средств компьютерного имитационного моделирования по созданию веб-приложения для визуализации имитационных моделей. Система имитационного моделирования AnyLogic, Arena, SimuLab. Серверная, клиентская часть. Модель работы отдела банка и участка цеха.
дипломная работа [3,3 M], добавлен 25.05.2015Прикладное значение для проектирования приложения Google Earth, преимущества программы SketchUp. Алгоритм действий пользователя при импорте данных из Google Warehouse в Sketchup и экспорте проекта. Особенности моделирования объектов для Google Earth.
курсовая работа [2,3 M], добавлен 23.02.2011Общая характеристика интерфейса языка программирования Delphi. Рассмотрение окна редактора кода, конструктора формы, инспектора объектов и расширения файлов. Ознакомление с основными этапами создания и сохранения простого приложения; проверка его работы.
презентация [184,3 K], добавлен 18.03.2014Классификация пользователей проекта Web-приложения "Такси "Люкс". Выбор основных методов и средств разработки. Описание дизайна сайта. Исходный код обработчиков основных событий на страницах. Расчет себестоимости разработки программного продукта.
дипломная работа [2,5 M], добавлен 26.06.2012Создание систем имитационного моделирования AnyLogic, Arena, SimuLab, Simbigraph и Forio. Серверная и клиентская часть. Разработка модели работы отдела банка, участка цеха, движения автобуса по маршруту и социальной сети. Описание web-приложения.
дипломная работа [3,4 M], добавлен 25.05.2015Понятие технологии проектирования информационных систем. Создание Web-приложения по подготовке школьников к написанию научных проектов с использованием различных диаграмм, наглядно отображающих структуру приложения. Методология моделирования IDEFX.
курсовая работа [1,8 M], добавлен 07.01.2014Разработка программного обеспечения для моделирования процесса абсорбции; расчёт характеристик при варьировании температуры. Требования к программному обеспечению; структуры данных и алгоритмы в программе; дисплейные фрагменты, внешний вид приложения.
курсовая работа [2,8 M], добавлен 20.11.2012Виды социальных медиа. Критерии эффективности продвижения аккаунта в социальных сетях. Программная реализация алгоритма моделирования распространения информации в социальной сети "Twitter". Разработка клиентского приложения. Апробация интерфейса системы.
дипломная работа [5,4 M], добавлен 08.02.2016Исследование основных отличий ассоциативных массивов от массивов скаляров. Разработка библиотеки классов. Выбор языка программирования. Сравнение языка C++ с Delphi, Java и JavaScript. Изучение методики тестирования и структуры тестового приложения.
практическая работа [390,2 K], добавлен 06.01.2013Анализ возможных подходов к созданию web-приложения с использованием программирования Java и CGI. Разработка структуры базы данных и реализация полученной модели в рамках СУБД. Обеспечение диалога CGI-программы с пользователем, используя браузер.
курсовая работа [310,9 K], добавлен 07.08.2011Создание, изучение и разработка приложение на Android. Среда разработки приложения DelphiXE5. Установка и настройка среды программирования. Этапы разработки приложения. Инструменты для упрощения конструирования графического интерфейса пользователя.
курсовая работа [1,6 M], добавлен 19.04.2017Рассмотрение инфологической и даталогической модели базы данных кинотеатров города. Разработка базы данных в программе MS Access. Описание структуры приложения и интерфейса пользователя. Изучение SQL-запросов на вывод информации о кинотеатре и о фильме.
курсовая работа [1,1 M], добавлен 04.09.2014Разработка программного решения по созданию мобильного приложения. Изучение технологий для разработки приложений. Анализ работы торговых агентов. Обоснование выбора языка программирования. Проектирование интерфейса структуры и верстка, листинг программы.
дипломная работа [2,2 M], добавлен 08.06.2017