Advertisement
Crackbone

SP-Zadatak2

Oct 24th, 2019
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.21 KB | None | 0 0
  1. /*2.Definirati strukturu osoba (ime, prezime, godina rođenja) i napisati program koji:
  2. a)dinamički dodaje novi element na početak liste,
  3. b)ispisuje listu,
  4. c)dinamički dodaje novi element na kraj liste,
  5. d)pronalazi element u listi (po prezimenu),
  6. e)briše određeni element iz liste,
  7. U zadatku se ne smiju koristiti globalne varijable.*/
  8.  
  9.  
  10. #define _CRT_SECURE_NO_WARNINGS
  11. #define MAX_NAME 40
  12.  
  13. #include<stdio.h>
  14. #include<string.h>
  15. #include<stdlib.h>
  16. //Struktura
  17. struct osoba;
  18. typedef struct osoba* Posoba;
  19. struct osoba
  20. {
  21.     char ime[MAX_NAME];
  22.     char prezime[MAX_NAME];
  23.     int godina_rodjenja;
  24.     Posoba Next;
  25.  
  26. };
  27.  
  28. //Funkcije
  29.  
  30. int unos(Posoba);
  31. int ispis_liste(Posoba);
  32. int izbornik();
  33. int unos_na_kraj(Posoba);
  34. Posoba trazi_prezime_prethodni(Posoba);
  35. Posoba trazi_prezime(Posoba);
  36. int brisi_prezime(Posoba);
  37.  
  38. int main()
  39. {
  40.     struct osoba Head;
  41.     int x = 0,y=0;
  42.     Posoba p1 = NULL;
  43.    
  44.     Head.Next = NULL;
  45.  
  46.     while (x!= 6)
  47.     {
  48.         x = izbornik();
  49.         if (1 == x)
  50.         {
  51.             y = unos(&Head);
  52.             if (y != 1) {
  53.                 printf("Greska tokom unosa!\n");
  54.                 y = 0;
  55.             }
  56.         }
  57.         else if (2 == x)
  58.         {
  59.             y = ispis_liste(Head.Next);
  60.             if (y != 1) {
  61.                 printf("Greska kod ispisa liste\n");
  62.                 y = 0;
  63.             }
  64.         }
  65.  
  66.         else if (3 == x)
  67.         {
  68.             y = unos_na_kraj(&Head);
  69.             if (y != 1) {
  70.                 printf("Greska kod unosa na kraj liste\n");
  71.                 y = 0;
  72.             }
  73.         }
  74.         else if (4 == x)
  75.         {
  76.             p1=trazi_prezime(Head.Next);
  77.             if (p1 != NULL)
  78.                 printf("Trazena osoba je: %s %s %d \n", p1->ime, p1->prezime, p1->godina_rodjenja);
  79.             else
  80.                 printf("Trazena osoba nije pronadjena\n");
  81.            
  82.         }
  83.         else if (5 == x)
  84.         {
  85.             y = brisi_prezime(&Head);
  86.             if (y != 1)
  87.             {
  88.                 printf("Greska tokom brisanja\n");
  89.                 y = 0;
  90.             }
  91.         }
  92.     }
  93.  
  94.    
  95.  
  96.     getchar();
  97.     getchar();
  98.     return 0;
  99. }
  100.  
  101.  
  102. //Unos elementa liste
  103. int unos(Posoba P)
  104. {
  105.     Posoba q;
  106.     q = (Posoba)malloc(sizeof(struct osoba));
  107.     if (NULL==q)
  108.     {
  109.         printf("Greska prilikom alokacije memorije");
  110.         return -1;
  111.     }
  112.     else
  113.     {
  114.         printf("Unesite ime prezime i godinu rodjenja osobe\n");
  115.         scanf(" %s %s %d", q->ime, q->prezime, &q->godina_rodjenja);
  116.  
  117.         q->Next = P->Next;
  118.         P->Next = q;
  119.         return 1;
  120.     }
  121.  
  122. }
  123. //Ispis liste od poslanog clana
  124. int ispis_liste(Posoba P)
  125. {
  126.     printf("Ispis Liste:\n");
  127.     if (NULL==P)
  128.     {
  129.  
  130.         printf("Prazna lista");
  131.         return -1;
  132.     }
  133.     else
  134.     {
  135.         while (P != NULL)
  136.         {
  137.  
  138.             printf("Ime: %s   Prezime: %s   Godina Rodjenja %d \n", P->ime, P->prezime, P->godina_rodjenja);
  139.             P = P->Next;
  140.            
  141.         }
  142.         return 1;
  143.  
  144.     }
  145. }
  146.  
  147.  
  148. //Funkcija izborinka
  149. int izbornik()
  150. {
  151.     printf("\n Izbornik:\n");
  152.     char c = '0';
  153.     printf("Dodavanje novog clana na pocetak: 1\n");
  154.     printf("Ispis liste:                      2\n");
  155.     printf("Dodavanje na kraj liste:          3\n");
  156.     printf("Pronalazi element liste(prezime)  4\n");
  157.     printf("Briše element liste               5\n");
  158.     printf("Exit                              6\n");
  159.     scanf(" %c", &c);
  160.     switch (c)
  161.     {
  162.     case '1':
  163.         return 1;
  164.         break;
  165.     case '2':
  166.         return 2;
  167.         break;
  168.     case '3':
  169.         return 3;
  170.         break;
  171.     case '4':
  172.         return 4;
  173.         break;
  174.     case '5':
  175.         return 5;
  176.         break;
  177.     case '6':
  178.         return 6;
  179.         break;
  180.     default:
  181.         printf("Nepodrzan odabir\n");
  182.         return -1;
  183.        
  184.     }
  185.  
  186. }
  187.  
  188. //Unos Na Kraj liste
  189. int unos_na_kraj(Posoba P)
  190. {
  191.     while (P->Next!=NULL)
  192.     {
  193.         P = P->Next;
  194.     }
  195.     unos(P);
  196.     return 1;
  197. }
  198.  
  199.  
  200. //Trazenje prezimena prethodnog
  201. Posoba trazi_prezime_prethodni(Posoba P)
  202. {
  203.     char prezime[MAX_NAME];
  204.     printf("\nUpisite trazeno prezime\n");
  205.     scanf(" %s", prezime, MAX_NAME);
  206.     while ((P->Next != NULL) && (strcmp(P->Next->prezime, prezime) != 0))
  207.     {
  208.         P = P->Next;
  209.  
  210.     }
  211.     if (NULL == P->Next)
  212.         P = NULL;
  213. }
  214.  
  215.  
  216. //Trazenje prezimena
  217. Posoba trazi_prezime(Posoba P)
  218. {
  219.     Posoba temp = NULL;
  220.     temp = trazi_prezime_prethodni(P);
  221.     if (NULL == temp)
  222.         return temp;
  223.     else
  224.     {
  225.         temp = temp->Next;
  226.         return temp;
  227.     }
  228. }
  229.  
  230. //Brisanje pleba po prezimenu
  231.  
  232. int brisi_prezime(Posoba P)
  233. {
  234.     Posoba temp_njega=NULL;
  235.     Posoba temp_prethodnika=NULL;
  236.     char prezime[MAX_NAME];
  237.  
  238.     printf("Unesite prezime osobe koju zelite izbrisati:\n");
  239.     temp_prethodnika = trazi_prezime_prethodni(P->Next);
  240.     temp_njega = temp_prethodnika->Next;
  241.  
  242.     temp_prethodnika->Next = temp_njega->Next;
  243.     free(temp_njega);
  244.  
  245.  
  246.     return 1;
  247. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement