Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Automat na pití

cpp

#include <stdio.h>                                  //soubory knihoven
#include <stdlib.h>
#include <windows.h>

int volba;                                          //deklarace uživatelského vstupu pro výběr nápoje
int c_napoje;                                       //deklarace ceny nápoje
int zb_kavy = 10;                                   //deklarace zásob jednotlivých nápojů
int zb_kapu = 10;
int zb_late = 10;
int zb_coko = 10;
int zb_caje = 10;

int cukr;                                           //deklarace uv. pro výběr množství cukru
int c_cukr;                                         //deklarace přídavné ceny cukru
int zb_cukru = 250;                                 //deklarace zásob cukru

int mleko;                                          //deklarace uv. pro výběr množství mléka
int c_mleka;                                        //deklarace přídavné ceny mléka
int zb_mleka = 500;                                 //deklarace zásob cukru

int cena;                                           //deklarace celkové ceny
int kredit;                                         //deklarace množství vložených peněz v automatu
int vratit;                                         //deklarace množství peněz k vrácení automatem

const char * vrtulka = "|/-";                      //deklarace konstantního řetezce znaků
const int kolikrat_zatocit = 50;                    //deklarace konstanty, která říká, kolikrát se má vrtulka změnit

typedef enum {                                      //tvorba noveho datového typu stav_t, který bude moct nabývat hodnot konstant
    VYBER,                                          //konstanty
    CUKR,
    MLEKO,
    PLATBA,
    PRIPRAVA,
    VYROBA,
    VRACENI,
} stav_t;

int main(){                                         //hlavní funkce

    stav_t vyber();                           //pocatecni stav
    while (1){                                      //nekonečná smyčka
        switch (VYBER){
        case VYBER:
            stav_t vyber();                         // vklada do stavu funkci vyber
            Sleep(100);                            //po provedeni vyberu uspi na 2 s a while necha probehnout switch znova s novou hodnotou stavu
            break;
        case CUKR:
            stav_t(CUKR);
            Sleep(100);
            break;
        case MLEKO:
            stav_t(MLEKO);
            Sleep(100);
            break;
        case PLATBA:
            stav_t(PLATBA);
            Sleep(100);
            break;
        case VYROBA:
           stav_t(VYROBA);
            Sleep(100);
        case VRACENI:
            stav_t(VRACENI);
            Sleep(500);
            break;
        }
    }
   
    return 0;
}

stav_t vyber(){                                     //Vyber napoje
    printf("\n\n/////////////\tVYBER NAPOJE\t/////////////\n\n\n");
    printf("Zvolte napoj z nabidky:\n1.Espresso\t\t 25 Kc\n2.Kapucino\t\t 23 Kc\n3.Latte machiate\t 27 Kc\n4.Horka cokolada\t 18 Kc\n5.Caj\t\t\t 10 Kc\n6.Horka voda\t\t 1  Kc\n");
    scanf("%d", &volba);                            // uživatelský vstup
    switch (volba) {
    case 1:                                         //kava
        if (zb_kavy > 0){                           //pokud existuji zasoby kafe tak umozni vyber kafe
            printf("Vybrali jste espresso.\n");
            c_napoje = 25;                          //určení ceny kafe
            printf("Cena=%d\n", c_napoje);
        }
        else{
            printf("Expresso doslo.\n");            //pokud neexistují zasoby kafe, tak přepisuje konstantu stav na VYBER
            return VYBER;
        }
        return CUKR;                                //přepisuje konstantu stav na CUKR
        break;
    case 2:                                         //kapučíno
        if (zb_kapu > 0){
            printf("Vybrali jste kapucino.\n");
            c_napoje = 23;
            printf("Cena=%d\n", c_napoje);
        }
        else{
            printf("Kapucino doslo.\n");
            return VYBER;
        }
        return CUKR;
        break;
    case 3:                                         //latte machiate
        if (zb_late > 0){
            printf("Vybrali jste latte machiate.\n");
            c_napoje = 27;
            printf("Cena=%d\n", c_napoje);
        }
        else{
            printf("Latte machiate doslo.\n");
            return VYBER;
        }
        return CUKR;
        break;
    case 4:                                         //čokoláda
        if (zb_coko > 0){
            printf("Vybrali jste cokoladu.\n");
            c_napoje = 18;
            printf("Cena=%d\n", c_napoje);
        }
        else{
            printf("Cokolada dosla.\n");
            return VYBER;
        }
        return CUKR;
        break;
    case 5:                                         //čaj
        if (zb_caje > 0){
            printf("Vybrali jste caj.\n");
            c_napoje = 10;
            printf("Cena=%d\n", c_napoje);
        }
        else{
            printf("Caj dosel.\n");
            return VYBER;
        }
        return CUKR;
        break;
    case 6:                                         //voda
        printf("Vybrali jste vodu.\n");
        c_napoje = 1;
        printf("Cena=%d\n", c_napoje);
        return CUKR;
        break;
    default:                                        //pokud uživatel zvolí hodnotu, která není v nabídce, přepisuje konstantu stav na VYBER
        printf("Neni v nabidce?\n");
        return VYBER;
        break;
    }
}
stav_t volba_cukru(){                               //Volba cukru
    printf("\n\n/////////////\tVYBER MNOZSTVI CUKRU\t/////////////\n\n\n");
    c_cukr = 0;                                         //implicitní cena cukru
    if (zb_cukru > 0){                                  //ověří jestli je vůbec cukr
        printf("Kolik si prejete cukru? 0-5-10-15-20-25 g\nPOZOR, za 25g se priplaci 1 Kc\n");
        scanf("%d", &cukr);                             //uv
        switch (cukr) {                                 //výběr možnosti za pomocí switche
        case 0:                                         //možnost bez cukru
            printf("Vybrali jste si moznost bez cukru.\n");
            return MLEKO;                               //přepisuje konstantu stav na MLEKO
            break;
        case 5:                                         //5g
            if (zb_cukru >= 5){                          //hlída množství zásob
                printf("Pridavam 5g cukru.\n");
                return MLEKO;
            }
            else{
                printf("Nedostatecne mnozstvi cukru.\n");
                return MLEKO;                                //přepisuje konstantu stav_t na MLEKO, protože cukr není
            }
            break;
        case 10:                                         //10g
            if (zb_cukru >= 10){
                printf("Pridavam 10g cukru.\n");
                return MLEKO;
            }
            else{
                printf("Nedostatecne mnozstvi cukru.\n");
                return CUKR;                                //přepisuje konstantu stav_t na CUKR, protože cukr je ale není ho tolik
            }
            break;
        case 15:                                         //15g
            if (zb_cukru >= 15){
                printf("Pridavam 15g cukru.\n");
                return MLEKO;
            }
            else{
                printf("Nedostatecne mnozstvi cukru.\n");
                return CUKR;
            }
            break;
        case 20:                                         //20g
            if (zb_cukru >= 20){
                printf("Pridavam 20g cukru.\n");
                return MLEKO;
            }
            else{
                printf("Nedostatecne mnozstvi cukru.\n");
                return CUKR;
            }
            break;
        case 25:                                         //25g
            if (zb_cukru >= 25){
                printf("Pridavam 25g cukru a uctuju 1 Kc.\n");
                c_cukr += 1;
                return MLEKO;
            }
            else{
                printf("Nedostatecne mnozstvi cukru.\n");
                return CUKR;
            }
            break;
        default:                                        //není v volbě ->znova vyběr cukru
            printf("Neni v nabidce.\n");
            return CUKR;                                //přepisuje konstantu stav_t na CUKR
            break;
        }
    }
    else{
        printf("Curk dosel.\n");                        //Provede se pokud cukr došel
        return MLEKO;
    }
}
stav_t volba_mleka(){                               //volba mleka
    printf("\n\n/////////////\tVYBER MNOZSTVI MLEKA\t/////////////\n\n\n");
    c_mleka = 0;                                    //implicitní cena mléka
    if (zb_mleka > 0){                                  //ověří jestli je vůbec mléko
        printf("\nKolik si prejete mleka? 0-10-20-30-40-50 ml\nPOZOR, za 50 ml mleka se priplaci 1 Kc\n");
        scanf("%d", &mleko);                            //uv
        switch (mleko) {                                //vyber pomoci switche
        case 0:                                         //0
            printf("Vybrali jste si moznost bez mleka.\n");
            return PLATBA;
            break;
        case 10:                                        //10 ml
            if (zb_mleka >= 10){                        //hlída množství zásob
                printf("Pridavam 10 ml mleka.\n");
                return PLATBA;
            }
            else{
                printf("Nedostatecne mnozstvi mleka.\n");
                return PLATBA;                          //přepisuje konstantu stav na PLATBU, protože mleko neni
            }
            break;
        case 20:                                        //20 ml
            if (zb_mleka >= 20){                        //hlída množství zásob
                printf("Pridavam 20 ml mleka.\n");
                return PLATBA;
            }
            else{
                printf("Nedostatecne mnozstvi mleka.\n");
                return MLEKO;                           //přepisuje konstantu stav na MLEKO, protože mleko může být, ale né dost velké množství
            }
            break;
        case 30:                                        //30 ml
            if (zb_mleka >= 30){
                printf("Pridavam 30 ml mleka.\n");
                return PLATBA;
            }
            else{
                printf("Nedostatecne mnozstvi mleka.\n");
                return MLEKO;
            }
            break;
        case 40:                                         //40 ml
            if (zb_mleka >= 40){
                printf("Pridavam 40 ml mleka.\n");
                return PLATBA;
            }
            else{
                printf("Nedostatecne mnozstvi mleka.\n");
                return MLEKO;
            }
            break;
        case 50:                                         //50 ml
            if (zb_mleka >= 50){
                printf("Pridavam 50 ml mleka a uctuju 1 Kc.\n");
                c_cukr += 1;                             //Učtování 1 Kč navíc
                return PLATBA;
            }
            else{
                printf("Nedostatecne mnozstvi mleka.\n");
                return MLEKO;
            }
            break;
        default:
            printf("Neni v nabidce.\n");
            return MLEKO;
            break;
        }
    }
    else{
        printf("Mleko doslo.\n");                        //Provede se pokud mleko doslo
        return PLATBA;
    }

}
stav_t platba(){                                    //platba
    printf("\n\n/////////////\tPLATBA\t/////////////\n\n\n");
    int vhozeno;                                    //deklarace částky aktuálně vhozené
    kredit = 0;                                     //počáteční stav kreditu
    cena = c_napoje + c_cukr + c_mleka;             //celková cena
    while (kredit < cena){                          //opakující se cyklus dokud kredit>=cena
        printf("\nVkladejte mince nominalni hodnoty 1, 2, 5, 10, 20 az do ceny napoje.\nPro storno zadejte 0\n");
        printf("cena napoje: %d\n", cena);          //požadovaná částka
        scanf("%d", &vhozeno);                      //uv
        switch (vhozeno) {                          //switch pro mince+storno požadavku
        case 0:
            printf("Stornuji volbu.\n");
            vratit = kredit;                        //příprava mincí pro vrácení
            return VRACENI;                         //přechod na vrácení
            break;
        case 1:
        case 2:
        case 5:
        case 10:
        case 20:                                    //všechny case mají stejný průběh, stačí napsat do jednoho
            kredit += vhozeno;                      // přičítání částky: kredit = kredit + vhozeno
            printf("Kredit:%d\n", kredit);
            break;
        default: printf("Neni mince!\n"); break;    //řešení přo případ, že není mince. Návratovou hodnotu psát nemusím, program se vrátí na začátek smyčky
        }
    }
    vratit = kredit - cena;                         //přebytek kreditu si uložím do vrátit
    return VYROBA;                                  //přechod na další stav tj. výroba

}
stav_t vyroba(){                                            //vyroba
    printf("\n\n/////////////\tVYROBA\t/////////////\n\n\n");
    printf("Pockejte prosim, vyrobni proces prave zacina.\n");
    printf("Proces vyroby: ");
    for (int i = 0; i < kolikrat_zatocit; ++i) {            //cyklus pro točení vrtulky, poč. stav;podmínka;krok=1
        printf("\b%c", vrtulka[(i % strlen(vrtulka))]);     //?????
        Sleep(100); // zaviní spoždění změny znaků, tj. půjde vidět ta změna
    }
    printf("\b0 %%\n\n");
    switch (volba){                                         //vybrání nápoje
    case 1:                                                 //káva
        zb_kavy -= 1;                                       //odečet zásob
        printf("Pripravuju kavu.\n");
        printf("Oteviram klapku cislo 1.\n");               //nasypaní kávy do suché nádoby
        printf("Nasypavam kavu do sberne nadoby.\n");
        break;
    case 2:                                                 //kapučíno
        zb_kapu -= 1;
        printf("Pripravuju kapucino.\n");
        printf("Oteviram klapku cislo 2.\n");
        printf("Nasypavam kapucino do sberne nadoby.\n");
        break;
    case 3:                                                 //latte machiate
        zb_late -= 1;
        printf("Pripravuju latte machiate.\n");
        printf("Oteviram klapku cislo 3.\n");
        printf("Nasypavam latte machiato do sberne nadoby.\n");
        break;
    case 4:                                                 //čokolada
        zb_coko -= 1;
        printf("Pripravuju cokoladu.\n");
        printf("Oteviram klapku cislo 4.\n");
        printf("Nasypavam cokoladu do sberne nadoby.\n");
        break;
    case 5:                                                 //čaj
        zb_caje -= 1;
        printf("Pripravuju caj.\n");
        printf("Oteviram klapku cislo 5.\n");
        printf("Nasypavam caj do sberne nadoby.\n");
        break;
    case 6:                                                 //voda
        break;
    }
    printf("Proces vyroby: ");
    for (int i = 0; i < kolikrat_zatocit; ++i) {
        printf("\b%c", vrtulka[(i % strlen(vrtulka))]);
        Sleep(100);
    }
    printf("\b20 %%\n\n");
    if (zb_cukru>0){                                            //ověření podmínky že zasoby nejsou nulové
        printf("Pridavam cukr\n");                                  //přidání cukru
        switch (cukr){                                          //switch množství
        case 0:
            printf("Zadny cukr nebyl zvolen.\n");
            break;
        case 5:                                                 //5g
            zb_cukru -= 5;                                      //odečet zásob
            printf("Oteviram klapku cislo 6.\n");
            printf("Pridavam 5g cukru do nadoby.\n");
            Sleep(100);                                         //sleep pro simulaci času za který se nasype 5g cukru
            break;
        case 10:                                                //10g
            zb_cukru -= 10;
            printf("Oteviram klapku cislo 6.\n");
            printf("Pridavam 10g cukru do nadoby.\n");
            Sleep(200);
            break;
        case 15:                                                //15g
            zb_cukru -= 15;
            printf("Oteviram klapku cislo 6.\n");
            printf("Pridavam 15g cukru do nadoby.\n");
            Sleep(300);
            break;
        case 20:                                                //20g
            zb_cukru -= 20;
            printf("Oteviram klapku cislo 6.\n");
            printf("Pridavam 20g cukru do nadoby.\n");
            Sleep(400);
            break;
        case 25:                                                //25g
            zb_cukru -= 25;
            printf("Oteviram klapku cislo 6.\n");
            printf("Pridavam 25g cukru do nadoby.\n");
            Sleep(500);
            break;
        }
    }
    printf("Proces vyroby: ");
    for (int i = 0; i < kolikrat_zatocit; ++i) {
        printf("\b%c", vrtulka[(i % strlen(vrtulka))]);
        Sleep(100);
    }
    printf("\b40 %%\n\n");
    printf("Pridavam vodu.\n");                               //voda
    printf("Oteviram ventil studene vody.\n");                //přívod vody do automatu
    printf("Ohrivam vodu.\n");
    printf("Oteviram prepousteci ventil.\n");                 //teplá voda do nádoby
    printf("Nalivam 70 ml horke vody do sberne nadoby.\n");

    printf("Proces vyroby: ");
    for (int i = 0; i < kolikrat_zatocit; ++i) {
        printf("\b%c", vrtulka[(i % strlen(vrtulka))]);
        Sleep(100);
    }
    printf("\b50 %%\n\n");
    if (zb_mleka>0){                                            //ověření podmínky že zasoby nejsou nulové
        printf("Pridavam mleko.\n");                            //mleko
        switch (mleko){                                         //switch pro množství
        case 0:                                                 //0
            printf("Byla zvolena moznost bez mleka. Nepridavam mleko.\n");
            break;
        case 10:                                                 //10
            zb_mleka -= 10;                                     //odečet zásob
            printf("Oteviram klapku cislo 7.\n");
            printf("Napoustim 10 ml mleka do nadoby.\n");
            Sleep(100);                                         //simulace doby napouštění
            break;
        case 20:                                                 //20
            zb_mleka -= 20;
            printf("Oteviram klapku cislo 7.\n");
            printf("Napoustim 20 ml mleka do nadoby.\n");
            Sleep(200);
            break;
        case 30:                                                 //30
            zb_mleka -= 30;
            printf("Oteviram klapku cislo 7.\n");
            printf("Napoustim 30 ml mleka do nadoby.\n");
            Sleep(300);
            break;
        case 40:                                                 //40
            zb_mleka -= 40;
            printf("Oteviram klapku cislo 7.\n");
            printf("Napoustim 40 ml mleka do nadoby.\n");
            Sleep(400);
            break;
        case 50:                                                 //50
            zb_mleka -= 50;
            printf("Oteviram klapku cislo 7.\n");
            printf("Napoustim 50 ml mleka do nadoby.\n");
            Sleep(500);
            break;
        }
    }
    printf("Proces vyroby: ");
    for (int i = 0; i < kolikrat_zatocit; ++i) {
        printf("\b%c", vrtulka[(i % strlen(vrtulka))]);
        Sleep(100);
    }
    printf("\b70 %%\n\n");
    printf("Vkladam kelimek na misto.\n");                  //kelimek na podlozku
    printf("Proces vyroby: ");
    for (int i = 0; i < kolikrat_zatocit; ++i) {
        printf("\b%c", vrtulka[(i % strlen(vrtulka))]);
        Sleep(100);
    }
    printf("\b80 %%\n\n");
    printf("Oteviram koncovy ventil.\n");                     //naliti smesi do kelimku
    printf("Nalivam smes do kelimku.\n");
    printf("Proces vyroby: ");
    for (int i = 0; i < kolikrat_zatocit; ++i) {
        printf("\b%c", vrtulka[(i % strlen(vrtulka))]);
        Sleep(100);
    }
    printf("\b100 %%\n\n");
    Sleep(2000);
    return VRACENI;                                         //přepsání konstatny stav na VRACENI
}
stav_t vraceni(){                                       //vraceni
    printf("\n\n/////////////\tVRACENI\t/////////////\n\n\n");
    while (vratit > 0){                                 //podmínka: částka k vrácení musí být větší než 0 aby se provedl cyklus
        if (vratit >= 20){                              //pokud bude částka k vrácení větší nebo rovno 20 tak vrátí 20
            vratit -= 20;
            printf("Vraceno 20 Kc\n");
        }
        else if (vratit >= 10){                         //pokud ne tak vyzkouší jestli je vrátit větší nebo rovno 10 a vrátí 10
            printf("Vraceno 10 Kc\n");
            vratit -= 10;
        }
        else if (vratit >= 5){
            printf("Vraceno 5 Kc\n");
            vratit -= 5;
        }
        else if (vratit >= 2){
            printf("Vraceno 2 Kc\n");
            vratit -= 2;
        }
        else if (vratit >= 1){                          //atd až pokud je větší nebo rovno tak 1 vrátí 1
            printf("Vraceno 1 Kc\n");
            vratit -= 1;
        }                                               //pokud už není co vracet nebo ani nebylo tak automat poděkuje a rozloučí se. 
    }
    switch (volba){
    case 1:
        printf("Kafe je pripraveno.\n");
        break;
    case 2:
        printf("Kapucino je pripraveno.\n");
        break;
    case 3:
        printf("Latte machiate je pripraveno.\n");
        break;
    case 4:
        printf("Cokolada je pripravena.\n");
        break;
    case 5:
        printf("Caj je pripraven.\n");
        break;
    case 6:
        printf("Horka voda je pripravena.\n");
        break;
    }
    printf("Dekujeme za vyuziti nasich sluzeb, prosim vyzvednete si vracene penize a vas napoj.\n\a\a\a\a");
    return VYBER;                                       //přepíše konstatnu funkce stav na VYBER a cela smyčka se může opakovat
}

Neformátovaný

Přidáno: 21.4.2017
Expirace: Neuvedeno

Aktivity