/************************************************************************** * 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); } fclose(ph); while(fscanf(fh,"%s %d %d %s %d %d %d",nume,&cod,&categorie,UM,&cant, &pret, &categorie)!=EOF){ rad2=adauga(rad2, nume, UM, cant, cod, pret, categorie, magazie); } fclose(fh); } /*=========================================================*/ void tipareste(nod *t){ if (t != NULL){ tipareste (t->sting); /* tipareste subarborele stang */ printf ("\nNume: %s", t->nume); printf ("\nCod: %d", t->cod); printf ("\nCategorie: %d", t->categorie); printf ("\nUM: %s", t->UM); tipareste (t->drept); /* tipareste subarborele drept */ } /* tipareste */ } FILE *deschidere(char nume[],FILE *fp) { //deschiderea fisierului fp=fopen(nume,"r"); if (fp==NULL) { //afisarea erorii de deschidere a fisierului fprintf(stderr,"Cannot open input file.\n"); exit(1); }else{ return(fp); } return(fp); } /*=========================================================*/ void meniu(void) { int o; FILE *fp; FILE *fh; char nume[20]; while (o!=11){ clrscr(); printf("\n1) Citire da"); printf("\n2) Citire da"); printf("\n3) Citire da"); printf("\n4) Citire da"); printf("\n5) Citire da"); printf("\n6) Citire da"); printf("\n7) Citire da"); printf("\n8) Citire da"); printf("\n9) Citire da"); printf("\n10) Citire da"); printf("\n11) Citire da"); printf("\n Introduceti optiunea: "); scanf ("%d", &o); switch(o){ case 1: strcpy(nume, "F1.txt"); fp=deschidere(nume, fp); strcpy(nume, "F2.txt"); fh=deschidere(nume, fh); break; case 2:introducere(fp, fh); break; case 3:tipareste(rad1); break; case 4: break; case 5: break; case 6: break; case 11: exit(0); break; default: printf("\n Optiune invalida"); break; } getch(); } } /*=========================================================*/ int main(void) { meniu(); return 0; } /*=========================================================*/