Advertisement
Guest User

Cealalta chestie lunga pe langa liste

a guest
Jan 17th, 2020
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.57 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <string.h>
  5. typedef struct
  6. {
  7. int numar_pagini,anul_aparitiei;
  8. char titlu[20],autor[20],domeniu[20];
  9. }autor;
  10. void citire(autor *a,int *nr)
  11. {
  12. (*nr)++;
  13. printf("Introduceti titlul cartii: ");
  14. fflush(stdin);
  15. gets((a+*nr)->titlu);
  16. printf("Introduceti autorul cartii: ");
  17. fflush(stdin);
  18. gets((a+*nr)->autor);
  19. printf("Introduceti domeniul cartii: ");
  20. fflush(stdin);
  21. gets((a+*nr)->domeniu);
  22. printf("Introduceti numarul de pagini al cartii: ");
  23. scanf("%d",&(a+*nr)->numar_pagini);
  24. printf("Introduceti anul aparitiei cartii: ");
  25. scanf("%d",&(a+*nr)->anul_aparitiei);
  26. }
  27. void afisare(autor *a,int nr)
  28. {
  29. printf("\n%5s \t %5s \t %5s \t %5d \t %5d",(a+nr)->titlu,(a+nr)->autor,(a+nr)->domeniu,(a+nr)->numar_pagini,(a+nr)->anul_aparitiei);
  30. }
  31. void cautare_domeniu(autor *a, int *nr,char domeniu[20])
  32. {
  33. int i;
  34. printf("Introduceti domeniul pe care il cautati: ");
  35. fflush(stdin);
  36. gets(domeniu);
  37. for(i=0;i<=(*nr);i++)
  38. if(strcmp((a+i)->domeniu,domeniu)==0)
  39. afisare(&a[0],i);
  40. }
  41. void cautare_an(autor *a,int *nr,int an)
  42. {
  43. int i;
  44. printf("Introduceti anul pe care il cautati: ");
  45. scanf("%d",&an);
  46. for(i=0;i<=(*nr);i++)
  47. if((a+i)->anul_aparitiei==an)
  48. afisare(&a[0],i);
  49. }
  50. void cautare_titlu(autor *a, int *nr,char titlu[20])
  51. {
  52. int i;
  53. printf("Introduceti domeniul pe care il cautati: ");
  54. fflush(stdin);
  55. gets(titlu);
  56. for(i=0;i<=(*nr);i++)
  57. if(strcmp((a+i)->titlu,titlu)==0)
  58. afisare(&a[0],i);
  59. }
  60. void stergere(autor *a,int *nr, char titlu2[20])
  61. {
  62. int i,j,k=0;
  63. printf("Introduceti cartea pe care o stergeti: ");
  64. fflush(stdin);
  65. gets(titlu2);
  66. for(i=0;i<=(*nr-k);i++)
  67. if(strcmp((a+i)->titlu,titlu2)==0)
  68. {
  69. k++;
  70. for(j=i;j<=(*nr-k);j++)
  71. *(a+j)=*(a+j+1);
  72. i--;
  73. }
  74. *nr=*nr-k;
  75. }
  76. void sortare(autor *a,int *nr)
  77. {
  78. int i,j,k;
  79. autor aux;
  80. do
  81. {
  82. k=1;
  83. for(i=0;i<(*nr);i++)
  84. if(strcmp((a+i)->titlu,(a+i+1)->titlu)>0)
  85. {
  86. aux=*(a+i+1);
  87. *(a+i+1)=*(a+i);
  88. *(a+i)=aux;
  89. k=0;
  90. }
  91. }while(!k);
  92. }
  93. void salvare(autor *a,int *nr)
  94. {
  95. FILE *f;
  96. int i;
  97. f=fopen("bac1.in","wt");
  98. for(i=0;i<=(*nr);i++)
  99. if((a+i)->anul_aparitiei>=2000)
  100. {
  101. fprintf(f,"\nTitlul cartii este: %s",(a+i)->titlu);
  102. fprintf(f,"\nAutorul cartii este: %s",(a+i)->autor);
  103. fprintf(f,"\nDomeniu cartii este: %s",(a+i)->domeniu);
  104. fprintf(f,"\nNumarul de pagini al cartii este: %d",(a+i)->numar_pagini);
  105. fprintf(f,"\nAnul aparitiei cartii este: %d\n\n",(a+i)->anul_aparitiei);
  106. }
  107. fclose(f);
  108. }
  109. int main()
  110. {
  111. autor a[10];
  112. int optiune,nr=-1,i,an;
  113. char domeniu[20],titlu[20],titlu2[20];
  114. do
  115. {
  116. printf("\n1. Adaugarea unei carti\n");
  117. printf("2. Afisarea tuturor cartilor\n");
  118. printf("3. Afisarea cartilor dintr-un domeniu citit de la tastatura\n");
  119. printf("4. Cautarea unei carti dupa titlu\n");
  120. printf("5. Cautarea unei carti dupa anul aparitiei\n");
  121. printf("6. Stergerea unei carti\n");
  122. printf("7. Sortarea cartilor dupa titlu dintr-un anumit domeniu citit de la tastatura\n");
  123. printf("8. Salvarea cartior care au anul aparitiei mai mare sau egal cu 2000 intr-un fisier\n");
  124. printf("0. Iesire\n");
  125. printf("Introduceti o optiune: ");
  126. scanf("%d",&optiune);
  127. switch(optiune)
  128. {
  129. case 1:
  130. citire(&a[0],&nr);
  131. break;
  132. case 2:
  133. for(i=0;i<=nr;i++)
  134. afisare(&a[0],i);
  135. break;
  136. case 3:
  137. cautare_domeniu(&a[0],&nr,domeniu);
  138. break;
  139. case 4:
  140. cautare_titlu(&a[0],&nr,titlu);
  141. break;
  142. case 5:
  143. cautare_an(&a[0],&nr,an);
  144. break;
  145. case 6:
  146. stergere(&a[0],&nr,titlu2);
  147. for(i=0;i<=nr;i++)
  148. afisare(&a[0],i);
  149. break;
  150. case 7:
  151. sortare(&a[0],&nr);
  152. for(i=0;i<=nr;i++)
  153. afisare(&a[0],i);
  154. break;
  155. case 8:
  156. salvare(&a[0],&nr);
  157. break;
  158. case 0:
  159. exit(0);
  160. default:
  161. printf("Optiune gresita");
  162. break;
  163. }
  164. }while(optiune);
  165. getch();
  166. return 0;
  167. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement