Stavový automat pro pračku
cpp
#include <stdio.h> //knihovny
#include<stdlib.h>
#include <windows.h>
void barvy(int);
int predpirka();
int odstati();
int zdimani();
int teplota();
int odklad();
void tiskStavu();
void loading();
typedef enum{ //tvorba noveho datového typu stav_t, který bude moct nabývat hodnot konstant
KLID, //konstanty
ODKLAD,
ODSTATI,
OHREV,
PREDPIRKA,
PRANI,
ZDIMANI
} sta_v;
int Ppredpirka = 0;
int Podstati = 0;
int Pzdimani = 0;
int Pteplota = 0;
int Podklad = 0;
sta_v stav = KLID;
int main() //hlavní funkce
{
int i, rezim;
loading();
while(1)
{
system("cls");
barvy(0);
tiskStavu();
barvy(1);
printf("\n\t\tZvolte program: \n");
printf("\n\t\t1)""\tBavlna\n");
printf("\n\t\t2)""\tSyntetika\n");
printf("\n\t\t3)""\tJemna tkanina\n");
printf("\n\t\tVolba: \t");
scanf("%d", &rezim); //// uživatelský vstup
switch(rezim)
{
case 1:barvy(0); printf("\n\t\tProgram bude v rezimu Bavlny.\n");
break;
case 2:barvy(0); printf("\n\t\tProgram bude v rezimu Syntetika.\n");
break;
case 3:barvy(0); printf("\n\t\tProgram bude v rezimu Jemne tkaniny.\n");
break;
default:barvy(0); printf("\n\t\tBez programu.\n");
break;
}
Sleep(1000);
int Podklad = odklad();
int Pteplota = teplota();
int Ppredpirka = predpirka();
int Podstati = odstati();
int Pzdimani = zdimani();
if(Podklad != 0)
{ stav = ODKLAD;}
else if(Pteplota != 0)
{ stav = OHREV;}
else if(Ppredpirka != 0)
{ stav = PREDPIRKA;}
else if(Podstati != 0)
{ stav = ODSTATI;}
else
{ stav = PRANI;}
while(stav != KLID)
{
switch (stav)
{
case ODKLAD:
for( i = Podklad; i >=0; i--)
{
system("cls");
barvy(0); tiskStavu(); barvy(4);
printf("\n\t\tProgram zapocne za %d minut.\n", i);
Sleep(1000);
}
if(Pteplota != 0)
{ stav = OHREV;}
else if(Ppredpirka != 0)
{ stav = PREDPIRKA;}
else if(Podstati != 0)
{ stav = ODSTATI;}
else
{ stav = PRANI;}
break;
case OHREV:
for( i = 10; i <= Pteplota; i++)
{
system("cls");
barvy(0); tiskStavu(); barvy(4);
printf("\n\t\tTeplota vody nabiva %d stupnu celsia.\n", i);
Sleep(1000);
}
if(Ppredpirka != 0)
{ stav = PREDPIRKA;}
else if(Podstati != 0)
{ stav = ODSTATI;}
else
{ stav = PRANI;}
break;
case PREDPIRKA:
for( i = 0; i <= Ppredpirka; i++)
{
if(i == 2 || i ==4 || i ==6 || i ==8 || i ==10)
{system("cls"); barvy(0); tiskStavu(); barvy(4); printf("\n\t\tOtacim bubnem vpravo.\n");}
if(i == 1 || i ==3 || i ==5 || i ==7 || i ==9)
{system("cls"); barvy(0); tiskStavu(); barvy(4); printf("\n\t\tOtacim bubnem vlevo.\n");}
Sleep(1000);
}
if(Podstati != 0)
{ stav = ODSTATI;}
else
{ stav = PRANI;}
break;
case ODSTATI:
for( i = 10; i > Podstati; i--)
{
system("cls");
barvy(0); tiskStavu(); barvy(4);
printf("\n\t\tProgram pozastaven na %d minut.\n", i);
Sleep(1000);
}
Podstati = 0;
stav = PRANI;
break;
case PRANI:
for( i = 0; i < 10; i++)
{
if(i == 2 || i ==4 || i ==6 || i ==8 || i ==10)
{ system("cls"); barvy(0); tiskStavu(); barvy(4); printf("\n\t\tOtacim bubnem vlevo.\n");}
if(i == 1 || i ==3 || i ==5 || i ==7 || i ==9)
{system("cls"); barvy(0); tiskStavu(); barvy(4); printf("\n\t\tOtacim bubnem vpravo.\n");}
Sleep(1000);
}
if(Pzdimani != 0)
{ stav = ZDIMANI;}
else
{ stav = KLID;}
break;
case ZDIMANI:
for( i = 0; i < 10; i++)
{
if(i == 2 || i ==4 || i ==6 || i ==8 || i ==10)
{system("cls"); barvy(0); tiskStavu(); barvy(4); printf("\n\t\tZdimam vlevo %drpm.\n", Pzdimani);}
if(i == 1 || i ==3 || i ==5 || i ==7 || i ==9)
{system("cls"); barvy(0); tiskStavu(); barvy(4); printf("\n\t\tZdimam vpravo %drpm.\n", Pzdimani);}
Sleep(1000);
}
stav = KLID;
break;
default:
system("cls");
barvy(2);
printf("\n\t\tError! Machine has been corrupted.\n");
return -1;
}
}
}
return 0;
}
int odklad()
{
int odkl;
system("cls");
barvy(3);
printf("\n\t\tZvolte dobu odkladu\n");
printf("\n\t\t1)""\t10 minut\n");
printf("\n\t\t2)""\t15 minut\n");
printf("\n\t\t3)""\t30 minut\n");
printf("\n\t\t4)""\t60 minut\n");
printf("\n\t\t5)""\t90 minut\n");
printf("\n\t\t0)""\tBez odkladu\n");
printf("\n\t\tVyberte: \t");
scanf("%d", &odkl); // uživatelský vstup
switch(odkl)
{
case 1:barvy(0); printf("\n\t\tDoba odkladu je 30 minut.\n"); odkl=10;
break;
case 2:barvy(0); printf("\n\t\tDoba odkladu je 60 minut.\n"); odkl=15;
break;
case 3:barvy(0); printf("\n\t\tDoba odkladu je 90 minut.\n"); odkl=30;
break;
case 4:barvy(0); printf("\n\t\tDoba odkladu je 120 minut.\n"); odkl=60;
break;
case 5:barvy(0); printf("\n\t\tDoba odkladu je 150 minut.\n"); odkl=90;
break;
default:barvy(0); printf("\n\t\tPokracujte bez odkladu.\n"); odkl=0;
break;
}
Sleep(1000);
return odkl;
}
int teplota()
{
int temp;
system("cls");
barvy(2);
printf("\n\t\tZvolte teplotu vody\n");
printf("\n\t\t1)""\tTeplota vody 20 stupnu.\n");
printf("\n\t\t2)""\tTeplota vody 40 stupnu.\n");
printf("\n\t\t3)""\tTeplota vody 60 stupnu.\n");
printf("\n\t\t4)""\tTeplota vody 90 stupnu.\n");
printf("\n\t\tVyberte: \t");
scanf("%d", &temp); // uživatelský vstup
switch(temp)
{
case 1: barvy(0); printf("\n\t\tVybrali jste teplotu 30 stupnu.\n"); temp=20;
break;
case 2: barvy(0); printf("\n\t\tVybrali jste teplotu 40 stupnu.\n"); temp=40;
break;
case 3: barvy(0); printf("\n\t\tVybrali jste teplotu 60 stupnu.\n"); temp=60;
break;
case 4: barvy(0); printf("\n\t\tVybrali jste teplotu 90 stupnu.\n"); temp=90;
break;
default: barvy(0); printf("\n\t\tNastavena hodnota teploty na 40 stupnu.\n"); temp=40;
break;
}
Sleep(1000);
return temp;
}
int predpirka()
{
int predp;
system("cls");
barvy(2);
printf("\n\t\tPrejete si pradlo predeprat?\n");
printf("\n\t\t1)""\tAno\n");
printf("\n\t\t2)""\tNe\n");
printf("\n\t\tVyberte: \t");
scanf("%d", &predp); // uživatelský vstup
switch(predp)
{
case 1:barvy(0); printf("\n\t\tPradlo bude predeprano.\n"); predp=10;
break;
case 2:barvy(0); printf("\n\t\tPokracujte bez predeprani.\n"); predp=0;
break;
default:barvy(0); printf("\n\t\tPokracujte bez predeprani.\n"); predp=0;
break;
}
Sleep(1000);
return predp;
}
int odstati()
{
int odst;
system("cls");
barvy(3);
printf("\n\t\tPrejete si pradlo nechat odstat?\n");
printf("\n\t\t1)""\tAno\n");
printf("\n\t\t2)""\tNe\n");
printf("\n\t\tVyberte: \t");
scanf("%d", &odst); // uživatelský vstup
switch(odst)
{
case 1:barvy(0); printf("\n\t\tBude provedeno odstani programu.\n"); odst=0;
break;
case 2:barvy(0); printf("\n\t\tPokracujte bez odstani.\n"); odst=10;
break;
default:barvy(0); printf("\n\t\tPokracujte bez odstani.\n");odst=10;
break;
}
Sleep(1000);
return odst;
}
int zdimani()
{
int zdim;
system("cls");
barvy(4);
printf("\n\t\tZvolte otacky pri zdimani\n");
printf("\n\t\t1)""\t200\n");
printf("\n\t\t2)""\t400\n");
printf("\n\t\t3)""\t600\n");
printf("\n\t\t4)""\t800\n");
printf("\n\t\t5)""\t1000\n");
printf("\n\t\t0)""\tBez zdimani\n");
printf("\n\t\tVyberte: \t");
scanf("%d", &zdim); // uživatelský vstup
switch(zdim)
{
case 1:barvy(0); printf("\n\t\tZdimani bude provedeno pri 200rpm.\n"); zdim=200;
break;
case 2:barvy(0); printf("\n\t\tZdimani bude provedeno pri 400rpm.\n"); zdim=400;
break;
case 3:barvy(0); printf("\n\t\tZdimani bude provedeno pri 600rpm.\n"); zdim=600;
break;
case 4:barvy(0); printf("\n\t\tZdimani bude provedeno pri 800rpm.\n"); zdim=800;
break;
case 5:barvy(0); printf("\n\t\tZdimani bude provedeno pri 1000rpm.\n"); zdim=1000;
break;
default:barvy(0); printf("\n\t\tPokracujte bez zdimani.\n"); zdim=0;
break;
}
Sleep(1000);
return zdim;
}
void tiskStavu()
{
barvy(0);
switch (stav){
case KLID:
printf("\n\t\tKLID\n");
break;
case ODKLAD:
printf("\n\t\tODKLAD\n");
break;
case ODSTATI:
printf("\n\t\tODSTATI\n");
break;
case OHREV:
printf("\n\t\tOHREV\n");
break;
case PREDPIRKA:
printf("\n\t\tPREDPIRKA\n");
break;
case PRANI:
printf("\n\t\tPRANI\n");
break;
case ZDIMANI:
printf("\n\t\tZDIMANI\n");
break;
}
}
void barvy(int barvy)
{
switch(barvy)
{
case -1: // black
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0);
break;
case 0: // white on black
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
break;
case 1: // green on black
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |
FOREGROUND_GREEN);
break;
case 2: // red on black
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |
FOREGROUND_RED);
break;
case 3: // blue on black
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |
FOREGROUND_BLUE);
break;
case 4: // yellow on black
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |
FOREGROUND_GREEN | FOREGROUND_RED);
break;
default : // white on black
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
break;
}
}
void loading()
{
system("cls");
printf("\n\n\n\n\n\n\n");
barvy(0);
printf("\n\t\t\tVita Vas inteligentni pracka\n");
printf("\n\n\n\n\n\n\n");
FILE *soubor;
barvy(1);
soubor = fopen("load.txt","r");
char radek[5000];
int i;
while ((fscanf(soubor, "%[^\n]", radek)) != EOF)
{
fgetc(soubor);
printf("%s \n", radek);
}
sleep(1);
barvy(4);
printf("\t\t____________________________________________\n\t\t");
barvy(2);
for(i=0;i<22;i++)
{
printf("||");
sleep(1);
}
fclose(soubor);
barvy(0);
sleep(1);
system("cls");
}
Neformátovaný
Přidáno: 29.4.2017
Expirace: Neuvedeno