Alx09

Untitled

Nov 27th, 2019
351
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.24 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct Bibloteca {
  6. char *nume, *titlu, *domeniu;
  7. unsigned short an_ap, nr_pag;
  8. struct Bibloteca *urm;
  9. }B;
  10.  
  11. B *Addbook(B *, char *, char *, unsigned short, unsigned short, char *);
  12. void Afisare(B *);
  13. void Search(B *, char *);
  14.  
  15. int main() {
  16. unsigned short an_ap, nr_pag, opt;
  17. char titlu[26] , autor[26], domeniu[26];
  18. B *prim = NULL;
  19.  
  20. do {
  21. printf("0. Iesire\n");
  22. printf("1. Adaugare carte in bibloteca\n");
  23. printf("2. Afisare lista\n");
  24. printf("3. Cautarea unei carti in bibloteca\n");
  25. printf("Optiunea dumeanoastra este: "); scanf("%hu", &opt);
  26. getchar();
  27. switch (opt)
  28. {
  29. case 0: exit(0); break;
  30. case 1:
  31. system("cls");
  32. printf("Titlu carte: "); fgets(titlu, 25, stdin);
  33. printf("Nume autor: "); fgets(autor, 25, stdin);
  34. printf("Anul aparitei: "); scanf("%hu", &an_ap);
  35. printf("Numarul de pagini: "); scanf("%hu", &nr_pag);
  36. getchar();
  37. printf("Domeniul: "); fgets(domeniu, 25, stdin);
  38. system("cls");
  39. prim = Addbook(prim, titlu, autor, an_ap, nr_pag, domeniu);
  40. break;
  41. case 2:
  42. system("cls");
  43. if (!prim)printf("\nNu exista carti in biloteca! \n\n");
  44. else Afisare(prim);
  45. break;
  46. case 3:
  47. system("cls");
  48. if (!prim)printf("\nNu exista carti in biloteca! \n\n");
  49. else {
  50. printf("Introduceti titlul carti pe care doriti sa o cautati: "); fgets(titlu, 25, stdin);
  51. Search(prim, titlu);
  52. }
  53. break;
  54. default:system("cls");
  55. printf("A-ti introdus o optiunea invalida !!! \n");
  56. break;
  57. }
  58. } while (1);
  59.  
  60. }
  61.  
  62. B *Addbook(B *prim, char *title, char *author, unsigned short year_ap, unsigned short pageNumber, char *domain) {
  63. B * q, *p;
  64. p = (B *)malloc(sizeof(B));
  65. p->nume = (char *)malloc(strlen(author) + 1);
  66. strcpy(p->nume, author);
  67. p->titlu = (char *)malloc(strlen(title) + 1);
  68. strcpy(p->titlu, title);
  69. p->an_ap = year_ap;
  70. p->nr_pag = pageNumber;
  71. p->domeniu = (char *)malloc(sizeof(strlen(domain) + 1));
  72. strcpy(p->domeniu, domain);
  73. p->urm = NULL;
  74. if (p == NULL || p->nume == NULL || p->titlu == NULL || p->domeniu == NULL) {
  75. printf("Eroare la alocarea memoriei !!!");
  76. exit(0);
  77.  
  78. }
  79.  
  80. if (prim == NULL) return p;
  81.  
  82. if (strcmp(p->titlu, title ) > 0) {
  83. p->urm = prim;
  84. return p;
  85. }
  86.  
  87. q = prim;
  88. while (q->urm != NULL && strcmp(q->urm->titlu, title) < 0) q = q->urm;
  89. p->urm = q->urm;
  90. q->urm = p;
  91. return prim;
  92. }
  93.  
  94. void Afisare(B *prim) {
  95. system("cls");
  96. B *q = prim;
  97. printf("Cartile din bibloteca sunt :\n");
  98. while (q)
  99. {
  100. printf("\nTitlu: %s",q->titlu);
  101. printf("Autor: %s", q->nume);
  102. printf("An aparitie: %hu \n", q->an_ap);
  103. printf("Numar de pagini: %hu \n", q->nr_pag);
  104. printf("Domeniu: %s\n\n", q->domeniu);
  105. q = q->urm;
  106. }
  107.  
  108. }
  109.  
  110. void Search(B * prim, char *title) {
  111. B *q = prim;
  112. system("cls");
  113.  
  114. unsigned short ok = 1;
  115. while (ok && q) {
  116. if (strcmp(q->titlu, title) == 0) {
  117. printf("Cartea a fost gasita:\n");
  118. printf("\nTitlu: %s", q->titlu);
  119. printf("Autor: %s", q->nume);
  120. printf("An aparitie: %hu \n", q->an_ap);
  121. printf("Numar de pagini: %hu \n", q->nr_pag);
  122. printf("Domeniu: %s\n\n", q->domeniu);
  123. ok = 0;
  124. }
  125. q = q->urm;
  126. }
  127. if (ok ) printf("Cartea nu se afla in bibloteca\n");
  128. }
Advertisement
Add Comment
Please, Sign In to add comment