Advertisement
Guest User

probl2

a guest
Jun 28th, 2016
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.07 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. typedef struct subls
  7. {
  8. char *nume, *prenume;
  9. int vechime;
  10. struct subls *urm_sl;
  11.  
  12. }sublista;
  13.  
  14. typedef struct list
  15. {
  16. char *departament;
  17. sublista *prim_sl;
  18. struct list *urm;
  19. }nod;
  20.  
  21.  
  22. nod *cautare_departament(nod *prim, char *departament)
  23. {
  24. nod *q;
  25. for(q=prim; q!=NULL && stricmp(q->departament,departament) !=0 ;q=q->urm);
  26. if(q!=NULL && stricmp(q->departament,departament) == 0)
  27. return q;
  28. return NULL;
  29. }
  30.  
  31. nod *adaugare_departament ( nod *prim, char departament[20])
  32. {
  33. nod *q,*q1,*q2;
  34. q=cautare_departament (prim,departament);
  35. if(q == NULL)
  36. {
  37. q=(nod*)malloc(sizeof(nod));
  38. q->departament=(char*)malloc(sizeof(departament)+1);
  39. q->prim_sl=NULL;
  40. q->urm=NULL;
  41. strcpy(q->departament,departament);
  42.  
  43.  
  44. for(q1=q2=prim; q1!=NULL && stricmp(q1->departament,q->departament)<0; q2=q1,q1=q1->urm);
  45. if (q1 == q2) //pe prima pozitie
  46. {
  47. q->urm=q1;
  48. return q;
  49. }
  50. else
  51. {
  52. q2->urm=q;
  53. q->urm=q1;
  54. return prim;
  55. }
  56. }
  57. return prim;
  58. }
  59.  
  60. sublista *adaugare_sublista (sublista *prim_sl, char *nume, char *prenume, int vechime)
  61. {
  62. sublista *q,*q1,*q2;
  63. q=(sublista*)malloc(sizeof(sublista));
  64. q->nume=(char*)malloc(strlen(nume)+1);
  65. q->prenume=(char*)malloc(strlen(prenume)+1);
  66. strcpy(q->nume,nume);
  67. strcpy(q->prenume,prenume);
  68. q->vechime=vechime;
  69. q->urm_sl=NULL;
  70.  
  71.  
  72. for(q1=q2=prim_sl;q1!=NULL && stricmp(q1->nume,q->nume)<0; q2=q1,q1=q1->urm_sl);
  73.  
  74. if(q1==q2)
  75. {
  76. q->urm_sl=q1;
  77. return q;
  78. }
  79. else
  80. {
  81. q2->urm_sl=q;
  82. q->urm_sl=q1;
  83. return prim_sl;
  84.  
  85. }
  86.  
  87. }
  88.  
  89. nod *incarcare_fisier ( nod *prim)
  90. {
  91. int vechime;
  92. char nume[20],prenume[20],departament[20];
  93. nod *q;
  94. FILE *f;
  95. f=fopen("original.txt","rt");
  96. if(f==NULL)
  97. {
  98. printf("fisierul nu a fost gasit!! ");
  99. getch();
  100. exit(1);
  101. }
  102. else
  103. {
  104. while(fscanf(f,"%s%s%d%s",nume, prenume,&vechime,departament) != EOF)
  105. {
  106. prim=adaugare_departament(prim,departament);
  107. q=cautare_departament(prim,departament);
  108. q->prim_sl=adaugare_sublista(q->prim_sl,nume,prenume,vechime);
  109. }
  110.  
  111. }
  112. fclose(f);
  113. printf("\n\tIncarcare realizata!\n");
  114. return prim;
  115. }
  116.  
  117. void afisare(nod *prim)
  118. {
  119. nod *q;
  120. sublista *p;
  121. printf("\t________________________________________________________\n");
  122. for(q=prim;q!=NULL;q=q->urm)
  123. {
  124. printf("\t%s: \n",q->departament);
  125. for(p=q->prim_sl;p!=NULL;p=p->urm_sl)
  126. printf("\t\t%s %s - %d\n",p->nume,p->prenume,p->vechime);
  127.  
  128. printf("\t________________________________________________________\n");
  129. }
  130. }
  131.  
  132. void afisare_departament (nod *prim, char *departament)
  133. {
  134. nod *q;
  135. sublista *p;
  136. printf("\n\tCadrele didactice de la departamnetul %s:\n\n",departament);
  137. for(q=prim;q!=NULL;q=q->urm)
  138. for(p=q->prim_sl;p!=NULL;p=p->urm_sl)
  139. if(stricmp(q->departament,departament)==0)
  140. printf("\t\t%s %s\n",p->nume,p->prenume);
  141. }
  142.  
  143. void salvare_fisier(nod *prim, int vechime)
  144. {
  145. nod *q;
  146. sublista *p;
  147. FILE *f;
  148. f=fopen("vechime.txt","wt");
  149. if(f==NULL)
  150. {
  151. printf("Nu s-a putut crea fisierul!");
  152. getch();
  153. exit(1);
  154. }
  155. else
  156. {
  157. for(q=prim;q!=NULL;q=q->urm)
  158. for(p=q->prim_sl;p!=NULL;p=p->urm_sl)
  159. if(p->vechime>=vechime)
  160. fprintf(f,"%10s %10s %10s %10d\n",p->nume,p->prenume,q->departament,p->vechime);
  161. }
  162. fclose(f);
  163. printf("Datele au fost scrise cu succes in fisierul 'vechime.txt'.\n");
  164. }
  165.  
  166.  
  167. // ------------------------------------------------------------------------------------------------------------------- //
  168.  
  169.  
  170.  
  171. void main()
  172. {
  173. int opt,vechime;
  174. char departament[20];
  175. nod *prim=NULL;
  176. do
  177. {
  178. scanf("%d",&opt);
  179. switch (opt)
  180. {
  181. case 0:
  182. return;
  183. break;
  184. case 1:
  185. prim=incarcare_fisier(prim);
  186. break;
  187. case 2:
  188. afisare(prim);
  189. break;
  190. case 3:
  191. printf("Dati departamentul: ");
  192. fflush(stdin);
  193. gets(departament);
  194. afisare_departament(prim,departament);
  195. break;
  196. case 4:
  197. system("cls");
  198. printf("\nDati vechimea minima: ");
  199. scanf("%d",&vechime);
  200. salvare_fisier(prim,vechime);
  201. break;
  202. default: printf("nu e bineee");
  203. break;
  204. }
  205. }while(opt!=0);
  206. getch();
  207. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement