All pastes #516147 Raw Edit

Anonymous

public text v1 · immutable
#516147 ·published 2007-05-28 15:39 UTC
rendered paste body
/**************************************************************************
* 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);