/************************************************************************** * Doua intreprinderi I1 si I2 fuzioneaza. Fisierele care tineau evidenta * * magaziilor de materiale ale lor sunt F1 respectiv F2. * * F1 are linii de forma: * * nume cod categorie UM cant pret/UM magazie * * unde: nume - max 20 caractere, cod - 4 cifre, categorie - intreg (poate * * fi 1, 2 sau 3), UM - 2 caractere, cant - real, magazie - A sau B (I1 * * avea doua magazii). * * F2 are linii de aceeasi forma, mai putin magazie, I2 avand o singura * * magazie M. * * In noua organizare, toate materialele de categoria 1 vor fi puse in A, * * 2 in B iar 3 in M, indiferent unde au fost inainte. * * Sa se scrie un program care realizeaza interactiv operatiile: * * 1. Citeste datele din cele doua fisiere, creeaza si initializeaza o * * structura de tip arbore de cautare pentru fiecare magazie; * * 2. Afiseaza toate materialele dintr-o magazie selectata de la tastatura,* * ordonate dupa nume; * * 3. Afiseaza toate materialele cu un anumit nume, citit de la tastatura, * * specificand si magazia in care se afla; * * 4. Afiseaza valoarea totala a materialelor aflate in magaziile * * intreprinderii; * * 5. Sterge un material din evidenta; * * 6. Muta un material dintr-o magazie in alta; * * 7. Introduce un material de la tastatura; * * 8. Sterge toate materialele din magazia A, care se gasesc intr-o * * cantitate mai mica decat o limita citita de la tastatura; * * 9. Salvare in fisiere diferite, materialele care se gasesc acum in * * fiecare magazie; * * 10. Parasire program. * **************************************************************************/ #include #include #include #include // .. typedef enum {c1,c2,c3} cat; // typedef enum {A,B,M} mag; typedef struct pn { char nume[20]; char UM[2]; float cant; int cod; int pret; int categorie; int magazie; pn *sting,*drept; }nod; nod *rad1=NULL; nod *rad2=NULL; nod *adauga(nod *t, char *nume,char *UM ,float cant, int cod, int pret, int categorie, int magazie) { if (t == NULL){ /* nodul nu exista si este creat */ if ((t = (nod*)malloc(sizeof(nod))) == NULL){ printf("Eroare: memorie insuficienta\n"); exit(1); } else { strcpy(t->nume, nume); strcpy(t->UM, UM); t->categorie=categorie; t->magazie=magazie; /* s-a putut crea nodul */ t->cod=cod; t->cant=cant; t->pret=pret; } } else { if (strcmp (t->nume, nume) < 0){ /* inserarea e in subarborele drept */ t->drept = adauga (t->drept, nume, UM, cant, cod, pret, categorie, magazie); }else { if (strcmp (t->nume, nume) > 0){ /* inserarea e in subarborele stang */ t->sting = adauga (t->sting, nume, UM, cant, cod, pret, categorie, magazie ); }else { printf("Identificatorul %s apare in evidenta\n",nume); } } } return t; } /*=========================================================*/ void introducere(FILE *ph, FILE *fh){ char nume[20]; char UM[2]; float cant; int cod; int pret; int categorie; int magazie; //citire linie cu linie a fisierului text while(fscanf(ph,"%s %d %d %s %d %d %d",nume,&cod,&categorie,UM,&cant, &pret, &categorie)!=EOF){ rad1=adauga(rad1, nume, UM, cant, cod, pret, categorie, magazie);