Файл stove.Cpp

Пример. Работа с микроволновой печью.

Описание системы:

1) имеется единственная кнопка управления, которая доступна для пользователя печи. Если дверь печи закрыта, и пользователь нажимает кнопку, то печь будет готовить пищу в течение 1 минуты;

2) если пользователь нажимает на кнопку во время работы печи, получаем дополнительную минуту работы;

3) если дверь открыта, нажатие кнопки не имеет эффекта ;

4) внутри печи есть электролампа, во время работы она должна быть включена; когда дверь печи открыта, электролампа должна быть включена;

5) можно приостановить процесс приготовления пищи открытием двери, в этом случае время сбрасывается;

6) начальная конфигурация: дверь закрыта, лампа погашена;

7) если время истекло, выключается питание и электролампа.

Функцию управления берет на себя пользователь, то есть управление осуществляется с клавиатуры.

Идентификаторы состояния:

1) включена/выключена электролампа;

2) включено/выключено электропитание;

3) открыта/закрыта дверь;

4) сколько времени осталось до конца приготовления пищи.

Электролампа Дверь Питание
Невозможный набор

Необходимые функции (сообщения):

1) нажать кнопку;

2) изменить положение двери;

3) пища готова.

Файл stove.h

enum state {on, off}; //определение типа для элемента, поддерживающего состояние включён/выключен

enum door {open, close}; //определение типа для элемента, поддерживающего состояние открыт/закрыт

class stove

{ state curr_lamp; //поле для описания состояния лампы

door curr_door; //поле для описания состояния двери

state curr_power; //поле для описания состояния питания

int time; //время, оставшееся до конца приготовления еды

void take_door(void); //метод, изменяющий положение двери

void push_button(void); //метод, обрабатывающий работы с питанием микроволновой печи

void ready(void); //метод, обрабатывающий окончание приготовления еды

public:

stove(); //конструктор, задёт начальные параметры

void Run(); //метод, обрабатывающий взаимодействие пользователя с печью

};

файл stove.cpp

#include <stdio.h>

#include <conio.h>

#include <windows.h>

#include "stove.h"

void menu() //выводит на экран меню

{

printf("\n%b - нажать кнопку для приготовления еды\n");

printf("d - открыть/закрыть дверь\n");

printf("ESC - выход\n\n");

}

stove::stove()

{

//начальноге состояние:

curr_lamp=off; //лампа выключена

curr_door=close; //дверь закрыта

curr_power=off; //питание выключено

time=-1; //еда не готовится

}

void stove::take_door(void)

{

if (curr_door==open) //если дверь открыта

{ curr_door=close; //закрываем дверь

curr_lamp=off; //выключаем лампу

printf("Дверь закрыта\n");

}

else //если дверь закрыта

{ curr_door=open; //открываем дверь

curr_lamp=on; //включаем лампу

printf("Дверь открыта\n");

if (curr_power==on) //если в момент открытия двери готовилась еда

{

printf("Процесс прерван\n");

time=-1; //сбрасываем счётчик времени

curr_power=off; //выключаем питание

}

}

return;

}

void stove::push_button(void)

{

if (curr_door==open) //если дверь открыта, еду готовить нельзя

printf("Закройте дверь!\n");

else //если дверь закрыта

{ if (curr_power==on) //если еда уже готовится

{ time+=60; //добавляем минуту

printf("Вам добавлена минута\n");

}

else //если еда не готовится

{ curr_power=on; //включаем питание

curr_lamp=on; //включаем лампу

time=60; //устанавливаем счётчик времени

printf("Еда готовится\n");

}

}

return;

}

void stove::ready(void)

{

//еда пригтовлена

curr_power=off; //выключаем питание

curr_lamp=off; //выключаем лампу

time=-1; //сбрасываем счётчик времени

printf("\aЕда готова\n");

}

void stove::Run(void)

{

int key;

do

{

while (!kbhit() && time>0) //в этот цикл заходим, если еда готовится;

условие выхода из цикла: нажата клавиша или истекло время приготовления еды

//функция kbhit() возвращает истину, если пользователь нажал клавишу

{

time--; //вычитаем секунду из времени, оставшегося до конца приготовления еды

Sleep(100); //задержка в 100 мс

printf("Осталось %d секунд\n",time);

}

if (time==0) //если еда закончила готовиться, вызываем метод ready()

ready();

menu();

key=getch();

switch (key)

{ case 'b': push_button(); break;

case 'd': take_door(); break;

}

fflush(stdin);

}

while(key!=27);

return;

}

Наши рекомендации