Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Указания по оформлению материалов курсового проекта




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

6.1 Требования к оформлению пояснительной записки

Курсовой проект оформляется в соответствии с требованиями нормативных документов по курсовому проектированию Министерства образования и науки Украины. Основным таким документом является ДСТУ 3008-95 «Документация. Отчеты в сфере науки и техники. Структура и правила оформления».

Большинство актуальных требований и указаний по оформлению пояснительной записки приводятся в методических указаниях по оформлению студенческих работ [17], которые крайне рекомендуются к использованию студентами.

Следует отметить, что существующие стандарты постоянно совершенствуются, и решения всех неоднозначных вопросов утверждаются руководителем.

Пояснительная записка должна иметь обложку и мягкий переплет (скоросшиватель). В переплет вшивается стандартно оформленный конверт (файл) со стандартно оформленным носителем (дискета, компакт-диск) программного продукта.

6.2 Требования к оформлению программного продукта

Программный продукт размещается на любом подходящем физическом информационном носителе. На носителе должно располагаться следующее содержимое:

‒ полные исходные коды разработанного программного продукта (желательно оформленные в виде решения или проекта используемой среды разработки);

‒ исполняемый файл программного продукта, либо его инсталлятор;

‒ пояснительная записка в MS Word совместимом формате (*.doc, *docx);

‒ руководство пользователя в любом целесообразном формате (*.doc, *.docx, *.hlp, *.chm, *.pdf);

‒ текстовый файл с данными о разработчике, теме курсового проекта и описанием содержимого носителя (readme.txt).

Носитель, как и его конверт, также оформляется внешне (подписывается).



Перечень ссылок

1. Шлеер С. Объектно-ориентированный анализ: моделирование мира в состояниях / Шлеер С., Меллор С. – К.: Диалектика, 1993. – 240 с.

2. Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений на C++ / Гради Буч. – М.: Невский проспект, 2000. – 2-е изд. – 359 с.

3. Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений / Гради Буч, Роберт А. Максимчук, Майкл У. Энгл, Бобби Дж. Янг, Джим Коналлен, Келли А. Хьюстон. – М.: Вильямс, 2008. – 3-е изд. – 720 с.

4. Фаулер М. UML. Основы / Фаулер М., Скотт К. – СПб.: Символ-Плюс, 2002. – 2-е изд. – 192 с.

5. Буч Г. Язык UML. Руководство пользователя / Буч Г., Рамбо Дж., А. Якобсон. – 2007. – 2-е изд. – 496 с.

6. Якобсон А. Унифицированный процесс разработки программного обеспечения / Якобсон А., Буч Г., Рамбо Дж. – СПб.: Питер, 2002. – 496 с.

7. Арлоу Д. UML 2 и Унифицированный процесс. Практический объектно-ориентированный анализ и проектирование / Арлоу Д., Нейштадт И. – 2007. – 2-е изд. – 624 с.

8. Кватрани Т. Rational Rose 2000 и UML. Визуальное моделирование / Кватрани Т. – М.: ДМК Пресс, 2001. – 176 с.

9. Мацяшек Л. Анализ требований и проектирование систем. Разработка информационных систем с использованием UML / Лешек А. Мацяшек. – М.: Вильямс, 2002. – 432 с.

10. Леоненков А.В. Самоучитель UML / А.В. Леоненков. – СПб.: БХВ, 2004. – 2-е изд. – 158 с.

11. Леоненков А.В. Язык UML 2 в анализе и проектировании программных систем и бизнес-процессов [Электронный ресурс]. – Режим доступа : http://www.intuit.ru/department/se/uml2/

12. Страуструп Б. Язык программирования C++. Специальное издание / Бьерн Страуструп. – М.: Бином, 2008. – 3-е изд. – 1054 с.

13. Холзнер С. Учебный курс Visual C++ 6 / Холзнер С. – СПб.: Питер, 2007. – 570 с.

14. Хортон А. Visual C++ 2005: базовый курс / Айвор Хортон. – М.: Вильямс, 2007, – 1152 с.

15. Horton I. Beginning Visual C++ 2008 / Ivor Horton. – Indianapolis: Wiley, 2008. – 1394 p.

16. Пахомов Б.И. C/C++ и MS Visual C++ 2008 для начинающих / Пахомов Б.И. – СПб.: БХВ-Петербург, 2009. – 624 с.

17. Золотухина О.А. Методические указания по оформлению студенческих работ / О.А. Золотухина, Е.А. Маслова, Н.П. Пулинец. – Донецк : ИПИИ «Наука і освіта», 2010. – 48 c.

 


 Приложение Д

Пример оформления листа «Содержание»

СОДЕРЖАНИЕ Введение. 6 1 Поставновка задачи. 7 1.1 Описание предметной области. 7 1.2 Цели и задачи курсового проектирования. 8 2 Выбор метода решения. 9 2.1 Описание ОО подхода. 9 2.2 Выбор инструментальных средств. 12 2.3 Описание входных и выходных данных. 14 3 Метод решения. 15 3.1 Объектно-ориентированный анализ. 15 3.2 Объектно-ориентированное проектирование. 18 3.2.1 Диаграмма классов. 18 3.2.2 Диаграмма объектов. 20 3.2.3 Диаграмма состояний и переходов. 22 3.2.4 Диаграмма взаимодействия. 26 3.3 Объектно-ориентированное программирование. 28 3.3.1 Диаграмма модулей. 30 3.3.2 Диаграмма процессов. 32 3.3.3 Протоколы классов. 34 Выводы.. 38 Перечень ссылок. 39 Приложение А. Техническое задание. 40 Приложение Б. Руководство пользователя. 45 Приложение В. Экранные формы.. 46 Приложение Г. Листинг программы.. 47  

Приложение Е

Пример оформления листа «Перечень обозначений, символов, единиц, сокращений и терминов»

Перечень обозначений, символов, единиц, сокращений и терминов
ООП Объектно-ориентированное программирование
ОО Объектно-ориентированный
ООА Объектно-ориентированный анализ
CRC Class-Responsibilities-Collaborators
UML Unified Modeling Language
ПП Программный продукт
ПО Программное обеспечение
ПрО Предметная область
     
     
     
     
     
     

 

 


Приложение Ж

Пример оформления Технического задания

Приложение А

ТЕХНИЧЕСКОЕ ЗАДАНИЕ

А.1 Общие сведения

Тема курсового проекта: «Имитационное моделирование динамических систем и процессов с использованием объектно-ориентированного подхода. <название предметной области>».

Система проектируется студентом 2-го курса (назвапние университета) факультета КНТ, группы <название группы, ФИО>.

Основанием для разработки ПП является задание, выданное кафедрой ПОИС. Плановый срок начала работы по созданию системы имитационного моделирования: <дата выдачи>, срок окончания: <дата защиты>. Курсовой проект должен выполняться согласно графику, приведенному в таблице А.1.

Таблица А.1 – Этапы, результаты и сроки разработки ПП

Этап работы Результат работы Срок выполнения (№ недели)

Модуль 1

1 Получение задания на КП Задание на разработку (1 стр.) 1-2
2 Выявление требований к разрабатываемому программному продукту Техническое задание (3-5 стр.) 3-4
3 Проведение ОО анализа предметной области Словарь предметной области. Сценарии использования системы. ОО словарь предметной области. 3-4
4 Проведение ОО проектирования Диаграммы классов, объектов 5-6
5 Проведение ОО проектирования Диаграммы состояний и переходов, взаимодействия 7-8
6 Проведение ОО проектирования Диаграммы модулей, процессов 10-11
7 Проектирование протоколов классов Протоколы классов 12-13
8 Реализация классов Описание реализации классов 12-13

           

Продолжение таблицы А.1

Этап работы Результат работы Срок выполнения (№ недели)

Модуль 2

9 Реализация и отладка программы. Проведение тестирования ПП. Текст программы. Описание программы и тестов.   13-14
10 Проведение имитационного моделирования, получение статистики работы. Экранные формы (1-2 стр.). Руководство пользователя (1 стр.). 13-14
11 Оформление пояснительной записки и сопроводительных материалов. Прошитая ПЗ с CD-ROM (30-50 стр.), сдается преподавателю лично не позже чем за 3 дня до защиты КП. 14
12 Защита курсового проекта   15-17

А.2 Назначения и цели создания программы

Данный программный продукт предназначен для имитации работы динамического объекта реального мира – <объект предметной области> и получение статистических данных <каких? для чего?>.

А.3 Характеристика объекта автоматизации

<Описание предметной области в соответствии с заданием на КП>

А.4 Требования к программному продукту

А.4.1 Требования к системе в целом

В целом к системе предъявляются следующие требования:

а) имитация работы <чего?>;

б) вывод статистики: <какой?>;

А.4.2 Требования к задачам и функциям программного продукта

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

а) ввод начальных параметров для моделирования;

б) вывод характеристик объектов на каждом шаге моделирования на экран;

в) вывод результатов моделирования на экран и в файл.

А.4.3 Требования к техническому обеспечению

К техническому обеспечению предъявляются следующие требования:

а) процессор – 32-битный x86-совместимый (уровня Pentium и выше);

б) объем оперативной памяти – не менее 32Мб;

в) свободное дисковое пространство – около 10 Мб. Не менее 5 Мб свободного дискового пространства для временных файлов;

г) графический адаптер – VGA-совместимый;

д) монитор –VGA-совместимый;

е) клавиатура.

А.4.4 Требования к программному обеспечению

Для стабильной работы к программному обеспечению предъявляется следующее требования:

а) обеспечить удобный и понятный пользовательский интерфейс;

б) реализовать программу в виде отдельных классов;

в) организовать защиту от некорректного ввода начальных параметров;

г) обеспечить надежное хранение информации.

Программным обеспечением для проектирования программы является CASE-средство [CS Odessa Concept Draw | IBM Rational Rose | Microsoft Visio | <другая>], а для разработки – Microsoft Visual Studio <поставить свою версию 6, 2003, 2005, 2008, Express Edition>. Для запуска программы необходимо наличие операционной системы Windows  <поставить свою версию 9x, 2000, NT, XP, Vista, 7>[, и соответствующих библиотек Microsoft Visual C++ Redistributable].

А.4.5 Требования к организационному обеспечению

В программную документацию должны входить:

а) пояснительная записка;

б) приложения:

‒ техническое задание;

‒ руководство пользователя;

‒ экранные формы;

‒ листинг программы.

А.4.6 Требования к комплекту поставки ПП

Программный продукт поставляется с пояснительной запиской к курсовому проекту в файле ПЗ.doc, руководством пользователя в файле Help.doc, исходными кодами в виде проекта среды разработки в папке SRC, исполнительным файлом программы start.exe и файлом с данными о разработчике readme.txt.


Приложение З

Пример оформления листинга программы

Приложение Г

Листинги программных модулей

В данном приложении приводятся листинги всех модулей в соответствии с диаграммой модулей (рис. 5.23).

Г.1 Листинг модуля ElectricalAppliance.h

Модуль содержит протокол класса ElectricalAppliance.

 

#pragma once                       // один проход при компиляции

 

class ElectricalAppliance abstract // класс электроприбор - абстрактный класс

{

protected:                         // защищенные члены класса

  bool state;             // состояние

 

public:                            // открытые члены класса

  ElectricalAppliance();       // конструктор по умолчанию

  ~ElectricalAppliance();      // деструктор

  bool GetState();             // геттер для состояния

  void On();                   // включить

  void Off();                  // выключить

  virtual void Imitate() = 0; // имитировать работу в течении еденицы времени

                             // чисто виртуальная функция

};

Г.2 Листинг модуля ElectricalAppliance.cpp

Модуль содержит реализацию (тело) класса ElectricalAppliance.

 

#include "ElectricalAppliance.h"

 

ElectricalAppliance::ElectricalAppliance()

{

  state = false; // по умолчанию прибор выключен

}

 

ElectricalAppliance::~ElectricalAppliance() {}

 

bool ElectricalAppliance::GetState()

{

  return this->state;

}

 

void ElectricalAppliance::On()

{

  this->state = true;

}

 

void ElectricalAppliance::Off()

{

  this->state = false;

}

Г.3 Листинг модуля Button.h

Модуль содержит протокол класса Button.

 

#pragma once

 

#include "ElectricalAppliance.h"   // используется класс электроприбор

 

class Button :                     // класс кнопка

  public ElectricalAppliance // наследует электроприбор

{

public:

  Button();

  ~Button();

  void Push();                 // нажать

  void Imitate();              // перегруженный метод имитации работы

};

Г.4 Листинг модуля Button.cpp

Модуль содержит реализацию (тело) класса Button.

 

#include "Button.h"

 

Button::Button() {}

 

Button::~Button() {}

 

void Button::Push()

{

  this->On();    // кнопка - электроприбор и при нажатии она включается

}

 

void Button::Imitate()

{

  if (this->GetState()) // кнопка без фиксации

        this->Off();   // работает мгновенно в момент нажатия

}

Г.5 Листинг модуля Lamp.h

Модуль содержит протокол класса Lamp.

 

#pragma once

 

#include "ElectricalAppliance.h"

 

class Lamp :                       // класс лампа

  public ElectricalAppliance // наследует эклетроприбор

{

public:

  Lamp();

  ~Lamp();

  void Imitate();

};

Г.6 Листинг модуля Lamp.cpp

Модуль содержит реализацию (тело) класса Lamp.

 

#include "Lamp.h"

 

Lamp::Lamp() {}

 

Lamp::~Lamp() {}

 

void Lamp::Imitate() {}

Г.7 Листинг модуля PowerElement.h

Модуль содержит протокол класса PowerElement.

 

#pragma once

 

#include "ElectricalAppliance.h"

 

class PowerElement :               // класс силовой элемент

  public ElectricalAppliance // наследует класс электроприбор

{

protected:

  int workTime;         // время работы

public:

  PowerElement();

  ~PowerElement();

  void Imitate();

  int GetWorkTime();           // геттер времени работы

};

Г.8 Листинг модуля PowerElement.cpp

Модуль содержит реализацию (тело) класса PowerElement.

 

#include "PowerElement.h"

 

PowerElement::PowerElement()

{

  workTime = 0; // время работы по умолчанию

}

 

PowerElement::~PowerElement() {}

 

void PowerElement::Imitate()

{

  if (state)     // если прибор работает

        workTime++; // подсчитываем его время

}

 

int PowerElement::GetWorkTime()

{

  return workTime;

}

Г.9 Листинг модуля Speaker.h

Модуль содержит протокол класса Speaker.

 

#pragma once

 

#include "ElectricalAppliance.h"

 

class Speaker :                    // класс спикер

  public ElectricalAppliance // наследует электроприбор

{

protected:

  int beepTime;         // продолжительность звучания

public:

  Speaker();

  ~Speaker();

  void Beep();                 // издавать звуковой сигнал

  void Imitate();

};

Г.10 Листинг модуля Speaker.cpp

Модуль содержит реализацию (тело) класса Speaker.

 

#include "Speaker.h"

 

Speaker::Speaker(void)

{

  beepTime = 0;  // время звучания по умолчанию

}

 

Speaker::~Speaker(void) {}

 

void Speaker::Beep()

{

  this->beepTime = 3;   // сигнал будет звучать 3 ед. времени

  this->On();                      

}

 

void Speaker::Imitate()

{

  if (GetState())       // если прибор работает

  {

        if (beepTime == 0) // время звучания истекло

               Off();  // выключаем прибор

        beepTime--;    // уменьшаем время звучания

  }

}

Г.11 Листинг модуля Timer.h

Модуль содержит протокол класса Timer.

 

#pragma once

 

#include "ElectricalAppliance.h"

 

class Timer :                      // класс таймер

  public ElectricalAppliance // наследует электроприбор

{

public:

  int time;                          // время отсчета

  Timer();

  ~Timer();

  void Imitate();

};

Г.12 Листинг модуля Timer.cpp

Модуль содержит реализацию (тело) класса Timer.

 

#include "Timer.h"

 

Timer::Timer(void)

{

  time = 0;             // время отсчета по умолчанию

}

 

Timer::~Timer(void) {}

 

void Timer::Imitate()

{

  if (GetState())       // если прибор работает

  {

        if (time == 0) // если время истекло

               Off();  // выключаем прибор

        time--;        // ведем обратный отсчет

  }

}

Г.13 Листинг модуля Door.h

Модуль содержит перечисление состояний и протокол класса Door.

 

#pragma once

 

enum DoorStates              // состояние дверцы

{

  Opened,               // открыта

  Closed                // закрыта

};

 

class Door                   // класс дверь

{

protected:

  DoorStates state;     // текущее состояние двери

 

public:

  Door();                                       

  ~Door();

  DoorStates GetState(); // геттер для состояния

  void Open();          // открыть дверь

  void Close();  // закрыть дверь

};

Г.14 Листинг модуля Door.cpp

Модуль содержит реализацию (тело) класса Door.

 

#include "Door.h"

 

Door::Door()

{

  state = Closed;       // по умолчанию дверь закрыта

}

 

Door::~Door() {}

 

DoorStates Door::GetState()

{

  return state;

}

 

void Door::Open()

{

  state = Opened;

}

 

void Door::Close()

{

  state = Closed;

}

Г.15 Листинг модуля HouseholdAppliance.h

Модуль содержит протокол класса HouseholdAppliance.

 

#pragma once

 

class HouseholdAppliance           // класс кухонный прибор

{

public:

  HouseholdAppliance();

  ~HouseholdAppliance();

  virtual void Imitate() = 0;        // имитировать работу в течении еденицы времени

                                                       // чисто виртуальная функция

};

Г.16 Листинг модуля HouseholdAppliance.cpp

Модуль содержит реализацию (тело) класса HouseholdAppliance.

 

#include "HouseholdAppliance.h"

 

HouseholdAppliance::HouseholdAppliance(void) {}

 

HouseholdAppliance::~HouseholdAppliance(void) {}

Г.17 Листинг модуля MicrowaveOven.h

Модуль содержит структуру статистики работы и протокол класса MicrowaveOven.

 

#pragma once

 

#include <iostream>                // работа с потоками ввода/вывода

#include "ElectricalAppliance.h"

#include "HouseholdAppliance.h"

#include "Button.h"

#include "Door.h"

#include "Timer.h"

#include "Lamp.h"

#include "PowerElement.h"

#include "Speaker.h"

 

struct Statistics                  // статистика работы печи

{

  int powerElementWorkTime,    // время работы силового элемента

        readyCount,           // количество готовых блюд

        interruptCount;   // количество прерываний приготовления

};

 

class MicrowaveOven :              // класс микроволновая печь

  public ElectricalAppliance,  // наследует электроприбор

  public HouseholdAppliance    // и кухонный прибор

{

protected:                   // защищенные члены - невозмодно воздействие извне

  Timer timer;                 // таймер

  Lamp lamp;                   // лампа

  PowerElement powerElement; // силовой элемент

  int interruptCount;

  int readyCount;

  void StartCooking();         // начать процесс приготовления

  void StopCooking();          // процесс приготовления завершен

 

public:                      // открытые члены класса

  Button button;               // кнопка

  Door door;                   // дверь

  Speaker speaker;             // спикер

  MicrowaveOven();

  ~MicrowaveOven();

  void Imitate();       // имитировать работу в течении еденицы времени

  Statistics GetStatistics();  // получить статистику работы печи

  // перегруженный оператор вывода экземпляра класса в поток

  // используется для вывода состояния печи на каждом шаге

  friend std::ostream& operator << ( // реализовывается как друг  возврашает поток вывода

        std::ostream& s,             // поток вывода

        MicrowaveOven& mo);          // экземпляр класса

};

Г.18 Листинг модуля MicrowaveOven.cpp

Модуль содержит реализацию (тело) класса MicrowaveOven.

 

#include "MicrowaveOven.h"

 

MicrowaveOven::MicrowaveOven()

{

  interruptCount = 0;   // значения по умолчанию

  readyCount = 0;

}

 

MicrowaveOven::~MicrowaveOven() {}

 

void MicrowaveOven::StartCooking()

{

  timer.time = 60;      // устанавливаем время приготовления

  timer.On();           // включается таймер

  powerElement.On();    // включается силовой элемент

  lamp.On();            // включается лампа

}

 

void MicrowaveOven::StopCooking()

{

  powerElement.Off();   // выключается силовой элемент

  lamp.Off();           // выключается лампа

  speaker.Beep();       // издается звуковой сигнал

  timer.time = 0;       // печь готова к приготовлению следующего блюда

}

 

void MicrowaveOven::Imitate()

{

  if (GetState())       // если печь включена в сеть электропитания

  {

        if (door.GetState() == Closed) // если дверь закрыта

        {

               if (timer.time == -1) // если время истекло

               {

                      StopCooking(); // останавливается процесс приготовления

                      readyCount++; // увеличивается число приготовленных блюд

               }

               else if (timer.time == 0)    // если процесс приготовления пищи еще не начался

               {

                      lamp.Off();           // лампа выключается

                      if (button.GetState()) // если нажали кнопку

                             StartCooking(); // начать процесс приготовления

               }

               else                  // идет процесс приготовления пищи

               {

                      if (button.GetState()) // нажали кнопку

                             timer.time += 60; // увеличивается время приготовления на 60 секунд

               }

        }

        else                          // дверь открыта

        {

               if (timer.GetState())        // если таймер ведет отсчет

               {

                      powerElement.Off();   // выключается силовой элемент

                      timer.time = 0;       // сбрасывается таймер

                      timer.Off();          // выключается таймер

                      interruptCount++;     // число прерываний приготовления

               }

               lamp.On();                   // включается лампа

        }

 

        button.Imitate();     // имитируется работа всех компонентов печи

        speaker.Imitate();

        powerElement.Imitate();

        lamp.Imitate();

        timer.Imitate();

  }

}

 

Statistics MicrowaveOven::GetStatistics()

{

  Statistics stat;             // формируем выходную статистику

  stat.powerElementWorkTime = powerElement.GetWorkTime();

  stat.readyCount = readyCount;

  stat.interruptCount = interruptCount;

  return stat;

}

 

std::ostream& operator << (std::ostream& s, MicrowaveOven& mo)

{

  if (mo.button.GetState())

        s << "button is pushing" << std::endl;

  if (mo.door.GetState() == Closed)

        s << "door is closed" << std::endl;

  else

        s << "door is opened" << std::endl;

  if (mo.lamp.GetState())

        s << "lamp is on" << std::endl;

  else

        s << "lamp is off" << std::endl;

  if (mo.powerElement.GetState())

        s << "power element is on" << std::endl;

  else

        s << "power element is off" << std::endl;

  if (mo.timer.GetState())

        s << " and it will work " << mo.timer.time << " seconds" << std::endl;

  if (mo.speaker.GetState())

        s << "food is ready" << std::endl;

  return s;

}

Г.19 Листинг модуля Random.h

Модуль содержит протокол класса Random.

 

#pragma once

 

class Random                       // класс ГСЧ

{

public:

  Random();

  ~Random();

  static void Initialize();   // инициализация ГСЧ

  static float Uniform(        // равномерный закон

        float Min,            // левая граница отрезка

        int Max);             // правая граница отрезка

  static float Normal(         // нормальный закон

        float M,              // матожидание

        float D);             // дисперсия

};

Г.20 Листинг модуля Random.cpp

Модуль содержит реализацию (тело) класса Random.

 

#include "Random.h"

#include <stdlib.h>                // стандартная библиотека

#include <time.h>                  // работа с временем

#include <math.h>                  // мат. функции

 

Random::Random() {}

 

Random::~Random() {}

 

void Random::Initialize()

{

  srand((unsigned)time(NULL)); // в качестве инициализирующего значения берется текущее значение времени

}

 

float Random::Uniform(float Min, int Max)

{

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

  return Min + (float)rand() / RAND_MAX * (Max - Min);

}

 

float Random::Normal(float M, float D)

{

  // приближенное моделирование нормального закона по центральной предельной теореме

  return M + sqrt(D) * (Uniform(-1, 1) + Uniform(-1, 1) + Uniform(-1, 1) + Uniform(-1, 1) + Uniform(-1, 1) + Uniform(-1, 1) + Uniform(-1, 1) + Uniform(-1, 1) + Uniform(-1, 1) + Uniform(-1, 1)) / 10.0;

}

Г.21 Листинг модуля Man.h

Модуль содержит протокол класса Man.

 

#pragma once

 

#include "MicrowaveOven.h"

 

class Man             // класс человек

{

protected:            // защищенные члены класса

  int timeToAction; // время до взаимодействия с печью

public:               // открытые члены класса

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

  ~Man();        // детсруктор

  void Imitate( // имитировать деятельность в течении еденицы времени

        MicrowaveOven&); // используется печь

};

Г.22 Листинг модуля Man.cpp

Модуль содержит реализацию (тело) класса Man.

 

#include "Man.h"

#include "Random.h"

 

Man::Man(void)

{

  Random::Initialize();              // инициализация ГСЧ

  timeToAction = (int)Random::Normal( // время до воздействия на печь распределено нормально

        60,                          // с матожиданием

        30);                         // и дисперсией

}

 

Man::~Man(void) {}

 

void Man::Imitate(MicrowaveOven& mo)

{

  if (timeToAction == 0)       // если настало время для взаимодействия

  {

        if (Random::Uniform(0, 1) >= 0.5) // кидаем монетку - если орел

               mo.button.Push();            // нажимаем кнопку

        else                               // иначе трогаем дверь

        {

               if (mo.door.GetState() == Closed) // если закрыта

                      mo.door.Open();              // открываем

               else                               // иначе

                      mo.door.Close();             // закрываем

        }

        timeToAction = (int)Random::Normal(60, 30); // время до нового взаимо

  }

  else

        timeToAction--;       // ведем отсчет времени

}

Г.23 Листинг модуля Imitation.cpp

Модуль содержит реализацию функции Main.

 

#include <iostream>                // работа с потокам ввода/вывода

#include "MicrowaveOven.h"

#include "Man.h"

 

using namespace std;               // подключаем стандартное пространство имен

 

int main(int argc, char* argv[])

{

  cout << "Start modeling" << endl;

  MicrowaveOven mo;            // микроволновая печь

  cout << "Microwave Oven \"mo\" created" << endl;

  Man man;                     // человек

  cout << "Man man created" << endl;

  mo.On();                     // включаем печь

  cout << "\"mo\" turned on" << endl;

  cout << "Start modeling" << endl;

  for (int i = 0; i < 600; i++) // моделирование работы системы в течении 10 минут

  {

        cout << "second #" << i << endl;

        man.Imitate(mo);      // моделирование работы человека

        cout << mo;           // вывод состояния печи

        mo.Imitate();  // моделирование работы печи     

        cout << endl;

  }

  mo.Off();                    // выключаем печь

  Statistics stat = mo.GetStatistics(); // получаем и выводим статистику

  cout << "Power element has worked " << stat.powerElementWorkTime << " seconds" << endl;

  cout << stat.readyCount << " cooking are ready" << endl;

  cout << stat.interruptCount << " cooking was interrupted" << endl;

  cout << "\"mo\" turned off" << endl;

  cout << "Modeling completed" << endl;

  cin.get();                   // задержка

  return 0;

}


Приложение И

Пример оформления экранных форм

Приложение В

Экранные формы

На рисунке В.1 показано начало имитационного моделирования работы системы, а на рисунке В.2 – вывод состояния объекта на каждом шаге моделирования, окончание моделирования и вывод собранной статистики.


Рисунок В.1 – Начало моделирования


Рисунок В.2 – Окончание моделирования










Последнее изменение этой страницы: 2018-05-31; просмотров: 250.

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