Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef struct subls
- {
- char *nume, *prenume;
- int vechime;
- struct subls *urm_sl;
- }sublista;
- typedef struct list
- {
- char *departament;
- sublista *prim_sl;
- struct list *urm;
- }nod;
- nod *cautare_departament(nod *prim, char *departament)
- {
- nod *q;
- for(q=prim; q!=NULL && stricmp(q->departament,departament) !=0 ;q=q->urm);
- if(q!=NULL && stricmp(q->departament,departament) == 0)
- return q;
- return NULL;
- }
- nod *adaugare_departament ( nod *prim, char departament[20])
- {
- nod *q,*q1,*q2;
- q=cautare_departament (prim,departament);
- if(q == NULL)
- {
- q=(nod*)malloc(sizeof(nod));
- q->departament=(char*)malloc(sizeof(departament)+1);
- q->prim_sl=NULL;
- q->urm=NULL;
- strcpy(q->departament,departament);
- for(q1=q2=prim; q1!=NULL && stricmp(q1->departament,q->departament)<0; q2=q1,q1=q1->urm);
- if (q1 == q2) //pe prima pozitie
- {
- q->urm=q1;
- return q;
- }
- else
- {
- q2->urm=q;
- q->urm=q1;
- return prim;
- }
- }
- return prim;
- }
- sublista *adaugare_sublista (sublista *prim_sl, char *nume, char *prenume, int vechime)
- {
- sublista *q,*q1,*q2;
- q=(sublista*)malloc(sizeof(sublista));
- q->nume=(char*)malloc(strlen(nume)+1);
- q->prenume=(char*)malloc(strlen(prenume)+1);
- strcpy(q->nume,nume);
- strcpy(q->prenume,prenume);
- q->vechime=vechime;
- q->urm_sl=NULL;
- for(q1=q2=prim_sl;q1!=NULL && stricmp(q1->nume,q->nume)<0; q2=q1,q1=q1->urm_sl);
- if(q1==q2)
- {
- q->urm_sl=q1;
- return q;
- }
- else
- {
- q2->urm_sl=q;
- q->urm_sl=q1;
- return prim_sl;
- }
- }
- nod *incarcare_fisier ( nod *prim)
- {
- int vechime;
- char nume[20],prenume[20],departament[20];
- nod *q;
- FILE *f;
- f=fopen("original.txt","rt");
- if(f==NULL)
- {
- printf("fisierul nu a fost gasit!! ");
- getch();
- exit(1);
- }
- else
- {
- while(fscanf(f,"%s%s%d%s",nume, prenume,&vechime,departament) != EOF)
- {
- prim=adaugare_departament(prim,departament);
- q=cautare_departament(prim,departament);
- q->prim_sl=adaugare_sublista(q->prim_sl,nume,prenume,vechime);
- }
- }
- fclose(f);
- printf("\n\tIncarcare realizata!\n");
- return prim;
- }
- void afisare(nod *prim)
- {
- nod *q;
- sublista *p;
- printf("\t________________________________________________________\n");
- for(q=prim;q!=NULL;q=q->urm)
- {
- printf("\t%s: \n",q->departament);
- for(p=q->prim_sl;p!=NULL;p=p->urm_sl)
- printf("\t\t%s %s - %d\n",p->nume,p->prenume,p->vechime);
- printf("\t________________________________________________________\n");
- }
- }
- void afisare_departament (nod *prim, char *departament)
- {
- nod *q;
- sublista *p;
- printf("\n\tCadrele didactice de la departamnetul %s:\n\n",departament);
- for(q=prim;q!=NULL;q=q->urm)
- for(p=q->prim_sl;p!=NULL;p=p->urm_sl)
- if(stricmp(q->departament,departament)==0)
- printf("\t\t%s %s\n",p->nume,p->prenume);
- }
- void salvare_fisier(nod *prim, int vechime)
- {
- nod *q;
- sublista *p;
- FILE *f;
- f=fopen("vechime.txt","wt");
- if(f==NULL)
- {
- printf("Nu s-a putut crea fisierul!");
- getch();
- exit(1);
- }
- else
- {
- for(q=prim;q!=NULL;q=q->urm)
- for(p=q->prim_sl;p!=NULL;p=p->urm_sl)
- if(p->vechime>=vechime)
- fprintf(f,"%10s %10s %10s %10d\n",p->nume,p->prenume,q->departament,p->vechime);
- }
- fclose(f);
- printf("Datele au fost scrise cu succes in fisierul 'vechime.txt'.\n");
- }
- // ------------------------------------------------------------------------------------------------------------------- //
- void main()
- {
- int opt,vechime;
- char departament[20];
- nod *prim=NULL;
- do
- {
- scanf("%d",&opt);
- switch (opt)
- {
- case 0:
- return;
- break;
- case 1:
- prim=incarcare_fisier(prim);
- break;
- case 2:
- afisare(prim);
- break;
- case 3:
- printf("Dati departamentul: ");
- fflush(stdin);
- gets(departament);
- afisare_departament(prim,departament);
- break;
- case 4:
- system("cls");
- printf("\nDati vechimea minima: ");
- scanf("%d",&vechime);
- salvare_fisier(prim,vechime);
- break;
- default: printf("nu e bineee");
- break;
- }
- }while(opt!=0);
- getch();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement