Моделирование работы порта

Автор работы: Пользователь скрыл имя, 01 Февраля 2011 в 22:35, курсовая работа

Краткое описание

Целью данной курсовой работы является закрепление теоретических основ и практических аспектов имитационного моделирования систем.

В курсовой работе необходимо выполнить следующие задания:

- анализ предметной области;

- анализ программных средств, которые используются для моделирования систем;

- разработать программу;

- провести тестирование;

- оформить объяснительную записку.

Содержание работы

ВВЕДЕНИЕ……………………………………………………………………
РАЗДЕЛ 1 АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ……………………………

1.1. Основные понятия теории очередей……………………………………

1.2. Моделирование работы порта……………………………………………

1.3. Модельное время…………………………………………………………

1.4. Выводы……………………………………………………………………

РАЗДЕЛ 2 ОБОСНОВАНИЕ ВЫБОРА ПРОГРАММНЫХ СРЕДСТВ……

2.1. Стандартная библиотека STL……………………………………………

2.2. Выводы……………………………………………………………………

РАЗДЕЛ 3 ОПИСАНИЕ РАЗРАБОТАННОГО

ПРОГРАММНОГО ПРОДУКТА……………………………………………

3.1. Классы и объекты…………………………………………………………

3.2. События и методы…………………………………………………………

3.3. Реализация интерфейса……………………………………………………

3.4. Выводы……………………………………………………………………

РАЗДЕЛ 4 РУКОВОДСТВО ПРОГРАММИСТА……………………………

4.1. Назначение и условия применения программы…………………………

4.2. Состав программного продукта…………………………………………

4.3. Входные и исходные данные……………………………………………

РАЗДЕЛ 5 РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ……………………………

5.1. Назначение программы…………………………………………………

5.2. Условия выполнения программы…………………………………………

5.3. Сообщение пользователю…………………………………………………

ВЫВОДЫ………………………………………………………………………

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ…………………………

Приложение А Текст программы……………………………………………
6

Содержимое работы - 1 файл

kursovoy.doc

— 324.50 Кб (Скачать файл)

     В ходе выполнения работы был создан программный продукт, который состоит из следующих файлов: list.h, random.h, 12-2.h, Unit1.h, Unit1.cpp.

     Программа собирает статистические данные работы порта по загруженности буксира, среднему времени загрузки и средней  длине очереди танкеров.

     В результате тестирования работы программы было обнаружено, что при отсутствии танкеров четвертого типа неиспользованные ресурсы системы довольно велики. При добавлении пяти танкеров четвертого типа показатели вырастают, но остаются в пределах нормы, перегрузок нигде не возникает.

     Время обслуживания танкера буксиром фиксировано и равно 2 часа, что составляет небольшую долю от общего времени облуживания танкера. Значит, потенциальным узким местом системы является погрузка в порту, где танкеры проводят все оставшееся время.

     Программный продукт функционирует под управлением ОС Windows 9х/NT.

 

      СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 
 

     
  1. Труб И.И. Объектно-ориентированное моделирование  на С++: Учебный курс. –СПб.: Питер, 2006. -411с.
  2. Методичні вказівки до виконання курсової роботи з дисципліни " Імітаційне моделювання для студентів магістратури спеціальності 7.080403 "Програмне забезпечення автоматизованих систем" всіх форм навчання /Укл. канд. техн.. наук., доцент. Табунщик Г.В. Запоріжжя: ГУ "ЗІДМУ", 2007. – 16 с.
  3. Оформлення дипломних (курсових) робіт: Вимоги і коментарі., – 2-е вид., уточн. – Запоріжжя: ГУ “ЗІДМУ”, 2005. – 36 с.

 

      Приложение А

     Текст программы 
 

     А.1. Файл Unit1.cpp 
 

#include <vcl.h>

#include "12-2.h"

#pragma hdrstop

#include "Unit1.h"

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

__fastcall TForm1::TForm1(TComponent* Owner)

        : TForm(Owner) {}

void __fastcall TForm1::Button1Click(TObject *Sender)

{

  GroupBox1->Visible=true;

  int i;

  Tanker4 **mas;

  int N= StrToInt (Edit1->Text);

  int M= StrToInt (Edit2->Text);

//Создание  объектов Буксир и Порт

  Port port;

  Tug tug;

//Настройка  их взаимодействия

  port.putTug(&tug);

  tug.putPort(&port);

  mas=new Tanker4 *[M];;

  srand((unsigned)time(0));

//Инициализация  танкеров четвертого типа и  настройка их взаимодействия

//с буксиром

for(i=0;i<M;i++)

{

  mas[i]=new Tanker4(i+1);

  mas[i]->putTug(&tug);

}

//Основной  цикл моделирования

for(total=0L;total<N;total++)

{

  //printf("\n%d",total);

  tug.run();

  port.run();

  for(i=0;i<M;i++)

   mas[i]->run();

}

delete [] mas;

//Вывод  результатов эксперимента

Label13->Caption = IntToStr (completed);

Label14->Caption = IntToStr (completed1);

Label15->Caption = IntToStr (completed2);

Label16->Caption = FloatToStr (q_tugInAve);

Label18->Caption = FloatToStr (q_loadAve);

Label19->Caption = FloatToStr (soj_Ave/60);

Label20->Caption = FloatToStr (soj1_Ave/60);

Label21->Caption = FloatToStr (soj2_Ave/60);

Label22->Caption = FloatToStr (((float)ro_tug)/total);

 entered=0;

completed=0;

completed1=0;

completed2=0;

q_tugInAve=0;

q_tugOutAve=0;

q_loadAve=0;

soj_Ave=0;

soj1_Ave=0;

soj2_Ave=0;

ro_tug=0;

ro_port=0;

} 
 

     А.2. Файл 12-2.h 
 

#include<cstdio>

#include<cstdlib>

#include<ctime>

#include<cmath>

using namespace std;

#include "List.h"

#include "random.h"

#define storm_mu 0.021

float q_tugInAve=0;      //переменная для подсчета средней  длины очереди

                         //на причаливание

float q_tugOutAve=0;     //переменная для подсчета средней  длины очереди

                         //на отчаливание

float q_loadAve=0;       //переменная для подсчета средней длины очереди

                         //на погрузку

float soj_Ave=0;         //переменная для подсчета среднего  времени

                         //пребывания на погрузке

float soj1_Ave=0;        //переменная для подсчета среднего времени

                         //пребывания на погрузке для  танкеров первых

                         //трех типов

float soj2_Ave=0;        //переменная для подсчета среднего  времени

                         //пребывания на погрузке для танкеров

                         //четвертого типа

long int ro_tug=0L;      //переменная для подсчета загрузки  буксира

float ro_port=0;         //переменная для подсчета загрузки  порта

long int entered=0L;     //счетчик общего числа поступлений

long int completed=0L;   //счетчик отчаливших танкеров

long int completed1=0L;  //счетчик отчаливших танкеров  первых трех типов

long int completed2=0L;  //счетчик отчаливших танкеров  четвертого типа

long int total;          //счетчик тактов модельного времени

//базовый  класс

class Tanker

{

public:

long int id;            //идентификатор танкера

int type;               //номер типа

int median;             //среднее время погрузки

int offset;             //максимальное отклонение

int minutes;            //текущее время пребывания на погрузке

int state;              //текущее состояние

friend class Tug;

friend class Port;

Tanker();               //конструктор

//Метод  Print() удобно объявить виртуальным,  например, для обхода любой из

//очередей  и распечатки ее содержимого, так как в очереди могут находиться

//танкеры  любого типа

virtual void Print();

   };

//Производный  класс

class Tanker4: public Tanker

{

  const static int median_path=14400;   //14400 минут=240 часов  - среднее

                                        //время обращения танкера четвертого

                                        //типа

  const static int offset_path=1440;    //24 часа - максимальное  отклонение

                                        //от среднего для времени обращения

                                        //танкера четвертого типа

  int to_arrival;        //время до прибытия пустого  танкера на причаливание

  void *t;               //связь с буксиром

  public:

  friend class Tug;

  friend class Port;

  Tanker4(int i);

  void putTug(Tug *a);

  void run();//диспетчер

  virtual void Print();

};

//Класс  Буксир

class Tug

{

const static int arr_median=660; //660 минут=11 часов - среднее  время между //прибытиями танкеров  первых трех типов

const static int arr_offset=420;    //7 часов - максимальное отклонение

                                     //от среднего для интервалов  между

                                     //прибытиями танкеров первых  трех типов

const static int time_path=60;      //1 час - длительность  причаливания

                                     //и отчаливания

const static int storm_median=240;  //4 часа - средняя длительность  шторма

const static int storm_offset=120;  //2 часа - максимальное  отклонение

                                     //от среднего для длительности  шторма

// const static float storm_mu=0.021;  //1/48, где 48 часов - средняя

                                     //длительность "бесштормового"

                                     //интервала времени

int to_arrival;                   //время до прибытия танкера типов 1,2,3

int to_in;                        //время до окончания причаливания

int to_out;                       //время до окончания отчаливания

ListNode<Tanker> *queue_in;       //очередь  на причаливание

ListNode<Tanker> *queue_out;      //очередь на отчаливание

Tanker *serving;                  //обслуживаемый танкер

int que_inLength;                 //длина очереди на причаливание

int que_outLength;                //длина очереди на отчаливание

int to_sStart;                    //время до начала шторма

int to_sEnd;                      //время до окончания шторма

void *p;                          //указатель на порт

public:

Tug();

void stormStart();                //начало шторма

void stormEnd();                  //окончание шторма

 void Arrival_Sea(Tanker4 *t);     //прибытие танкера четвертого типа

void Arrival_Sea();               //прибытие танкера типов 1,2,3

  void Arrival_coast(Tanker *t);   //танкер требует отчаливания

void Departure();                 //окончание отчаливания

void Arrival();                   //окончание причаливания

void run();                       //диспетчер

Информация о работе Моделирование работы порта