Guest User

Untitled

a guest
May 20th, 2018
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.70 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4.  
  5. /* definisemo licnost */
  6. typedef struct licnost{
  7. char ime[30];
  8. char prezime[30];
  9. char brind[10];
  10. int gus;
  11. struct licnost *next;
  12. } student;
  13.  
  14.  
  15.  
  16. int brojStd(student *vrh);
  17. void upisStd(student **vrh,char* ime,char* prezime,char* brind,int gus,int pozicija);
  18. void ispisStd(student *vrh);
  19. void brisanjeStd(student **vrh,char* brIndexa);
  20. void unosD(student *vrh);
  21. void citanjeD(student **vrh);
  22.  
  23. int main(){
  24.  
  25.  
  26. student *vrh=NULL;
  27.  
  28. int odg, gus,pozicija;
  29. char ime[20], prezime[20], brind[10], brIndexa[10];
  30.  
  31. do{
  32. printf("\t Opcije:\n");
  33. printf("\t1. Unesi podatke o studentu\n");
  34. printf("\t2. Prikazi sve studente\n");
  35. printf("\t3. Brisanje studenta\n");
  36. printf("\t4. Cuvanje u datoteku\n");
  37. printf("\t5. Unos iz datoteke\n");
  38. printf("\t6. Izlaz\n");
  39. scanf("%d", &odg);
  40.  
  41. switch(odg){
  42. case 1:
  43. fflush(stdin);
  44. printf("\nIme: ");
  45. gets(ime);
  46. printf("\nPrezime: ");
  47. gets(prezime);
  48. printf("\nBroj Indeksa: ");
  49. gets(brind);
  50. printf("\nGodina upisa: ");
  51. scanf("%d", &gus);
  52. printf("\nUnesite poziciju: ");
  53. scanf("%d",&pozicija);
  54. upisStd(&vrh, ime, prezime, brind, gus,pozicija);
  55. break;
  56. case 2:
  57. printf("Lista studenata: \n");
  58. ispisStd(vrh);
  59. break;
  60. case 3:
  61. fflush(stdin);
  62. printf("Unesite broj indeksa: \n");
  63. gets(brIndexa);
  64. brisanjeStd(vrh,brIndexa);
  65. break;
  66. case 4:
  67. unosD(vrh);
  68. break;
  69. case 5:
  70. citanjeD(&vrh);
  71. break;
  72. }
  73. } while (odg!=6);
  74. }
  75.  
  76.  
  77. /*prebrojavanje broja studenata*/
  78. int brojStd(student *vrh){
  79. int brStd=0;
  80. while(vrh){
  81. brStd++;
  82. vrh=vrh->next;
  83. }
  84. return brStd;
  85. }
  86. /*upis studenta na poziciju koju zelimo */
  87. void upisStd(student **vrh,char* ime,char* prezime,char* brind,int gus,int pozicija){
  88.  
  89. if(pozicija>=0 && pozicija<=brojStd(*vrh)){
  90. int i; /*lokalni brojac koji ce pomeriti novi el. do mesta koje zelimo */
  91. student *novi; novi=(student*)malloc(sizeof(student));
  92.  
  93. student *ispred=*vrh,*iza=*vrh;
  94. strcpy(novi->ime,ime);
  95. strcpy(novi->prezime,prezime);
  96. strcpy(novi->brind,brind);
  97. novi->gus=gus;
  98. novi->next=*vrh;
  99.  
  100. for(i=0;i<pozicija;i++)
  101. {
  102. iza=ispred; /*element iza postajeo onaj sa vrha, a na mesto na vrhu dolazi novi */
  103. ispred=ispred->next;
  104. }
  105. novi->next=ispred;
  106. if(ispred==*vrh)
  107. *vrh=novi;
  108. else
  109. iza->next=novi; }}
  110.  
  111. /*stavimo oba pokazivaca da pokazuju na vrh, i onaj iza njega izjednacimo sa vrhom,
  112. a na vrh stavljamo nove elemente i tako ce nam se taj novi elemnt pomerati dole do
  113. mesta na koje zelimo da ga pozicioniramo, unesemo novi el. on ce promeniti mesta sa onim
  114. iza njega, onaj iza ce promeniti mesta sa njim i tako do pozicije
  115. */
  116.  
  117.  
  118.  
  119. void ispisStd(student *vrh){
  120. puts("PRIKAZ STUDENATA");
  121. puts("------------------------");
  122.  
  123. while(vrh){
  124.  
  125.  
  126. printf("Student %s, %s, %s, %d\n",vrh->ime,vrh->prezime,vrh->brind,vrh->gus);
  127.  
  128. vrh=vrh->next; } /*da predje na drugu licnost */
  129.  
  130.  
  131. puts("------------------------");
  132.  
  133.  
  134. }
  135.  
  136. void brisanjeStd(student **vrh,char* brIndexa){
  137. student *ispred=*vrh,*iza=NULL,*temp=NULL;
  138. while(ispred){
  139. if (!strcmp(ispred->brind,brIndexa)){
  140. temp=ispred;
  141. ispred=ispred->next;
  142. if(temp==*vrh){
  143. *vrh=(*vrh)->next; }/* ako se taj sa brojem indexa nalazi na vrhu, da se na vrh stavi
  144. } sledeci jer se ovaj brise, mora se locirati sledeci vrh */
  145. else {
  146. iza->next=ispred;
  147. free(temp);
  148. } }
  149. else { iza=ispred;
  150. ispred=ispred->next;
  151. }
  152. }
  153. }
  154.  
  155.  
  156. void brisanjeCvorova(student **vrh)
  157. {
  158. student *temp;
  159. while(*vrh){
  160. temp=*vrh;
  161. *vrh=(*vrh)->next;
  162. free(temp);}
  163. }
  164.  
  165.  
  166. void unosD(student *vrh){
  167.  
  168. FILE *f=fopen("studenti.txt","w");
  169.  
  170.  
  171. while(vrh!=NULL){
  172. fprintf(f,"%s, %s, %s, %d,\n",vrh->ime,vrh->prezime,vrh->brind,vrh->gus);
  173. vrh=vrh->next;
  174. }
  175. fclose(f);
  176. }
  177.  
  178. void citanjeD(student **vrh){
  179.  
  180. FILE *f=fopen("studenti.txt","r");
  181. char ime[20],prezime[20],brind[10];
  182. int gus, pozicija;
  183.  
  184. while(fscanf(f,"%s %s %s %d %d",ime,prezime,brind,&gus)!=EOF)
  185. upisStd(vrh,ime,prezime,brind,gus,brojStd(*vrh));
  186. fclose(f); }
Add Comment
Please, Sign In to add comment