Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- /* definisemo licnost */
- typedef struct licnost{
- char ime[30];
- char prezime[30];
- char brind[10];
- int gus;
- struct licnost *next;
- } student;
- int brojStd(student *vrh);
- void upisStd(student **vrh,char* ime,char* prezime,char* brind,int gus,int pozicija);
- void ispisStd(student *vrh);
- void brisanjeStd(student **vrh,char* brIndexa);
- void unosD(student *vrh);
- void citanjeD(student **vrh);
- int main(){
- student *vrh=NULL;
- int odg, gus,pozicija;
- char ime[20], prezime[20], brind[10], brIndexa[10];
- do{
- printf("\t Opcije:\n");
- printf("\t1. Unesi podatke o studentu\n");
- printf("\t2. Prikazi sve studente\n");
- printf("\t3. Brisanje studenta\n");
- printf("\t4. Cuvanje u datoteku\n");
- printf("\t5. Unos iz datoteke\n");
- printf("\t6. Izlaz\n");
- scanf("%d", &odg);
- switch(odg){
- case 1:
- fflush(stdin);
- printf("\nIme: ");
- gets(ime);
- printf("\nPrezime: ");
- gets(prezime);
- printf("\nBroj Indeksa: ");
- gets(brind);
- printf("\nGodina upisa: ");
- scanf("%d", &gus);
- printf("\nUnesite poziciju: ");
- scanf("%d",&pozicija);
- upisStd(&vrh, ime, prezime, brind, gus,pozicija);
- break;
- case 2:
- printf("Lista studenata: \n");
- ispisStd(vrh);
- break;
- case 3:
- fflush(stdin);
- printf("Unesite broj indeksa: \n");
- gets(brIndexa);
- brisanjeStd(vrh,brIndexa);
- break;
- case 4:
- unosD(vrh);
- break;
- case 5:
- citanjeD(&vrh);
- break;
- }
- } while (odg!=6);
- }
- /*prebrojavanje broja studenata*/
- int brojStd(student *vrh){
- int brStd=0;
- while(vrh){
- brStd++;
- vrh=vrh->next;
- }
- return brStd;
- }
- /*upis studenta na poziciju koju zelimo */
- void upisStd(student **vrh,char* ime,char* prezime,char* brind,int gus,int pozicija){
- if(pozicija>=0 && pozicija<=brojStd(*vrh)){
- int i; /*lokalni brojac koji ce pomeriti novi el. do mesta koje zelimo */
- student *novi; novi=(student*)malloc(sizeof(student));
- student *ispred=*vrh,*iza=*vrh;
- strcpy(novi->ime,ime);
- strcpy(novi->prezime,prezime);
- strcpy(novi->brind,brind);
- novi->gus=gus;
- novi->next=*vrh;
- for(i=0;i<pozicija;i++)
- {
- iza=ispred; /*element iza postajeo onaj sa vrha, a na mesto na vrhu dolazi novi */
- ispred=ispred->next;
- }
- novi->next=ispred;
- if(ispred==*vrh)
- *vrh=novi;
- else
- iza->next=novi; }}
- /*stavimo oba pokazivaca da pokazuju na vrh, i onaj iza njega izjednacimo sa vrhom,
- a na vrh stavljamo nove elemente i tako ce nam se taj novi elemnt pomerati dole do
- mesta na koje zelimo da ga pozicioniramo, unesemo novi el. on ce promeniti mesta sa onim
- iza njega, onaj iza ce promeniti mesta sa njim i tako do pozicije
- */
- void ispisStd(student *vrh){
- puts("PRIKAZ STUDENATA");
- puts("------------------------");
- while(vrh){
- printf("Student %s, %s, %s, %d\n",vrh->ime,vrh->prezime,vrh->brind,vrh->gus);
- vrh=vrh->next; } /*da predje na drugu licnost */
- puts("------------------------");
- }
- void brisanjeStd(student **vrh,char* brIndexa){
- student *ispred=*vrh,*iza=NULL,*temp=NULL;
- while(ispred){
- if (!strcmp(ispred->brind,brIndexa)){
- temp=ispred;
- ispred=ispred->next;
- if(temp==*vrh){
- *vrh=(*vrh)->next; }/* ako se taj sa brojem indexa nalazi na vrhu, da se na vrh stavi
- } sledeci jer se ovaj brise, mora se locirati sledeci vrh */
- else {
- iza->next=ispred;
- free(temp);
- } }
- else { iza=ispred;
- ispred=ispred->next;
- }
- }
- }
- void brisanjeCvorova(student **vrh)
- {
- student *temp;
- while(*vrh){
- temp=*vrh;
- *vrh=(*vrh)->next;
- free(temp);}
- }
- void unosD(student *vrh){
- FILE *f=fopen("studenti.txt","w");
- while(vrh!=NULL){
- fprintf(f,"%s, %s, %s, %d,\n",vrh->ime,vrh->prezime,vrh->brind,vrh->gus);
- vrh=vrh->next;
- }
- fclose(f);
- }
- void citanjeD(student **vrh){
- FILE *f=fopen("studenti.txt","r");
- char ime[20],prezime[20],brind[10];
- int gus, pozicija;
- while(fscanf(f,"%s %s %s %d %d",ime,prezime,brind,&gus)!=EOF)
- upisStd(vrh,ime,prezime,brind,gus,brojStd(*vrh));
- fclose(f); }
Add Comment
Please, Sign In to add comment