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