Advertisement
Crackbone

OOPVjezbe3

Jan 10th, 2019
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.39 KB | None | 0 0
  1. /*
  2. Definirati strukturu osoba(ime, prezime, godina rođenja) i napisati program koji :
  3. a)dinamički dodaje novi element na početak liste,
  4. b)ispisuje listu,
  5. c)dinamički dodaje novi element na kraj liste,
  6. d)pronalazi element u listi(po prezimenu),
  7. e)briše određeni element iz liste,
  8. U zadatku se ne smiju koristiti globalne varijable.*/
  9.  
  10. /*Prethodnom zadatku dodati funkcije:
  11. a)dinamički dodaje novi element iza određenog elementa,
  12. b)dinamički dodaje novi element ispred određenog elementa,
  13. c)sortira listu po prezimenima osoba,
  14. d)upisuje listu u datoteku,
  15. e)čita listu iz datoteke. */
  16.  
  17. #define _CRT_SECURE_NO_WARNINGS
  18. #include<stdio.h>
  19. #include<string.h>
  20. #include<stdlib.h>
  21. #include<conio.h>
  22.  
  23. typedef struct osoba;
  24. typedef struct osoba* Position;
  25.  struct osoba {
  26.     char ime[10];
  27.     char prezime[20];
  28.     int godinaRodjenja;
  29.     Position Next;
  30. };
  31.  void clrscr()
  32.  {
  33.      system("@cls||clear");
  34.  }
  35.  void MainMenu() {
  36.      printf("Opcije:\n");
  37.      printf("Dodaj novi element na pocetak liste: 1\n");
  38.      printf("Ispsi listu:                         2\n");
  39.      printf("Dodaj novi element na kraj liste:    3\n");
  40.      printf("Pronadji element u listi:            4\n");
  41.      printf("Izbrisi element iz liste             5\n");
  42.      printf("Dodaj element iza elementa           6\n");
  43.      printf("Dodaj element prije elementa:        7\n");
  44.      printf("Sortiraj listu po prezimenima:       8\n");
  45.      printf("Upis liste u datoteku:               U\n");
  46.      printf("Ispis liste iz datoteke:             I\n");
  47.      printf("Clean                                C\n");
  48.      printf("Pomoc:                               H\n");
  49.      printf("Exit:                                E\n");
  50.  
  51.      return;
  52.  }
  53.  Position zadnji(Position);
  54.  Position predZadnji(Position);
  55.  void BrisanjeClana(Position);
  56.  void DodajNaPocetak(Position P);
  57.  void Unos(Position);
  58.  void Novi(Position *);
  59.  void Ispis(Position);
  60.  void DodajNaKraj(Position);
  61.  Position Trazi(Position);
  62.  Position TraziPredhodnog(Position);
  63.  void Brisanje(Position );
  64.  void DodajIza(Position);
  65.  void DodajPrije(Position);
  66.  void Sortiraj(Position);
  67.  void UpisDatoteka(Position);
  68.  void IspisDatoteka(Position);
  69.  
  70.  //Dodavanje elementa na pocetak
  71.  void DodajNaPocetak(Position P)
  72.  {
  73.      Position q = NULL;
  74.      Novi(&q);
  75.      Unos(q);
  76.      q->Next = P->Next;
  77.      P->Next = q;
  78.      return;
  79.  }
  80.  //Stvaranje novog elementa
  81.  void Novi(Position *head)
  82.  {
  83.      Position q = NULL;
  84.      *head = (Position)malloc(sizeof(osoba));
  85.      if (*head == NULL){
  86.          printf("Greska u alociranju memorije novoga clana\n");
  87.      return; }
  88.      q = *head;
  89.      q->Next = NULL;
  90.      return;
  91.  }
  92.  int main()
  93.  {
  94.      osoba Head;
  95.      Position pT = NULL, pZ = NULL;;
  96.      Head.Next = NULL;
  97.      char com = 'A';
  98.      while (com != 'E')
  99.      {
  100.          
  101.          MainMenu();
  102.          scanf("%c", &com);
  103.          switch (com)
  104.          {
  105.          case '1':
  106.              DodajNaPocetak(&Head);
  107.              break;
  108.          case '2':
  109.              Ispis(Head.Next);
  110.              break;
  111.          case '3':
  112.              DodajNaKraj(&Head);
  113.              break;
  114.          case 'C':
  115.              clrscr();
  116.              break;
  117.          case '4':
  118.              pT=Trazi(Head.Next);
  119.              //napisat uvjet i umisto == stavit samo pridjeljivanje i onda ko retard izgubit 2 ure oko toga =, bravo ja
  120.              if (pT == NULL)
  121.              {
  122.                  printf("Trazeni student nije pronadjen\n"); break;
  123.              }
  124.  
  125.              printf("Trazena osoba je %s %s %d\n", pT->ime, pT->prezime, pT->godinaRodjenja);
  126.              break;
  127.          case '5':
  128.              printf("Brisanje elementa iz liste:\n");
  129.        
  130.            
  131.              Brisanje(Head.Next);
  132.              Ispis(Head.Next);
  133.              break;
  134.          case '6':
  135.              printf("Dodavanje elementa iza trazenog elementa:\n");
  136.              DodajIza(&Head);
  137.              break;
  138.          case '7':
  139.              printf("Dodavanje elementa prije trazenog elementa:\n");
  140.              DodajPrije(&Head);
  141.              break;
  142.          case '8':
  143.              printf("Sortiranje liste po prezimenima..\n");
  144.            
  145.              Sortiraj(Head.Next);
  146.              Ispis(Head.Next);
  147.              break;
  148.          case'U':
  149.              printf("Upis lite u datoteku..\n");
  150.              UpisDatoteka(Head.Next);
  151.              break;
  152.          case'I':
  153.              printf("Ispis liste iz datoteke...\n");
  154.              IspisDatoteka(&Head);
  155.              //pZ=predZadnji(&Head);
  156.              //BrisanjeClana(pZ);
  157.  
  158.              break;
  159.          }
  160.          
  161.      }
  162.      getchar();
  163.  
  164.      return 0;
  165.  }
  166.  //Upis podataka o studentu
  167.  void Unos(Position P)
  168.  {
  169.      printf("Unesite ime prezime i godinu rodjenja studenta\n");
  170.      scanf(" %s %s %d", P->ime, P->prezime, &P->godinaRodjenja);
  171.      return;
  172.  }
  173.  //Ispis studenta
  174.  void Ispis(Position P)
  175.  {
  176.      while (P != NULL)
  177.      {
  178.          printf(" %s %s %d \n", P->ime, P->prezime, P->godinaRodjenja);
  179.          P = P->Next;
  180.      }
  181.  
  182.      return;
  183.  }
  184.  //Dodavanje na kraj
  185.  void DodajNaKraj(Position P)
  186.  {
  187.      P = zadnji(P);
  188.  
  189.      DodajNaPocetak(P);
  190.      return;
  191.  }
  192.  //Pronalazenje zadnjeg elementa liste
  193.  Position zadnji(Position P)
  194.  {
  195.      while (P->Next != NULL)
  196.          P = P->Next;
  197.      return P;
  198.  }
  199.  
  200.  Position Trazi(Position P)
  201.  {
  202.      char TrazenoPrezime[20];
  203.      printf("Upisi prezime studenta kojeg trazis\n");
  204.      scanf(" %s", TrazenoPrezime);
  205.      while (P ->Next!= NULL && strcmp(P->prezime, TrazenoPrezime) != 0)
  206.          P = P->Next;
  207.  
  208.    
  209.  
  210.      return P;
  211.  }
  212.  Position TraziPredhodnog(Position P)
  213.  {
  214.      char TrazenoPrezime[20];
  215.      printf("Upisi prezime studenta kojeg trazis\n");
  216.      scanf(" %s", TrazenoPrezime);
  217.      while (P->Next->Next != NULL && strcmp(P->Next->prezime, TrazenoPrezime) != 0)
  218.          P = P->Next;
  219.  
  220.  
  221.  
  222.      return P;
  223.  }
  224.  
  225.  void Brisanje(Position P)
  226.  {
  227.      char sObrisi[20];
  228.      Position temp;
  229.      printf("Upisi prezime studenta kojeg zelis obrisati:\n");
  230.      scanf(" %s", sObrisi);
  231.      while (P->Next!=NULL&&strcmp(P->Next->prezime, sObrisi)!=0)
  232.      {
  233.          P = P->Next;
  234.      }
  235.  
  236.      if (P->Next == NULL)
  237.          P = NULL;
  238.      temp = P->Next;
  239.      P->Next = P->Next->Next;
  240.      free(temp);
  241.  }
  242.  
  243.  void DodajIza(Position P)
  244.  {
  245.      P = Trazi(P);
  246.      DodajNaPocetak(P);
  247.  }
  248.  
  249.  //Nac clan prije, i isti proces;
  250.  void DodajPrije(Position P)
  251.  {
  252.      P = TraziPredhodnog(P);
  253.      DodajNaPocetak(P);
  254.  
  255.  
  256.  }
  257.  
  258.  //sortiranje liste po prezimenima
  259.  
  260.  void Sortiraj(Position P)
  261.  {
  262.      char tempIme[10], tempPrezime[20];
  263.      int tempGodina;
  264.  
  265.      Position i, j;
  266.    
  267.      for (i = P; i != NULL; i = i->Next)
  268.      {
  269.          for (j = i->Next; j != NULL; j = j->Next)
  270.          {
  271.              if (strcmp(i->prezime, j->prezime) > 0)
  272.              {
  273.                  strcpy(tempIme, i->ime);
  274.                  strcpy(tempPrezime, i->prezime);
  275.                  tempGodina = (i->godinaRodjenja);
  276.  
  277.                  strcpy(i->ime, j->ime);
  278.                  strcpy(i->prezime, j->prezime);
  279.                  i->godinaRodjenja = j->godinaRodjenja;
  280.  
  281.                  strcpy(j->ime, tempIme);
  282.                  strcpy(j->prezime, tempPrezime);
  283.                  j->godinaRodjenja = tempGodina;
  284.  
  285.              }
  286.          }
  287.      }
  288.  }
  289.  
  290.  void UpisDatoteka(Position P)
  291.  {
  292.      FILE *f;
  293.  
  294.      f = fopen("lista.txt", "w");
  295.      while (P != NULL)
  296.      {
  297.          fprintf(f, "%s %s %d", P->ime, P->prezime, P->godinaRodjenja);
  298.          P = P->Next;
  299.          if (P != NULL)
  300.              fprintf(f, "\n");
  301.      }
  302.  }
  303.  
  304.  void IspisDatoteka(Position P)
  305.  {
  306.  
  307.      FILE *f=NULL;
  308.      //int i=0,j=0;
  309.      Position q = NULL;
  310.      f = fopen("lista.txt", "r");
  311.      if (f == NULL)
  312.          printf("Greska u otvaranju datoteke\n");
  313.     /* while (!feof(f))
  314.      {
  315.          i++;
  316.      }
  317.     rewind(f);
  318.  
  319.      for(j=0;j<i-1;j++)
  320.      {
  321.          Novi(&q);
  322.          fscanf(f, " %s %s %d", q->ime, q->prezime, q->godinaRodjenja);
  323.          q->Next = P->Next;
  324.          P->Next = q;
  325.      }*/
  326.  
  327.      while (!feof(f))
  328.      {
  329.          Novi(&q);
  330.          fscanf(f, " %s %s %d", q->ime, q->prezime, q->godinaRodjenja);
  331.          q->Next = P->Next;
  332.          P->Next = q;
  333.      }
  334.  
  335.  }
  336.  Position predZadnji(Position P)
  337.  {
  338.      while (P->Next->Next != NULL)
  339.          P = P->Next;
  340.      return P;
  341.  }
  342.  
  343.  void BrisanjeClana(Position P)
  344.  {
  345.    
  346.      Position temp;
  347.      
  348.      temp = P->Next;
  349.      P->Next = P->Next->Next;
  350.      free(temp);
  351.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement