All pastes #516150 Raw Edit

Unnamed

public text v1 · immutable
#516150 ·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);



 }
 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;
}

/*=========================================================*/