Ako može neko da ponogne oko ovog zadatka... Fali mi samo funkcija koja omogucava da izmenim podatke o nekom kontaktu...

Antona11

Početnik
Poruka
1
C:
#include <stdio.h>

#include<stdlib.h>

#include <string.h>

typedef struct {

char ime[50];

char telefon[20];



}Kontakt;



Kontakt *p;            //pokazivac na strukturu, globalni

FILE *datoteka;        //pokazivac na fajl, globalni



void upisUImenik(){   

//funkciji treba struktura (*p) i fajl(*datoteka) da odradi posao, a posto su deklarisani pre, vidi ih kao svoje - zato je prazno ()



   int kraj=0;

   char operacija;

 



 

   datoteka=fopen("imenik.txt","w");

 

   p = (Kontakt*)malloc(sizeof (Kontakt));

   while(kraj==0){

       printf("Da li zelite da nastavite sa unosom ? ('D' ili 'N')\n");

       fflush(stdin);

       scanf("%c", &operacija);

       if(operacija=='N' || operacija=='n'){

           kraj=1;

      

        break;

       }

         fflush(stdin);

       printf("Unesite ime kontakta:\n");    //radi jednostavnijeg citanja kasnije iz fajla, unosite samo ime bez belog znaka

       fflush (stdin);

       gets (p->ime);

       printf("Unesite telefon:\n");

       gets (p->telefon);

       fprintf(datoteka,"%s\t%s\n",p->ime, p->telefon);

    }

       fclose (datoteka);

        free (p);

}

void dodajUImenik(){



   int kraj=0;

   char operacija;

    

   datoteka=fopen("imenik.txt","a");

      p = (Kontakt*)malloc(sizeof (Kontakt));

   while(kraj==0){

       printf("Da li zelite da nastavite sa unosom ? ('D' ili 'N')\n");

       fflush(stdin);

       scanf("%c", &operacija);

       if(operacija=='N' || operacija=='n'){

           kraj=1;

      

        break;

       }

         fflush(stdin);

       printf("Unesite ime kontakta:\n");

       fflush (stdin);

       gets (p->ime);

       printf("Unesite telefon:\n");

       gets (p->telefon);

       fprintf(datoteka,"%s\t\t%s\n",p->ime, p->telefon);

    }

       fclose (datoteka);

        free (p);

}

void CitanjeImenika(){

   int broj;

p = (Kontakt*)malloc(sizeof (Kontakt));

   printf("Sadrzaj imenika: \n");

   datoteka=fopen("imenik.txt","r");

   if(datoteka==NULL){

       printf("Dogodila se greska prilikom otvaranja  datoteke za citanje!\n");

       return;

   }

   printf ("ime\t\t\ttelefon\n");

   while(fscanf(datoteka,"%s%s",p->ime, p->telefon)!=EOF){    //citas dok ima sta

 

       printf("%-20s\t%s\n", p->ime, p->telefon);

   }

   fclose(datoteka);

   free(p);

}



void unesiPrvoSlovoZaKineza(){

   int broj, ima =0;

   char name;

p = (Kontakt*)malloc(sizeof (Kontakt));

   datoteka=fopen("imenik.txt","r");

   if(datoteka==NULL){

       printf("Dogodila se greska prilikom otvaranja  datoteke za citanje!\n");

       return;

   }

   printf ("\nUnesite prvo slovo kontakta\n");

   fflush (stdin);

   scanf("%c", &name);

      

printf("\nPrikaz kontakta \n");

            while(fscanf(datoteka,"%s%s",p->ime, p->telefon)!=EOF){    //citas dok ima sta

            if (p->ime[0]==toupper(name)|| p->ime[0] == tolower(name)){

       printf("\n%s\t\t\t%s\n", p->ime, p->telefon);    //moze se pretrazivati bilo koji deo, vi napravite razne varijante

       ima =1;

                                                //naprimer, samo po prvom slovu i sl

        }    //ide do kraja imenika, ali signalizira ako je nesto nasao

    }

       if (ima ==0)

      

           printf ("\nNepostojeci kontakt!\n");

            

   fclose(datoteka);

   free(p);

}

void PotraziKontakt(){

   int broj, ima =0;

   char name[20];

p = (Kontakt*)malloc(sizeof (Kontakt));

   datoteka=fopen("imenik.txt","r");

   if(datoteka==NULL){

       printf("Dogodila se greska prilikom otvaranja  datoteke za citanje!\n");

       return;

   }

   printf ("\nUnesite deo imena  kontakta\n");

   fflush (stdin);

   gets(name);

      

printf("\nPrikaz kontakta \n");

            while(fscanf(datoteka,"%s%s",p->ime, p->telefon)!=EOF){    //citas dok ima sta

            if (strstr(p->ime, name)!=0){

       printf("\n%s\t\t\t%s\n", p->ime, p->telefon);    //moze se pretrazivati bilo koji deo, vi napravite razne varijante

       ima =1;

                                                //naprimer, samo po prvom slovu i sl

        }    //ide do kraja imenika, ali signalizira ako je nesto nasao

    }

       if (ima ==0)

      

           printf ("\nNepostojeci kontakt!\n");

            

   fclose(datoteka);

   free(p);

}



int main(){

  

   char operacija;

 

   while (1){

   printf ("\n\t\t***Moj imenik***\n\n");

   printf ("\nIzaberite nacin rada:\n");

   printf ("\n1. kreiranje imenika\n2. Listanje imenika\n 3. Pretraga  kontakta\n4. Dodaj kontakt\n5. Trazi prvo slovo\n 6.Menjanje podataka\nBilo sta - kraj\n");

   printf ("\nIzaberite opciju:\n");

 

   fflush (stdin);

   operacija = getchar();

   switch(operacija){

       case '1':           

       upisUImenik();

       system ("pause");

        system ("cls");       

        break;

      

       case '2':

       CitanjeImenika();

       system ("pause");

       system ("cls");

       break;

       case '3':

    PotraziKontakt();

    system ("pause");

       system ("cls");

       break;

       case '4':           

       dodajUImenik();

       system ("pause");

        system ("cls");       

        break;

       case '5': unesiPrvoSlovoZaKineza();

       system ("pause");

        system ("cls");       

        break;

       default:  printf ("\n\t***Kraj***\n");

       exit (1);

       break;

   }

}

return 0;

}
 
Poslednja izmena od moderatora:
Pa sta tu ima, treba da procita celu datoteku, da izmeni dati kontakt i onda upise sve nazad. Za to je potrebno da napravi niz tih kontakata,
tj dinamicki niz. Ne moze samo jednu liniju da izmeni to sigurno. Ovako je najjednostavnije. O tome da koristi gets i da nigde
ne proverava buffer overrun, je ono sto mi je mucno u C-u ;)
 

Back
Top