Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Definirati strukturu osoba(ime, prezime, godina rođenja) i napisati program koji :
- a)dinamički dodaje novi element na početak liste,
- b)ispisuje listu,
- c)dinamički dodaje novi element na kraj liste,
- d)pronalazi element u listi(po prezimenu),
- e)briše određeni element iz liste,
- U zadatku se ne smiju koristiti globalne varijable.*/
- /*Prethodnom zadatku dodati funkcije:
- a)dinamički dodaje novi element iza određenog elementa,
- b)dinamički dodaje novi element ispred određenog elementa,
- c)sortira listu po prezimenima osoba,
- d)upisuje listu u datoteku,
- e)čita listu iz datoteke. */
- #define _CRT_SECURE_NO_WARNINGS
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- #include<conio.h>
- typedef struct osoba;
- typedef struct osoba* Position;
- struct osoba {
- char ime[10];
- char prezime[20];
- int godinaRodjenja;
- Position Next;
- };
- void clrscr()
- {
- system("@cls||clear");
- }
- void MainMenu() {
- printf("Opcije:\n");
- printf("Dodaj novi element na pocetak liste: 1\n");
- printf("Ispsi listu: 2\n");
- printf("Dodaj novi element na kraj liste: 3\n");
- printf("Pronadji element u listi: 4\n");
- printf("Izbrisi element iz liste 5\n");
- printf("Dodaj element iza elementa 6\n");
- printf("Dodaj element prije elementa: 7\n");
- printf("Sortiraj listu po prezimenima: 8\n");
- printf("Upis liste u datoteku: U\n");
- printf("Ispis liste iz datoteke: I\n");
- printf("Clean C\n");
- printf("Pomoc: H\n");
- printf("Exit: E\n");
- return;
- }
- Position zadnji(Position);
- Position predZadnji(Position);
- void BrisanjeClana(Position);
- void DodajNaPocetak(Position P);
- void Unos(Position);
- void Novi(Position *);
- void Ispis(Position);
- void DodajNaKraj(Position);
- Position Trazi(Position);
- Position TraziPredhodnog(Position);
- void Brisanje(Position );
- void DodajIza(Position);
- void DodajPrije(Position);
- void Sortiraj(Position);
- void UpisDatoteka(Position);
- void IspisDatoteka(Position);
- //Dodavanje elementa na pocetak
- void DodajNaPocetak(Position P)
- {
- Position q = NULL;
- Novi(&q);
- Unos(q);
- q->Next = P->Next;
- P->Next = q;
- return;
- }
- //Stvaranje novog elementa
- void Novi(Position *head)
- {
- Position q = NULL;
- *head = (Position)malloc(sizeof(osoba));
- if (*head == NULL){
- printf("Greska u alociranju memorije novoga clana\n");
- return; }
- q = *head;
- q->Next = NULL;
- return;
- }
- int main()
- {
- osoba Head;
- Position pT = NULL, pZ = NULL;;
- Head.Next = NULL;
- char com = 'A';
- while (com != 'E')
- {
- MainMenu();
- scanf("%c", &com);
- switch (com)
- {
- case '1':
- DodajNaPocetak(&Head);
- break;
- case '2':
- Ispis(Head.Next);
- break;
- case '3':
- DodajNaKraj(&Head);
- break;
- case 'C':
- clrscr();
- break;
- case '4':
- pT=Trazi(Head.Next);
- //napisat uvjet i umisto == stavit samo pridjeljivanje i onda ko retard izgubit 2 ure oko toga =, bravo ja
- if (pT == NULL)
- {
- printf("Trazeni student nije pronadjen\n"); break;
- }
- printf("Trazena osoba je %s %s %d\n", pT->ime, pT->prezime, pT->godinaRodjenja);
- break;
- case '5':
- printf("Brisanje elementa iz liste:\n");
- Brisanje(Head.Next);
- Ispis(Head.Next);
- break;
- case '6':
- printf("Dodavanje elementa iza trazenog elementa:\n");
- DodajIza(&Head);
- break;
- case '7':
- printf("Dodavanje elementa prije trazenog elementa:\n");
- DodajPrije(&Head);
- break;
- case '8':
- printf("Sortiranje liste po prezimenima..\n");
- Sortiraj(Head.Next);
- Ispis(Head.Next);
- break;
- case'U':
- printf("Upis lite u datoteku..\n");
- UpisDatoteka(Head.Next);
- break;
- case'I':
- printf("Ispis liste iz datoteke...\n");
- IspisDatoteka(&Head);
- //pZ=predZadnji(&Head);
- //BrisanjeClana(pZ);
- break;
- }
- }
- getchar();
- return 0;
- }
- //Upis podataka o studentu
- void Unos(Position P)
- {
- printf("Unesite ime prezime i godinu rodjenja studenta\n");
- scanf(" %s %s %d", P->ime, P->prezime, &P->godinaRodjenja);
- return;
- }
- //Ispis studenta
- void Ispis(Position P)
- {
- while (P != NULL)
- {
- printf(" %s %s %d \n", P->ime, P->prezime, P->godinaRodjenja);
- P = P->Next;
- }
- return;
- }
- //Dodavanje na kraj
- void DodajNaKraj(Position P)
- {
- P = zadnji(P);
- DodajNaPocetak(P);
- return;
- }
- //Pronalazenje zadnjeg elementa liste
- Position zadnji(Position P)
- {
- while (P->Next != NULL)
- P = P->Next;
- return P;
- }
- Position Trazi(Position P)
- {
- char TrazenoPrezime[20];
- printf("Upisi prezime studenta kojeg trazis\n");
- scanf(" %s", TrazenoPrezime);
- while (P ->Next!= NULL && strcmp(P->prezime, TrazenoPrezime) != 0)
- P = P->Next;
- return P;
- }
- Position TraziPredhodnog(Position P)
- {
- char TrazenoPrezime[20];
- printf("Upisi prezime studenta kojeg trazis\n");
- scanf(" %s", TrazenoPrezime);
- while (P->Next->Next != NULL && strcmp(P->Next->prezime, TrazenoPrezime) != 0)
- P = P->Next;
- return P;
- }
- void Brisanje(Position P)
- {
- char sObrisi[20];
- Position temp;
- printf("Upisi prezime studenta kojeg zelis obrisati:\n");
- scanf(" %s", sObrisi);
- while (P->Next!=NULL&&strcmp(P->Next->prezime, sObrisi)!=0)
- {
- P = P->Next;
- }
- if (P->Next == NULL)
- P = NULL;
- temp = P->Next;
- P->Next = P->Next->Next;
- free(temp);
- }
- void DodajIza(Position P)
- {
- P = Trazi(P);
- DodajNaPocetak(P);
- }
- //Nac clan prije, i isti proces;
- void DodajPrije(Position P)
- {
- P = TraziPredhodnog(P);
- DodajNaPocetak(P);
- }
- //sortiranje liste po prezimenima
- void Sortiraj(Position P)
- {
- char tempIme[10], tempPrezime[20];
- int tempGodina;
- Position i, j;
- for (i = P; i != NULL; i = i->Next)
- {
- for (j = i->Next; j != NULL; j = j->Next)
- {
- if (strcmp(i->prezime, j->prezime) > 0)
- {
- strcpy(tempIme, i->ime);
- strcpy(tempPrezime, i->prezime);
- tempGodina = (i->godinaRodjenja);
- strcpy(i->ime, j->ime);
- strcpy(i->prezime, j->prezime);
- i->godinaRodjenja = j->godinaRodjenja;
- strcpy(j->ime, tempIme);
- strcpy(j->prezime, tempPrezime);
- j->godinaRodjenja = tempGodina;
- }
- }
- }
- }
- void UpisDatoteka(Position P)
- {
- FILE *f;
- f = fopen("lista.txt", "w");
- while (P != NULL)
- {
- fprintf(f, "%s %s %d", P->ime, P->prezime, P->godinaRodjenja);
- P = P->Next;
- if (P != NULL)
- fprintf(f, "\n");
- }
- }
- void IspisDatoteka(Position P)
- {
- FILE *f=NULL;
- //int i=0,j=0;
- Position q = NULL;
- f = fopen("lista.txt", "r");
- if (f == NULL)
- printf("Greska u otvaranju datoteke\n");
- /* while (!feof(f))
- {
- i++;
- }
- rewind(f);
- for(j=0;j<i-1;j++)
- {
- Novi(&q);
- fscanf(f, " %s %s %d", q->ime, q->prezime, q->godinaRodjenja);
- q->Next = P->Next;
- P->Next = q;
- }*/
- while (!feof(f))
- {
- Novi(&q);
- fscanf(f, " %s %s %d", q->ime, q->prezime, q->godinaRodjenja);
- q->Next = P->Next;
- P->Next = q;
- }
- }
- Position predZadnji(Position P)
- {
- while (P->Next->Next != NULL)
- P = P->Next;
- return P;
- }
- void BrisanjeClana(Position P)
- {
- Position temp;
- temp = P->Next;
- P->Next = P->Next->Next;
- free(temp);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement