Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <conio.h>
- typedef struct A
- {
- char nume[20], UM[3], magazie[2]; //Magaziile A sau B
- int cod, categorie; //categorie poate fi 1,2 sau 3
- float cant, pret_UM;
- struct A *urm1;
- }A;
- A* prim1=NULL;
- typedef struct B
- {
- char nume2[20], UM2[2], magazie2[2]; //O singura magazie, magazia M
- int cod2, categorie2;
- float cant2, pret_UM2;
- struct B *urm2;
- }B;
- B *prim2=NULL;
- typedef struct M
- {
- char nume3[20], UM3[2], magazie3[2]; //O singura magazie, magazia M
- int cod3, categorie3;
- float cant3, pret_UM3;
- struct M *urm3;
- }M;
- M *prim3=NULL;
- typedef struct C
- {
- char nume[20], UM[3], magazie[2]; //Magaziile A sau B
- int cod, categorie; //categorie poate fi 1,2 sau 3
- float cant, pret_UM;
- struct C *urm4;
- }C;
- C *prim4=NULL;
- A *adauga1 (A *lista1, char nume[20], int cod, int categorie, char UM[3], float cant, float pret_UM, char magazie[2])
- {
- A *i1, *i2, *aux;
- aux=(A*)malloc(sizeof(A));
- strcpy(aux->nume,nume);
- aux->cod=cod;
- aux->categorie=categorie;
- strcpy(aux->UM,UM);
- aux->cant=cant;
- aux->pret_UM=pret_UM;
- strcpy(aux->magazie,magazie);
- for (i1=i2=lista1;i1!=NULL && strcmp(i1->nume,nume)<0; i2=i1, i1=i1->urm1);
- if (i1==i2)
- {
- aux->urm1=lista1;
- lista1=aux;
- }
- else
- {
- i2->urm1=aux;
- aux->urm1=i1;
- }
- return lista1;
- }
- B *adauga2 (B *lista2, char nume[20], int cod, int categorie, char UM[3], float cant, float pret_UM, char magazie[2])
- {
- B *q1, *q2, *aux2;
- aux2=(B*)malloc(sizeof(B));
- strcpy(aux2->nume2,nume);
- aux2->cod2=cod;
- aux2->categorie2=categorie;
- strcpy(aux2->UM2,UM);
- aux2->cant2=cant;
- aux2->pret_UM2=pret_UM;
- strcpy(aux2->magazie2,magazie);
- for (q1=q2=lista2; q1!=NULL && strcmp(q1->nume2,nume)<0; q2=q1, q1=q1->urm2);
- if (q1==q2)
- {
- aux2->urm2=lista2;
- lista2=aux2;
- }
- else
- {
- q2->urm2=aux2;
- aux2->urm2=q1;
- }
- return lista2;
- }
- M *adauga3 (M *lista3, char nume[20], int cod, int categorie, char UM[3], float cant, float pret_UM, char magazie[2])
- {
- M *p1, *p2, *aux3;
- aux3=(M*)malloc(sizeof(M));
- strcpy(aux3->nume3,nume);
- aux3->cod3=cod;
- aux3->categorie3=categorie;
- strcpy(aux3->UM3,UM);
- aux3->cant3=cant;
- aux3->pret_UM3=pret_UM;
- strcpy(aux3->magazie3,magazie);
- for (p1=p2=lista3; p1!=NULL && strcmp(p1->nume3,nume)<0; p2=p1, p1=p1->urm3);
- if (p1==p2)
- {
- aux3->urm3=lista3;
- lista3=aux3;
- }
- else
- {
- p2->urm3=aux3;
- aux3->urm3=p1;
- }
- return lista3;
- }
- void afisare_A (A *lista1)
- {
- A* i;
- printf ("\nMagazia A\n");
- for (i=lista1; i!=NULL; i=i->urm1)
- {
- printf ("%s ", i->nume);
- printf ("%d ", i->cod);
- printf ("%d ", i->categorie);
- printf ("%.2s ", i->UM);
- printf ("%.2f ", i->cant);
- printf ("%.2f ", i->pret_UM);
- printf ("%s ", i->magazie);
- printf ("\n");
- }
- }
- void afisare_B (B *lista2)
- {
- B *i;
- printf ("\nMagazia B\n");
- for (i=lista2; i!=NULL; i=i->urm2)
- {
- printf ("%s ", i->nume2);
- printf ("%d ", i->cod2);
- printf ("%d ", i->categorie2);
- printf ("%.2s ", i->UM2);
- printf ("%.2f ", i->cant2);
- printf ("%.2f ", i->pret_UM2);
- printf ("%s ", i->magazie2);
- printf ("\n");
- }
- }
- void afisare_M (M *lista3)
- {
- M *i;
- printf ("\nMagazia M\n");
- for (i=lista3; i!=NULL; i=i->urm3)
- {
- printf ("%s ", i->nume3);
- printf ("%d ", i->cod3);
- printf ("%d ", i->categorie3);
- printf ("%.2s ", i->UM3);
- printf ("%.2f ", i->cant3);
- printf ("%.2f ", i->pret_UM3);
- printf ("%s ", i->magazie3);
- printf ("\n");
- }
- }
- C *adauga4 (C *lista4, char nume[20], int cod, int categorie, char UM[3], float cant, float pret_UM, char magazie[2])
- {
- C *c1, *c2, *aux4;
- aux4=(C*)malloc(sizeof(C));
- strcpy(aux4->nume,nume);
- aux4->cod=cod;
- aux4->categorie=categorie;
- strcpy(aux4->UM,UM);
- aux4->cant=cant;
- aux4->pret_UM=pret_UM;
- strcpy(aux4->magazie,magazie);
- for (c1=c2=lista4; c1!=NULL && strcmp(c1->nume,nume)<0; c2=c1, c1=c1->urm4);
- if (c1==c2)
- {
- aux4->urm4=lista4;
- lista4=aux4;
- }
- else
- {
- c2->urm4=aux4;
- aux4->urm4=c1;
- }
- return lista4;
- }
- void citire_fisier_F1_F2 ()
- {
- FILE *f, *f1;
- char nume[20], UM[3], magazie[2];
- int cod, categorie;
- float cant, pret_UM;
- f=fopen("F1.txt", "rt");
- f1=fopen("F2.txt", "rt");
- if (f==NULL)
- {
- printf ("\nFisierul F1.txt nu a fost gasit!\n");
- exit (1);
- }
- else
- {
- while (!feof(f))
- {
- fscanf(f, "%19s", nume);
- fscanf(f, "%d", &cod);
- fscanf(f, "%d", &categorie);
- fscanf(f, "%2s", UM);
- fscanf(f, "%f", &cant);
- fscanf(f, "%f", &pret_UM);
- fscanf(f, "%1s", magazie);
- prim4=adauga4(prim4,nume,cod,categorie,UM,cant,pret_UM,magazie);
- }
- }
- if (f1==NULL)
- {
- printf ("\nFisierul F2.txt nu a fost gasit!\n");
- exit (1);
- }
- else
- {
- while (!feof(f1))
- {
- fscanf(f1, "%19s", nume);
- fscanf(f1, "%d", &cod);
- fscanf(f1, "%d", &categorie);
- fscanf(f1, "%2s", UM);
- fscanf(f1, "%f", &cant);
- fscanf(f1, "%f", &pret_UM);
- fscanf(f1, "%1s", magazie);
- prim4=adauga4(prim4,nume,cod,categorie,UM,cant,pret_UM,magazie);
- }
- }
- }
- void afisare_C (C *lista4)
- {
- C *i;
- printf ("\nMagazia M\n");
- for (i=lista4; i!=NULL; i=i->urm4)
- {
- printf ("%s ", i->nume);
- printf ("%d ", i->cod);
- printf ("%d ", i->categorie);
- printf ("%.2s ", i->UM);
- printf ("%.2f ", i->cant);
- printf ("%.2f ", i->pret_UM);
- printf ("%s ", i->magazie);
- printf ("\n");
- }
- }
- void magazii(C *lista4)
- {
- C *i1;
- for (i1=lista4;i1!=NULL; i1=i1->urm4)
- {
- if (i1->categorie==1)
- {
- strcpy(i1->magazie, "A");
- prim1=adauga1(prim1,i1->nume,i1->cod,i1->categorie,i1->UM,i1->cant,i1->pret_UM,i1->magazie);
- }
- if (i1->categorie==2)
- {
- strcpy(i1->magazie, "B");
- prim2=adauga2(prim2,i1->nume,i1->cod,i1->categorie,i1->UM,i1->cant,i1->pret_UM,i1->magazie);
- }
- if (i1->categorie==3)
- {
- strcpy(i1->magazie, "M");
- prim3=adauga3(prim3,i1->nume,i1->cod,i1->categorie,i1->UM,i1->cant,i1->pret_UM,i1->magazie);
- }
- }
- }
- void cautare_magazie (A *lista1, B *lista2, M *lista3)
- {
- A *i1;
- B *q1;
- M *p1;
- char magazie[2];
- printf ("\nIntroduceti magazia cautata (A, B sau M): \n");
- fflush(stdin);
- gets(magazie);
- printf ("\n");
- for(i1=lista1;i1!=NULL;i1=i1->urm1)
- {
- if(strcmp(i1->magazie,magazie)==0)
- {
- printf ("%s ", i1->nume);
- printf ("%d ", i1->cod);
- printf ("%d ", i1->categorie);
- printf ("%.2s ", i1->UM);
- printf ("%.2f ", i1->cant);
- printf ("%.2f ", i1->pret_UM);
- printf ("%s ", i1->magazie);
- printf ("\n");
- }
- }
- for(q1=lista2;q1!=NULL;q1=q1->urm2)
- {
- if(strcmp(q1->magazie2,magazie)==0)
- {
- printf ("%s ", q1->nume2);
- printf ("%d ", q1->cod2);
- printf ("%d ", q1->categorie2);
- printf ("%.2s ", q1->UM2);
- printf ("%.2f ", q1->cant2);
- printf ("%.2f ", q1->pret_UM2);
- printf ("%s ", q1->magazie2);
- printf ("\n");
- }
- }
- for(p1=lista3;p1!=NULL;p1=p1->urm3)
- {
- if(strcmp(p1->magazie3,magazie)==0)
- {
- printf ("%s ", p1->nume3);
- printf ("%d ", p1->cod3);
- printf ("%d ", p1->categorie3);
- printf ("%.2s ", p1->UM3);
- printf ("%.2f ", p1->cant3);
- printf ("%.2f ", p1->pret_UM3);
- printf ("%s ", p1->magazie3);
- printf ("\n");
- }
- }
- }
- void cauta_nume (A *lista1, B *lista2, M *lista3)
- {
- A *i1;
- B *q1;
- M *p1;
- char nume[20];
- printf ("\nIntroduceti numele materialului cautat: \n");
- fflush(stdin);
- gets(nume);
- for(i1=lista1;i1!=NULL;i1=i1->urm1)
- {
- if(strcmp(i1->nume,nume)==0)
- {
- printf("\nMaterialul cautat se afla in magazia A\n");
- printf ("%s ", i1->nume);
- printf ("%d ", i1->cod);
- printf ("%d ", i1->categorie);
- printf ("%.2s ", i1->UM);
- printf ("%.2f ", i1->cant);
- printf ("%.2f ", i1->pret_UM);
- printf ("%s ", i1->magazie);
- printf ("\n");
- }
- }
- for(q1=lista2;q1!=NULL;q1=q1->urm2)
- {
- if(strcmp(q1->nume2,nume)==0)
- {
- printf("\nMaterialul cautat se afla in magazia B\n");
- printf ("%s ", q1->nume2);
- printf ("%d ", q1->cod2);
- printf ("%d ", q1->categorie2);
- printf ("%.2s ", q1->UM2);
- printf ("%.2f ", q1->cant2);
- printf ("%.2f ", q1->pret_UM2);
- printf ("%s ", q1->magazie2);
- printf ("\n");
- }
- }
- for(p1=lista3;p1!=NULL;p1=p1->urm3)
- {
- if(strcmp(p1->nume3,nume)==0)
- {
- printf("\nMaterialul cautat se afla in magazia M\n");
- printf ("%s ", p1->nume3);
- printf ("%d ", p1->cod3);
- printf ("%d ", p1->categorie3);
- printf ("%.2s ", p1->UM3);
- printf ("%.2f ", p1->cant3);
- printf ("%.2f ", p1->pret_UM3);
- printf ("%s ", p1->magazie3);
- printf ("\n");
- }
- }
- }
- void valoarea_totala (A *lista1, B *lista2, M *lista3)
- {
- A *i1;
- B *q1;
- M *p1;
- float sum1=0, sum2=0, sum3=0, sum_tot;
- for(i1=lista1;i1!=NULL;i1=i1->urm1)
- {
- sum1=sum1+(i1->pret_UM*i1->cant);
- }
- for(q1=lista2;q1!=NULL;q1=q1->urm2)
- {
- sum2=sum2+(q1->pret_UM2*q1->cant2);
- }
- for(p1=lista3;p1!=NULL;p1=p1->urm3)
- {
- sum3=sum3+(p1->pret_UM3*p1->cant3);
- }
- printf ("\nValoarea totala a materialelor aflate in magaziile intreprinderii:\n");
- printf ("Magazia A: %.2f\n",sum1);
- printf ("Magazia B: %.2f\n",sum2);
- printf ("Magazia M: %.2f\n",sum3);
- sum_tot=sum1+sum2+sum3;
- printf ("\n Total: %.2f\n",sum_tot);
- }
- A *sterge_nume_A (A *lista1, char nume_cautat[20])
- {
- A *i1, *i2;
- for(i1=i2=lista1;i1!=NULL && strcmp(i1->nume,nume_cautat)<0; i2=i1, i1=i1->urm1);
- if(i1!=NULL && strcmp(i1->nume,nume_cautat)==0)
- {
- if (i1==i2)
- {
- lista1=lista1->urm1;
- }
- else
- {
- i2->urm1=i1->urm1;
- }
- free(i1);
- }
- return lista1;
- }
- B *sterge_nume_B (B *lista2, char nume_cautat[20])
- {
- B *q1, *q2;
- for(q1=q2=lista2;q1!=NULL && strcmp(q1->nume2,nume_cautat)<0; q2=q1, q1=q1->urm2);
- if(q1!=NULL && strcmp(q1->nume2,nume_cautat)==0)
- {
- if (q1==q2)
- {
- lista2=lista2->urm2;
- }
- else
- {
- q2->urm2=q1->urm2;
- }
- free(q1);
- }
- return lista2;
- }
- M *sterge_nume_M (M *lista3, char nume_cautat[20])
- {
- M *p1, *p2;
- for(p1=p2=lista3;p1!=NULL && strcmp(p1->nume3,nume_cautat)<0; p2=p1, p1=p1->urm3);
- if(p1!=NULL && strcmp(p1->nume3,nume_cautat)==0)
- {
- if (p1==p2)
- {
- lista3=lista3->urm3;
- }
- else
- {
- p2->urm3=p1->urm3;
- }
- free(p1);
- }
- return lista3;
- }
- int muta_material (A *lista1, B *lista2, M *lista3, char nume_mat_mut[20])
- {
- A *i1;
- B *q1;
- M *p1;
- int sw;
- char magazie[2];
- printf ("\nUnde doriti sa il mutati(Magazia A, B sau M): \n");
- fflush(stdin);
- gets(magazie);
- for(i1=lista1;i1!=NULL;i1=i1->urm1)
- {
- if(strcmp(i1->nume,nume_mat_mut)==0)
- {
- if(strcmp(magazie,"B")==0)
- {
- prim2=adauga2(prim2,i1->nume,i1->cod,i1->categorie,i1->UM,i1->cant,i1->pret_UM,i1->magazie);
- return sw=1;
- }
- if (strcmp(magazie,"M")==0)
- {
- prim3=adauga3(prim3,i1->nume,i1->cod,i1->categorie,i1->UM,i1->cant,i1->pret_UM,i1->magazie);
- return sw=1;
- }
- }
- }
- for(q1=lista2;q1!=NULL;q1=q1->urm2)
- {
- if(strcmp(q1->nume2,nume_mat_mut)==0)
- {
- if(strcmp(magazie,"A")==0)
- {
- prim1=adauga1(prim1,q1->nume2,q1->cod2,q1->categorie2,q1->UM2,q1->cant2,q1->pret_UM2,q1->magazie2);
- return sw=2;
- }
- if (strcmp(magazie,"M")==0)
- {
- prim3=adauga3(prim3,q1->nume2,q1->cod2,q1->categorie2,q1->UM2,q1->cant2,q1->pret_UM2,q1->magazie2);
- return sw=2;
- }
- }
- }
- for(p1=lista3;p1!=NULL;p1=p1->urm3)
- {
- if(strcmp(p1->nume3,nume_mat_mut)==0)
- {
- if(strcmp(magazie,"A")==0)
- {
- prim1=adauga1(prim1,p1->nume3,p1->cod3,p1->categorie3,p1->UM3,p1->cant3,p1->pret_UM3,p1->magazie3);
- return sw=3;
- }
- if (strcmp(magazie,"B")==0)
- {
- prim2=adauga2(prim2,p1->nume3,p1->cod3,p1->categorie3,p1->UM3,p1->cant3,p1->pret_UM3,p1->magazie3);
- return sw=3;
- }
- }
- }
- }
- void introduce ()
- {
- char nume[20], UM[3], magazie[2];
- int cod, categorie;
- float cant, pret_UM;
- printf ("\nIntroduceti un material: \n");
- printf ("Nume: \n");
- scanf("%19s", nume);
- printf ("Cod (4 cifre): \n");
- scanf("%d", &cod);
- printf ("Categorie (1, 2 sau 3): \n");
- scanf("%d", &categorie);
- printf ("UM (2 caractere): \n");
- scanf("%2s", UM);
- printf ("Cantitate: \n");
- scanf("%f", &cant);
- printf ("Pret: \n");
- scanf("%f", &pret_UM);
- printf ("In care magazie doriti sa introduceti materiaulul (A, B sau M): \n");
- scanf("%1s", magazie);
- if (strcmp(magazie,"A")==0)
- {
- prim1=adauga1(prim1,nume,cod,categorie,UM,cant,pret_UM,magazie);
- }
- if (strcmp(magazie, "B")==0)
- {
- prim2=adauga2(prim2,nume,cod,categorie,UM,cant,pret_UM,magazie);
- }
- if (strcmp(magazie, "M")==0)
- {
- prim3=adauga3(prim3,nume,cod,categorie,UM,cant,pret_UM,magazie);
- }
- }
- A *sterge_cant_A (A *lista1, float cantitate)
- {
- A *i1, *i2;
- for(i1=i2=lista1;i1!=NULL && (i1->cant > cantitate); i2=i1, i1=i1->urm1);
- if(i1!=NULL && (i1->cant<cantitate))
- {
- if (i1==i2)
- {
- lista1=lista1->urm1;
- }
- else
- {
- i2->urm1=i1->urm1;
- }
- free(i1);
- }
- return lista1;
- }
- void salvare_magazi_fisiere (A *lista1, B *lista2, M *lista3)
- {
- FILE *i, *q, *p;
- i=fopen("magazia_A.txt", "w");
- q=fopen("magazia_B.txt", "w");
- p=fopen("magazia_M.txt", "w");
- if (i==NULL)
- {
- printf ("\nEroare magazia_A.txt.\n");
- exit(1);
- }
- else
- {
- A *i1;
- for(i1=lista1;i1!=NULL;i1=i1->urm1)
- {
- fprintf (i, "%s ", i1->nume);
- fprintf (i, "%d ", i1->cod);
- fprintf (i, "%d ", i1->categorie);
- fprintf (i, "%.2s ", i1->UM);
- fprintf (i, "%.2f ", i1->cant);
- fprintf (i, "%.2f ", i1->pret_UM);
- fprintf (i, "%s ", i1->magazie);
- fprintf (i, "\n");
- }
- fclose(i);
- }
- if (q==NULL)
- {
- printf ("\nEroare magazia_A.txt.\n");
- exit(1);
- }
- else
- {
- B *q1;
- for(q1=lista2;q1!=NULL;q1=q1->urm2)
- {
- fprintf (q, "%s ", q1->nume2);
- fprintf (q, "%d ", q1->cod2);
- fprintf (q, "%d ", q1->categorie2);
- fprintf (q, "%.2s ", q1->UM2);
- fprintf (q, "%.2f ", q1->cant2);
- fprintf (q, "%.2f ", q1->pret_UM2);
- fprintf (q, "%s ", q1->magazie2);
- fprintf (q, "\n");
- }
- fclose(q);
- }
- if (p==NULL)
- {
- printf ("\nEroare magazia_A.txt.\n");
- exit(1);
- }
- else
- {
- M *p1;
- for(p1=lista3;p1!=NULL;p1=p1->urm3)
- {
- fprintf (p, "%s ", p1->nume3);
- fprintf (p, "%d ", p1->cod3);
- fprintf (p, "%d ", p1->categorie3);
- fprintf (p, "%.2s ", p1->UM3);
- fprintf (p, "%.2f ", p1->cant3);
- fprintf (p, "%.2f ", p1->pret_UM3);
- fprintf (p, "%s ", p1->magazie3);
- fprintf (p, "\n");
- }
- fclose(i);
- }
- }
- int main ()
- {
- int opt, s=0, mut;
- float cantitate;
- char nume_cautat[20], nume_mat_mut[20];
- do
- {
- printf ("\n1. Citeste datele din cele doua fisiere, creaza si initializeaza o structura\n de date de tip de lista simplu inlantuita pentru fiecare magazie\n");
- printf ("2. Afiseaza toate materialele dintr-o magazie selectata de la tastatura,\n ordonate dupa nume\n");
- printf ("3. Afiseaza toate materialele cu un anumit nume, citit de la tastatura,\n specificind si magazia in care se afla\n");
- printf ("4. Afiseaza valoarea totala a materialelor aflate in magaziile intreprinderii\n");
- printf ("5. Sterge un material din evident\n");
- printf ("6. Muta un material dintr-o magazie in alta\n");
- printf ("7. Introduce un material de la tastatura\n");
- printf ("8. Sterge toate materialele din magazia A, care se gasesc intr-o cantitate\n mai mica decat o limita citita de la tastatura\n");
- printf ("9. Salvare in fisiere diferite, materialele care se gasesc acum in fiecare magazie\n");
- printf ("10. Parasire program\n\n");
- printf ("Introduceti optiunea dorita:\n");
- scanf ("%d", &opt);
- printf ("\n\n");
- switch (opt)
- {
- case 1:
- citire_fisier_F1_F2();
- //afisare_C(prim4);
- //printf("\n\n\n");
- magazii(prim4);
- afisare_A(prim1);
- afisare_B(prim2);
- afisare_M(prim3);
- break;
- case 2:
- cautare_magazie(prim1,prim2,prim3);
- break;
- case 3:
- cauta_nume(prim1,prim2,prim3);
- break;
- case 4:
- valoarea_totala(prim1,prim2,prim3);
- break;
- case 5:
- printf ("\nIntroduceti numele materialului care doriti sa il stergeti: \n");
- fflush(stdin);
- gets(nume_cautat);
- prim1=sterge_nume_A(prim1,nume_cautat);
- prim2=sterge_nume_B(prim2,nume_cautat);
- prim3=sterge_nume_M(prim3,nume_cautat);
- afisare_A(prim1);
- afisare_B(prim2);
- afisare_M(prim3);
- break;
- case 6:
- printf ("\nIntroduceti numele materialului care doriti sa il mutati: \n");
- fflush(stdin);
- gets(nume_mat_mut);
- mut=muta_material(prim1,prim2,prim3,nume_mat_mut);
- if (mut==1)
- {
- prim1=sterge_nume_A(prim1,nume_mat_mut);
- }
- if (mut==2)
- {
- prim2=sterge_nume_B(prim2,nume_mat_mut);
- }
- if (mut==3)
- {
- prim3=sterge_nume_M(prim3,nume_mat_mut);
- }
- afisare_A(prim1);
- afisare_B(prim2);
- afisare_M(prim3);
- break;
- case 7:
- introduce();
- afisare_A(prim1);
- afisare_B(prim2);
- afisare_M(prim3);
- break;
- case 8:
- printf ("\nIntroduceti cantitate: \n");
- scanf("%f", &cantitate);
- prim1=sterge_cant_A(prim1,cantitate);
- afisare_A(prim1);
- break;
- case 9:
- salvare_magazi_fisiere(prim1,prim2,prim3);
- break;
- case 10:
- exit (0);
- break;
- default: printf ("\nAti introdus optiunea gresita! Mai incercati o data..\n");
- break;
- }
- }
- while (opt!=10);
- getch ();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement