Вы находитесь на странице: 1из 21

Universitatea Politehnica Timisoara

Facultatea de Automatizari si Calculatoare

Dosar de practica(anul I)

Student:PARASCHIVU
ANDREEA
An II
Ingineria sistemelor
Gr. 3.1
CUPRINS

Prezentarea firmei……………………..pag. 3

Programa analitica………..……………pag. 4

Activitatea desfasurata…………….….pag. 5

Tema si subiectul progr. realizat..…...pag. 6

Date de test…………………………….pag 7

Cod sursa……………………………...pag .9
Prezentarea unitatii de efectuare a practicii
SC. ALTER SYSTEMS S.R.L.

Domeniul : IT Software

Departament : Internet, eCommerce, New Media, IT

Oras : Timisoara

Judet : Timis

Adresa : Daliei 13A

Sediu : 174 Chemin de Choulans 69005 LYON 05 FRANCE

Pagina WEB : http://www.altersystems.fr

Descrierea firmei:

Alter Systems este reuniunea ideilor si solutiilor adaptate industriei informatice de mâine.
Societatea are sediul la Lyon, Franta si are activitate în urmatoarele domenii :
- Realizare de proiecte informatice \"Nearshore \" prin filiala din Timisoara
- Editor de solutii de administrare la distanta
- Realizarea de aplicatii inovante
- Consulting technic avansat
- Training
Angajati : sub 10

Info: timisoara@altersystems.fr

Coordonator practica : ADRIAN ANDRASESCU


PROGRAMA ANALITICA
a activitatii de practica in productie a studentilor de la
Facultatea de Automatica si Calculatoare.

Rolul principal al inginerului il constituie perfectionarea continua a


proceselor, a mijloacelor de productie si a tehnologiei, aceasta necesitand
implicarea lui la nivelul atelierelor de productie.
Prin practica se urmareste familiarizarea studentilor cu acest rol si crearea
unor deprinderi in profesia aleasa, precum si vizarea unui viitor loc de
munca.
Locul de desfasurare:
- unitati de productie moderne;
- centre de calcul;
- oficii de calcul;
- institute de cercetare - proiectare;
- unitati bancare;
- alte unitati dotate cu tehnica de calcul.
Obiective:
- cunoasterea structurii (configuratii posibile pentru unitate centrala,
memorie, periferice etc., setup) la sistemele de tip PC (586, 686, Pentium,
etc.);
- aprofundarea sistemului de operare DOS, WINDOWS (principalele
comenzi interne si externe, organizarea structurii de fisiere si directoare);
- familiarizare cu programe utilitare si medii integrate (Norton Commander,
Norton Utility, Norton Integrator, Dos Shell, utilitare din WINDOWS,
programe antivirus, editoare de texte, editoare grafice, compilatoare etc.);
- familiarizare cu pachete de programe dedicate unei activitati specifice
locului de practica (proiectarea cablajelor, proiectarea si simularea
sistemelor, proiectarea schemelor electronice, analiza semnalelor,
conducerea prin calculator in : energetica, chimie, transporturi, constructii de
masini, etc.).
Cerinte:
- se va studia, in detaliu, una din problemele cu care se ocupa unitatea si se
va realiza un program (in limbajul Pascal, sau alt limbaj de nivel inalt)
pentru aceasta problema, punandu-se accent pe interfata cu utilizatorul
(ferestre, meniuri, help etc.);
- in dosarul de practica se vor descrie : problema studiata, varianta clasica de
rezolvare (eventual descrierea programelor existente), cerintele generale ale
programului, metoda de rezolvare aleasa pentru program si observatii
(facilitati, lipsuri, grad de eficienta, etc.);
- fisierul sursa al programului impreuna cu un set de date de test vor fi aduse
pe o discheta pentru a fi prezentate la sustinerea colocviului

ACTIVITATEA DESFASURATA

Conform regulamentului UPT, am efectuat activitatea de practica pentru anul I


in perioada
14 iulie - 1 august 2007 (90 de ore) in unitatea firmei SC Alter Systems SRL sub
supravegherea
d-lui ing. Adrian Andrasescu.

In saptamana 14-20 iulie 2007 :

- mi s-a aratat sediul firmei, echipamentele si angajatii;


- am semnat fisa de protectie a muncii;
- coordonatorul mi-a vorbit despre activitatea firmei Alter Systems din Franta,
cu care sunt asociati;si care le furnizeaza contracte pentru vanzarea de soft-uri;
- prezentarea sistemului de operare folosit: Windows XP;
- mi-am formatat si partitionat hardul si am instalat Windows xp cu licenta sub
indumarea unuia dintre angajati, pentru ca orice programator trebuie sa stie sa isi
instaleze sistemul de operare in caz de nefunctionare pentru a-si putea continua
munca ;
- mi-am instalat programele pe care ei le utilizeaza ca mediu de
programare(C#,Microsoft Visual Studio 2005,Dev C++,Microsoft SQL Server
etc);
In saptamana 21-27 iulie 2008:

- coordonatorul practicii mi-a prezentat mediul de programare pe care ei il


utilizeaza cel mai frecvent, adica C# (C Sharp),dar cum eu nevand cunostiinte
decat despre programarea structurata, a trebuit intai sa ma familiarizez cu noile
notiuni documentandu-ma despre obiecte, clase, mosteniri etc.;
- m-am documentat si am exersat lucrul cu fisiere XML pe care ei le utilizeaza
pentru baze de date sau ca un fel de biblioteca pentru a putea refolosi functiile
deja editate;
- m-am documentat si am pus intrebari despre codul HTML, incercand apoi sa
vad care este efectul codului;

In saptamana 28iulie – 1august 2008:

- angajatii firmei m-au pus la current cu programul la care tocmai lucrau;un


program ce tine evidenta resurselor pe departamentele Frantei generand
grafice dupa diferite criterii;
- am testat acel program pe mai multe seturi de date;
- le-am furnizate erorile gasite si eventuale idei de remediere;
- am ales impreuna cu coordonatorul tema de proiect: o baza de date ce
tine evidenta preparatelor si a ingredientelor dintr-un restaurant;
- am realizat proiectul si l-am testat(am anexat mai jos datele de test)

PROIECT
Evidenta preparatelor si a ingredientelor
dintr-un restaurant

Am realizat un program care tine evidenta retetelor care pot fi preparate la un


restaurant. Acest program va fi folosit pentru eliberarea din magazie a produselor
necesare prepararii unei comenzi. Retetele preparatelor pe care restaurantul le ofera sunt
pastrate in fisierul “retete.txt”. Pentru fiecare ingredient al unui preparat, se va memora
numele ingredientului si cantitatea necesara din acest ingredient pentru prepararea
produsului. Se considera ca numarul de ingrediente dintr-un preparat este nelimitat.
Toate ingredientele de care dispune restaurantul sunt pastrate pe linii distincte in fisierul
“magazie.txt”, sub forma:
nume_ingredient cantitate_disponibila unitate_de_masura
pret_pe_unitate_de_masura data_expirarii
La inceputul zilei baza de date ce contine retetele preparatelor, va fi incarcata din
fisierul “retete.txt”, iar la sfarsitul zilei se va salva in acelasi fisier. Acelasi lucru se va
intampla si cu BD ce contine ingredientele care se gasesc in magazie.
Implementarea bazei de date ce contine retetele am realizat-o utilizand structura
de date arbore binar ordonat cu sublista, cautarea dupa numele preparatului facandu-se
astfel cel mai rapid.
Implementarea bazei de date care contine ingredientele disponibile in magazie am
realizat-o utilizand structura de date lista simplu inlantuita.

Programul are urmatorul meniu:

1. Incarcare – incarca bazele de date din cele doua fisiere (daca bazele de date au
fost incarcare deja se afiseaza un mesaj de atentionare)
2. Afiseaza in ordine alfabetica toate preparatele din restaurant impreuna cu
ingredientele necesare lor. Ingredientele se vor iparii in ordine descrescatoare a
cantitatilor necesare pentru preparare.
3. Afiseaza in ordine alfabetica toate ingredientele disponibile pe stoc.
4. Elimina ingredientele expirate (cele care au data expirarii mai mare decat data
curenta citita din sistem)
5. Introducerea unei noi retete – se introduce un preparat nou, cu reteta lui, cu datele
citite de la tastatura.
6. Introducerea unui nou ingredient. Datele se vor citi de la tastatura
7. Eliberare comanda:
1 Citeste de la tastatura numele unui preparat comandat
2 Afiseaza in ordine alfabetica ingredientele necesare, pe linii de forma:
nume cantitate
3 Afiseaza pretul total al ingredientelor unui produs
4 Verifica daca se afla pe stoc contitati suficiente din ingedientele acestui
produs astfel incat el sa poata fi preparat. Daca un ingredient lipseste de pe
stoc, sau nu exista pe stoc o cantitate la fel de mare ca si cea din reteta se
afiseaza un mesaj corespunzator, altfel se elibereaza preparatul, scazand
din cantitatile ingredinetelor corespunzatoare, disponibile pe stoc,
cantitatile consumate.
8. Modificare pret – citeste de la tastatura numele unui ingredient si pretul lui si
ilactualizeaza
9. Stergere – stergerea din evidenta a unei retete
10. Salvare informatii in fisierele “magazie.txt” si “retete.txt“
11. Parasire program.
Datele de test

Fisier "RETETE.TXT"
inghetata
oua
6
rom
5
vanilie
5
lapte
1
*
tort
faina
1000
zahar
500
bicarbonat
2
*

Fisier "MAGAZIE.TXT"

apa
41
l
15.000000
2006.10.12
*
bicarbonat
18
gr
0.900000
2008.09.27
*
faina
19000
gr
1.000000
2008.11.02
*
lapte
10
l
4.000000
2008.12.20
*
oua
10
buc
1.000000
2008.10.17
*
rom
200
ml
0.500000
2008.08.20
*
sare
10
gr
0.700000
2008.05.29
*
vanilie
200
ml
0.500000
2008.04.12
*
zahar
500
gr
0.500000
2008.10.24
*
COD SURSA
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef struct sublista /* sublista */


{
char *nume;
int cant;
struct sublista *urm;
}nodsub;

typedef struct arb /* arbore cu subliste */


{
char *reteta;
struct arb *st,*dr;
nodsub *prim;
}arbore;

typedef struct ingredienttt /* ingrediente */


{
char *nume;
int cant;
char *unitm;
float pret;
char *data; /* data este de forma YYYY.MM.DD */
struct ingredienttt *urm;
}nodingr;

arbore *adaug(arbore *rad, char reteta[20])


{ /* adaugarea unui nod in arbore */
if(rad==NULL)
{
rad=(arbore*)malloc(sizeof(arbore));
rad->reteta=(char*)malloc(strlen(reteta)+1);
strcpy(rad->reteta,reteta);
rad->st=rad->dr=NULL;
rad->prim=NULL;
}
else
{
if(strcmp(rad->reteta,reteta)<0)
rad->dr=adaug(rad->dr,reteta);
else
if(strcmp(rad->reteta,reteta)>0)
rad->st=adaug(rad->st,reteta);
}
return rad;
}

nodsub *adauga_nod(nodsub *prim,char nume[20],int cant)


{ /* adaugarea unui nod in sublista */
nodsub *p,*q1,*q2;
p=NULL;
p=(nodsub*)malloc(sizeof(nodsub));
p->nume=(char*)malloc(strlen(nume)+1);
strcpy(p->nume,nume);
p->cant=cant;
p->urm=NULL;
for(q1=q2=prim;(q1!=NULL)&&(q1->cant>p->cant);q2=q1,q1=q1->urm);
if(q1!=q2) /* adaugarea nu se face la inceput */
{
q2->urm=p;
p->urm=q1;
return prim;
}
else
{
p->urm=prim; /* adaugarea de face la inceput */
prim=p;
return prim;
}
/* adaugare ordonata dupa cantitate -ordine descrescatoare */
/* p este nodul ce contine ingredientul*/
}

arbore *adaug_lista(arbore *rad, char nume[20], int cant,char reteta[20])


{ /* adaugarea in sublista */
if(rad!=NULL)
{
if(strcmp(rad->reteta,reteta)<0)
rad->dr=adaug_lista(rad->dr,nume,cant,reteta);
if(strcmp(rad->reteta,reteta)>0)
rad->st=adaug_lista(rad->st,nume,cant,reteta);
if(strcmp(rad->reteta,reteta)==0)
rad->prim=adauga_nod(rad->prim,nume,cant);
}
return rad;
}

arbore *introduc(arbore *radacina)


{ /* introducerea datelor din fis f */
FILE *f;
char nume[20],reteta[20];
int cant;
if (radacina)
{
printf("Lista a fost deja incarcata!");
return radacina;
}
if((f=fopen("retete.txt","r"))==NULL)
{
printf("eroare");
exit(0);
}
cant=cant;
while(!feof(f))
{
fscanf(f,"%s",reteta);
radacina=adaug(radacina,reteta);
do
{
fscanf(f,"%s",nume);
if(strcmp(nume,"*"))
{
fscanf(f,"%d",&cant);
radacina=adaug_lista(radacina,nume,cant,reteta);
}
}
while (strcmp(nume,"*"));
}
fclose(f);
return radacina;
}

int afisare(arbore *radacina)


{ /* afisarea arborelui */
nodsub *p;
if(radacina!=NULL)
{
afisare(radacina->st);
printf("\nReteta:%s\n",radacina->reteta);
printf("ingrendiente:\n");
for(p=radacina->prim;p;p=p->urm)
printf("-%s\n",p->nume);
afisare(radacina->dr);
}
return 1;
}

nodingr *adaug_ingr(nodingr *ingr,char nume[20],int cant,char unitm[20],float pret,char data[11])


{ /* adaugarea in lista de ingrediente */
nodingr *p,*q1,*q2;
/*p=NULL;*/
p=(nodingr*)malloc(sizeof(nodingr));
p->nume=(char*)malloc(strlen(nume)+1);
p->unitm=(char*)malloc(strlen(unitm)+1);
p->data=(char*)malloc(strlen(data)+1);
strcpy(p->nume,nume);
strcpy(p->unitm,unitm);
strcpy(p->data,data);
p->cant=cant;
p->pret=pret;
p->urm=NULL;
for(q1=q2=ingr;q1!=NULL&&strcmp(q1->nume,p->nume)<0;q2=q1,q1=q1->urm);
p->urm=q1;
if(q1==q2)
return p;
else
{
q2->urm=p;
return ingr;
}
}

nodingr *constr_lista(nodingr *ingr)


{ /* introducerea datelor din fis al doilea */
FILE *f;
char nume[20],unitm[20],data[11];
float pret;
int cant;
if((f=fopen("magazie.txt","r"))==NULL)
{
printf("eroare");
exit(0);
}

while(!feof(f))
{
while(1)
{
fscanf(f,"%s",nume);
if(strcmp(nume,"*")==0)
break;
fscanf(f,"%d",&cant);
fscanf(f,"%s",unitm);
fscanf(f,"%f",&pret);
fscanf(f,"%s",data);
ingr=adaug_ingr(ingr,nume,cant,unitm,pret,data);
}
}
fclose(f);
return ingr;
}

int parcurg_lista(nodingr *ingr)


{
nodingr *p;
int k;
p=ingr;
k=0;
printf("\n");
while(p!=NULL)
{
printf("Denumire: %s\ncantitate: %d\n",p->nume,p->cant);
printf("unitate de masura: %s \npret pe unitate: %f\n",p->unitm,p->pret);
printf("data expirarii: %s",p->data);
printf("\n\n");
p=p->urm;
k++;
if(k==7)
getch();
}
return 1;
}
nodingr *sterge_lista(nodingr *ingr,nodingr *p) /* stergerea nodurilor */
{
nodingr *q1,*q2;
for(q1=q2=ingr;q1!=NULL&&q1!=p;q2=q1,q1=q1->urm);
if(q1!=q2) /* nu este primul nod */
{
q2->urm->urm=q1->urm;
free(q1->nume);
free(q1->unitm);
free(q1->data);
free(q1);
}
else
{
q1=ingr;
ingr=ingr->urm;
free(q1->nume);
free(q1->unitm);
free(q1->data);
free(q1);
}
return ingr;
}

void elimina_lista(nodingr *ingr)


{ /*stergerea ingredientelor expirate*/
char *r,*t,d[15];
nodingr *p,*q;
printf("Dati data curenta:(YYYY.MM.DD)\n");
scanf("%s",d);
/* retinem in a anul, in l luna si in z ziua */
p=ingr;
while(p!=NULL && strcmp(d,p->data)<0)
{
ingr=ingr->urm;
free(p);
p=ingr;
}
while (p->urm)
{
while (p->urm!=NULL && strcmp(p->urm->data,d)>0)
{
q=p->urm;
p->urm=q->urm;
free(q);
}
p=p->urm;
}
}

arbore *reteta_noua(arbore *radacina)


{ /* introducerea datelor de la tastatura */
char nume[20],reteta[20];
int cant;
char opt; /* y sau n */
printf("\nIntroduceti numele retetei: ");
scanf("%s",reteta);
radacina=adaug(radacina,reteta);
do
{
printf("\nIntroduceti numele ingredientului: ");
scanf("%s",nume);
printf("Introduceti cantitatea: ");
scanf("%d",&cant);
radacina=adaug_lista(radacina,nume,cant,reteta);
printf("\nDoriti sa mai introduceti ingrediente? (y/n)");
fflush(stdin);
scanf("%c",&opt);
}while(opt=='y');
return radacina;
}

nodingr *ingredient_nou(nodingr *ingr)


{ /* introducerea ingredientelor de la tastatura */
char nume[20],unitm[20],data[11];
float pret;
int cant;
printf("\nIntroduceti numele ingredientului: ");
scanf("%s",nume);
printf("Introduceti cantitatea: ");
scanf("%d",&cant);
printf("Introduceti unitatea de masura: ");
scanf("%s",unitm);
printf("Introduceti pretul pe unitate de masura: ");
scanf("%f",&pret);
printf("Introduceti data expirarii (YYYY.MM.DD): ");
scanf("%s",data);
ingr=adaug_ingr(ingr,nume,cant,unitm,pret,data);
return ingr;
}

float pretul(nodingr *ingr,char *nume)


{ /* cautarea pretului unui ingredient */
nodingr *p;
for(p=ingr;p;p=p->urm)
{
if(strcmp(p->nume,nume)==0)
return p->pret;
}
return 0;
}

int cantitate(nodingr *ingr,char *nume)


{ /* cantitatea disponibila pe stoc */
nodingr *p;
for(p=ingr;p;p=p->urm)
{
if(strcmp(p->nume,nume)==0)
return p->cant;
}
return 0;
}

int scade(nodingr *ingr,int cant,char *nume)


{ /* se scade din cantitatea disponibila, cantitatea utilizata */
nodingr *p;
for(p=ingr;p;p=p->urm)
{
if(strcmp(p->nume,nume)==0)
p->cant=p->cant-cant;
}
return 1;
}

int cauta(arbore *radacina,char reteta[20],nodingr *ingr)


{ /* cautarea retetei in arbore si det pretului preparatului */
float suma,pret;
int cant,sw;
nodsub *q;
suma=0;
sw=1;
if(radacina==NULL) /* daca este vid cautarea este fara succes */
return 0;
else
{
if(strcmp(radacina->reteta,reteta)==0) /* daca s-a gasit se afis info */
{
for(q=radacina->prim;q;q=q->urm) /* se afis nume si cantitate */
{
printf("\tNume: %s\tcantitate: %d\n",q->nume,q->cant);

/* pretul total al ingredintelor */


pret=pretul(ingr,q->nume);
suma=suma+pret*q->cant;

/* verificarea contitatilor de pe stoc */


cant=cantitate(ingr,q->nume);
if(cantitate(ingr,q->nume)==0) /* daca nu s-a gasit ingr */
sw=0;
if(cant<q->cant) /* daca nu este de ajuns */
sw=0;
else
scade(ingr,q->cant,q->nume); /* se scade cantitatea care se utilizeaz*/
}
printf("\nPretul total al ingredientelor este: %2.f lei",suma);
if(sw==0)
printf("\nProdusul nu se poate preparat!\n");
else
printf("\nProdusul poate fi preparat!\n");
}
if(strcmp(radacina->reteta,reteta)<0)
cauta(radacina->dr,reteta,ingr);
else
if(strcmp(radacina->reteta,reteta)>0)
cauta(radacina->st,reteta,ingr);
}
return 1;
}

int eliberare(arbore *radacina,nodingr *ingr)


{ /* eliberarea unei comenzi */
int c;
char reteta[20]; /* pt retete */
printf("\nIntroduceti numele retetei dorite: ");
scanf("%s",reteta);
c=cauta(radacina,reteta,ingr);
if(c==0)
printf("\nReteta nu a fost gasita!\n");
return 1;
}

int modif_pret(nodingr *ingr)


{ /* modificarea pretului din lista de ingrediente */
nodingr *p;
char nume[20];
float pret;
int sw=0;
printf("\nIntroduceti numele ingredientului: ");
scanf("%s",nume);
for(p=ingr;p;p=p->urm)
{
if(strcmp(p->nume,nume)==0)
{
printf("\nPretul actual este: %f",p->pret);
printf("\nIntroduceti noul pret: ");
scanf("%f",&pret);
p->pret=pret;
sw=1;
}
}
if(sw==1)
printf("\nPretul a fost modificat!\n");
else
printf("\nIngredientul nu a fost gasit!\n");
return 1;
}

arbore *elimina_arbore(arbore *p,char reteta[20])


{ /* stergerea unei retete introduse de la tastatura */
arbore *q,*q1,*q2;
if(p==NULL)
printf("\nReteta introdusa nu a fost gasita!\n");
else
if(strcmp(p->reteta,reteta)<0)
p->dr=elimina_arbore(p->dr,reteta);
else
if(strcmp(p->reteta,reteta)>0)
p->st=elimina_arbore(p->st,reteta);
else /* nodul a fost gasit */
if(p->st==NULL) /* nu are fiu st */
{
q=p->dr;
free(p->reteta);
free(p);
return q;
}
else
if(p->dr==NULL) /* nu are fiu dr */
{
q=p->st;
free(p->reteta);
free(p);
return q;
}
else
{
for (q1=q2=p;q1->st!=NULL;q2=q1,q1=q1->st);
q2->st=q1->dr;
q1->st=p->st;
q1->dr=p->dr;
free(p);
return q1;
}
return p;
}

int salvare_arb(FILE *f,arbore *radacina)


{ /* salvarea retetelor */
nodsub *p;
if(radacina!=NULL)
{
salvare_arb(f,radacina->st);
fprintf(f,"%s\n",radacina->reteta);
for(p=radacina->prim;p;p=p->urm)
{
fprintf(f,"%s\n",p->nume);
fprintf(f,"%d\n",p->cant);
}
fprintf(f,"%s\n","*");
salvare_arb(f,radacina->dr);
}
return 1;
}

int salvare_lista(FILE *f,nodingr *ingr)


{ /* salvarea ingredientelor */
nodingr *p;
p=ingr;
while(p->urm!=NULL)
{
fprintf(f,"%s\n",p->nume);
fprintf(f,"%d\n",p->cant);
fprintf(f,"%s\n",p->unitm);
fprintf(f,"%f\n",p->pret);
fprintf(f,"%s\n",p->data);
fprintf(f,"%s\n","*");
p=p->urm;
}
fprintf(f,"%s\n",p->nume);
fprintf(f,"%d\n",p->cant);
fprintf(f,"%s\n",p->unitm);
fprintf(f,"%f\n",p->pret);
fprintf(f,"%s\n",p->data);
fprintf(f,"%s","*");
return 1;
}

int salvare(arbore *radacina,nodingr *ingr)


{ /* salvarea informatiior in fisiere */
FILE *f,g;
if((f=fopen("retete.txt","w"))==NULL)
{
printf("eroare");
exit(0);
}
salvare_arb(f,radacina);
if((f=fopen("magazie.txt","w"))==NULL)
{
printf("eroare");
exit(0);
}
salvare_lista(f,ingr);
fclose(f);
return 1;
}

int main()
{
int opt;
nodingr *ingr; /* adresa listei de ingrediente */
arbore *radacina; /* adresa arborelui */
FILE *f,*g; /* f pt ratete; g pt ingrediente */
float aux; /* variabila pt citirea nr reale */
char *s; /* variabila pt citirea sirurilor de caractere */
char c; /* variavila care ajuta la delimitarea retetelor (\n) */
char reteta[20]; /* variabila pt retinerea retetei de sters */
clrscr();
ingr=NULL;
radacina=NULL;
radacina->prim=NULL;
do
{
clrscr();
if(radacina==NULL||ingr==NULL)
printf("Fisierele nu au fost incarcate\n");
else
printf("Fisierele au fost incarcate\n");
printf(" 1. Incarcare\n");
printf(" 2. Afiseaza preparatele in ordine alfabetica\n");
printf(" 3. Afiseaza ingredientele in ordine alfabetica\n");
printf(" 4. Elimina ingrediente expirate\n");
printf(" 5. Introducerea unei noi retete\n");
printf(" 6. Introducerea unui nou ingredient\n");
printf(" 7. Eliberare comanda\n");
printf(" 8. Modificare pret\n");
printf(" 9. Stergerea unei retete\n");
printf(" 10. Salvare\n");
printf(" 0. Iesire\n");
printf("\nAlegeti optiunea: ");
scanf("%d",&opt);
switch(opt)
{
case 1: radacina=introduc(radacina);
ingr=constr_lista(ingr);
break;

case 2: clrscr();
printf("Preparate disponibile:\n");
afisare(radacina);
getch();
break;

case 3: clrscr();
printf("Ingrediente disponibile:\n\n");
parcurg_lista(ingr);
getch();
break;

case 4: clrscr();
sterge_lista(ingr);
parcurg_lista(ingr);
getch();
break;

case 5: clrscr();
radacina=reteta_noua(radacina);
printf("\n\nPreparate disponibile:\n");
afisare(radacina);
getch();
break;

case 6: clrscr();
ingr=ingredient_nou(ingr);
printf("\n\nIngrediente disponibile:\n\n");
parcurg_lista(ingr);
getch();
/* data este de forma (YYYY.MM.DD) */
break;

case 7: clrscr();
eliberare(radacina,ingr);
getch();
break;

case 8: clrscr();
modif_pret(ingr);
getch();
break;

case 9: clrscr();
printf("Introduceti denumirea retetei care trebuie stersa :");
scanf("%s",reteta);
radacina=elimina_arbore(radacina,reteta);
printf("\nCerinta s-a realizat cu succes!\n");
getch();
break;

case 10:clrscr();
salvare(radacina,ingr);
printf("Salvare realizata cu succes!\n");
getch();
break;

case 0: break;

default: printf("Tastare gresita!");


}
}while(opt!=0);
return;
}

Оценить