/**************************************************************************
* 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<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
// .. 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);