Sunteți pe pagina 1din 7

Universitatea Tehnică ”Gheorghe Asachi” Iași

Facultatea de Inginerie Electrică, Energetică și Informatică Aplicată

Proiect – PCLP2 documentație

Cramba Dumitrița
Grupa 6106
1. Tema proiectului
Tema proiectului se numește ”Comandă la Restaurant” și constă într-un Meniu din
care utilizatorul își poate alege, după preferințe, felurile de mâncare dorite.

2. Explicații cod
Am început aplicația prin creearea unei funcții void în care voi lucra aplicația în
sine. Am afișat în consolă un Meniu principal care constă în 10 tipuri de mâncare
(meniuri secundare) din care utilizatorul își poate alege în care meniu secundar să

intre.

M-am folosit de un do-while pentru a valida opțiunea aleasă de utilizator și a o


stoca într-un vector și pentru a putea fi pusă condiția ca doar atunci când utilizatorul
introduce 0 să se continue aplicația. În acest fel utilizatorul poate alege mai multe
opțiuni din Meniu.

În continuare am creat câte un fișier pentru fiecare Meniu secundar în care am


introdus date legate de alimentele disponibile din categoriile propuse. Datele constau
în denumire, cantitate(în grame) și pretul acestora în lei.

2
Datele preparatelor cu care vom lucra în cod și fișiere le-am pus într-un struct
(stuct meniu):

Am introdus tot restul codului într-un for pentru a i se putea atribui lui n fiecare
valoare introdusă de utilizator și stocată în vectorul “numere”.

Pentru a putea apela fiecare Meniu secundar în parte, am adăugat un switch cu


toate cele 10 cazuri menționate mai sus. Fiecare caz are aceleași funcții, repetându-
se, diferind doar datele caracteristice.

Am început prin citirea datelor din fișierul respectiv meniului secundar ales și am
afișat datele in consolă, contorizând numărul de afișări cu ajutorul lui i.

Am cerut utilizatorului să introducă numerele preparatelor dorite și am adăugat un


nou do-while, o buclă cu același scop ca primul de mai sus, unde numerele
introduse sunt stocate în variabila “nr”. De asemenea am contorizat numărul total de
introduceri și numărul de apariții al fiecarui preparat stocat într-un vector nou.

3
În următoarea instanță se verifică dacă s-au introdus numere (ct > 0) și se
utilizează două bucle for pentru a actualiza vectorul “aparitii” și pentru a parcurge
aperitivele și a afișa informațiile corespunzătoare. Elementul aparitii[ ] este
incrementat pentru fiecare aperitiv adăugat în comandă.

În cadrul celei de-a doua bucle for, se verifică dacă un aperitiv are un număr de
apariții mai mare decât zero. Dacă da, se afișează numele aperitivului și numărul de
apariții. De asemenea, se scriu informațiile în două fișiere (fisier și fisier2) și se
efectuează alte operații de înregistrare a datelor. În if se verifică dacă numele
aperitivului curent are o lungime mai mare decât cel mai lung nume înregistrat până
în acel moment (longest). Dacă da, “longest” devine m[j].nume și se actualizează
valoarea lui “pret_longest”. Pe urmă, se efectuează o înmulțire între prețul pe produs
și cantitatea comandată.
Funcția realloc reasociază spațiul de memorie alocat anterior pentru vector cu un
nou spațiu de memorie de dimensiunea specificată. Dacă realocarea reușește,
adresa noului spațiu de memorie este atribuită variabilei vector.

În continuare am completat switch-ul cu toate cazurile aferente, cazuri care au


aceeași structură ca primul.

... .

4
După switch am calculat suma tuturor prețurilor preparatelor comandate pe
parcurs și stocate în vectorul “vector”. Pentru aceasta am creat o altă funcție
“sumaa” în care am calculat propriu-zis suma și am apelat-o înapoi în funcția

“comandă”.

Spre final am afișat în consolă și în ambele fișiere prețul total dispus utilizatorului
pentru a achita plata.

Am impus un alt if imediat după pentru a afișa următoarele informații doar în cazul
în care “ct_total”, un contor în care am numărat totalul de preparate comandate, este
diferit de zero, adică s-a introdus cel puțin o comandă. În interiorul acesteia am
inițializat o reducere în prețul total în funcție de cel mai lung produs comandat, cel
stocat în “longest”, cum am precizat mai sus.

În consolă exemplu:

Am închis fișierele și adăugat o altă cerință utilizatorului de a introduce cifra 1


pentru a încheia comanda. Aceasta a fost creată cu scopul afișării ferestrei grafice
ulterioare după parcurgerea întregului cod și, deci, și după afișarea tuturor printf-
urilor.

5
Desigur, în cazul contrar if-ului anterior (ct_total este egal cu 0) să se afișeze doar
faptul că bonul este gol.

Revenind la funcția main(), aici am apelat funcția “comanda” și fereastra grafică,


cu caracteristicile specifice.

În funcția ferestrei grafice (void display), am decis să fac un bon characteristic. În


acesta am scris/afișat toate datele din fișierul “fișier_iesire.txt” rând cu rând,
adăugând și câteva desene ulterioare bonului pentru estetic.

6
3. Probleme întâmpinate – 0 

S-ar putea să vă placă și