- •Введение
- •1 Цели и задачи курсового проектирования
- •2 Организация курсового проектирования
- •3 Задание на курсовое проектирование
- •4 Структура пояснительной записки
- •4.1 Типовая структура
- •4.5 Раздел «Постановка задачи»
- •4.6 Раздел «Выбор метода решения»
- •4.2 Титульный лист
- •4.3 Лист задания
- •4.4 Раздел «Введение»
- •5 Метод
- •5.1 Объектно-ориентированный анализ
- •5.2 Объектно-ориентированное проектирование
- •5.2.1 Диаграммы классов
- •5.2.2 Диаграммы объектов
- •5.2.3 Диаграммы состояний и переходов
- •5.2.4 Диаграммы взаимодействия
- •5.3 Объектно-ориентированное программирование
- •5.3.1 Диаграммы модулей
- •5.3.2 Диаграммы процессов
- •5.3.3 Протоколы классов
- •Часть 1. Работа с оо словарем ПрО.
- •Часть 2. Работа с crc-карточками.
- •Часть 3. Работа с диаграммой классов.
- •Часть 4. Определение модификаторов доступа, типов данных и начальных значений.
- •Часть 5. Реализация методов.
- •Часть 6. Распределение классов по модулям.
- •Часть 7. Реализация многопоточности.
- •5.3.4 Реализация модуля главной программы
- •6 Указания по оформлению материалов курсового проекта
- •6.1 Требования к оформлению пояснительной записки
- •6.2 Требования к оформлению программного продукта
- •Перечень ссылок
- •Приложение а Тематика курсовых проектов
- •Приложение б Пример оформления титульного листа
- •Приложение в Пример оформления листа задания на курсовое проектирование
- •Приложение г Пример оформления листа «Реферат»
- •Приложение д Пример оформления листа «Содержание»
- •Приложение е Пример оформления листа «Перечень обозначений, символов, единиц, сокращений и терминов»
- •Приложение ж Пример оформления Технического задания
- •Приложение з Пример оформления листинга программы Приложение г Листинги программных модулей
- •Приложение и Пример оформления экранных форм
Приложение з Пример оформления листинга программы Приложение г Листинги программных модулей
В данном приложении приводятся листинги всех модулей в соответствии с диаграммой модулей (рис. 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;
}
