Arama butonu
Bu konudaki kullanıcılar: 1 misafir
5
Cevap
319
Tıklama
0
Öne Çıkarma
Şu kodun işlevini anlayamadım bir türlü
H
10 yıl
Çavuş
Konu Sahibi


Arkadaşlar internetten aşağıdaki gibi bir kod buldu kodda anlamadıgım yerler var.

1- #define YapiBoyutu sizeof(struct kayitYapisi) Burada neden yapının boyutunu almış.Programda ne işe yarıyor.

2- fseek(dosya,i*YapiBoyutu,SEEK_SET); Bide bu kodların programdaki işlevini anlamadım.
fwrite(&insan,YapiBoyutu,1,dosya);
fread(&insan,YapiBoyutu,1,dosya);





#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
#include <string.h>


#define YapiBoyutu sizeof(struct kayitYapisi)

struct kayitYapisi{
char isim[30];
char soyisim[40];
char numara[15];
char doluMu;
};

char anaMenu(void);
void kayitEkle(FILE*);
void kayitSil(FILE*);
void kayitListele(FILE*);


int main()
{
FILE *dosya;
int i;
struct kayitYapisi insan={"","","",'H'};
char karar;

if((dosya=fopen("dosyam.txt","r+"))==NULL)
{
dosya=fopen("dosyam.txt","w+");
fclose(dosya);
dosya=fopen("dosyam.txt","r+");
printf("DOSYA OLUSTURULDU"); getch();
for(i=0;i<30;i++)
{
fseek(dosya,i*YapiBoyutu,SEEK_SET);
fwrite(&insan,YapiBoyutu,1,dosya);
}
}


while(1==1)
{
karar=anaMenu();

switch (karar)
{
case '1': kayitEkle(dosya); break;
case '2': kayitListele(dosya); break;
case '3': kayitSil(dosya); break;
case '4': fclose(dosya); return;
}
}
}

void kayitEkle(FILE *dosya)
{
int i;
struct kayitYapisi insan;



for(i=0;i<30;i++)
{
fseek(dosya,i*YapiBoyutu,SEEK_SET);
fread(&insan,YapiBoyutu,1,dosya);

if(insan.doluMu=='H')
{
printf("\n\tIsim Giriniz: ");
scanf("%s",&insan.isim);

printf("\n\tSoyisim Giriniz: ");
scanf("%s",&insan.soyisim);

printf("\n\tNumara Giriniz: ");
scanf("%s",&insan.numara);

insan.doluMu='E';

fseek(dosya,i*YapiBoyutu,SEEK_SET);
fwrite(&insan,YapiBoyutu,1,dosya);
printf("\n\n\tKayit Eklendi...");

getch();
return;
}
}
}

void kayitSil(FILE *dosya)
{
char tus,eminMi;
int i;
char isim[20];
char numara[15];
int silinecek=-1;
struct kayitYapisi insan={"","","",'H'};

printf("\n\t(1) Isme gore sil");
printf("\n\t(2) Numaraya gore sil");

do{
tus=getch();
}while(tus!='1'&&tus!='2');

switch (tus)
{
case '1': printf("\n\tSilmek istediginiz kisinin ismini giriniz :");
scanf("%s",&isim);
break;
case '2': printf("\n\tSilmek istediginiz kisinin numarasini giriniz :");
scanf("%s",&numara);
break;
}

for(i=0;i<30;i++)
{
silinecek=-1;

fseek(dosya,i*YapiBoyutu,SEEK_SET);
fread(&insan,YapiBoyutu,1,dosya);

if(insan.doluMu=='E')
{
if(tus=='1'&&strcmp(isim,insan.isim)==0) //isme göre aranıyor ise
silinecek=i;

else if(tus=='2'&&strcmp(numara,insan.numara)==0)
silinecek=i;
}

if(silinecek!=-1)
{
printf("\n\tIsim: %s\n\tSoyisim: %s\n\tNumara: %s",insan.isim,insan.soyisim,insan.numara);
printf("\n\n\t\tBu kayidi silmek istediginize emin misiniz ? (E / H)");
do{
eminMi=getch();
eminMi=toupper(eminMi);
}while(eminMi!='E'&&eminMi!='H');

if (eminMi=='E')
{
insan.doluMu='H';
fseek(dosya,i*YapiBoyutu,SEEK_SET);
fwrite(&insan,YapiBoyutu,1,dosya);
printf("\n\tKayit Silindi..");
}

else if(eminMi='H')
printf("\n\tSilme isleminden vazgecildi");

getch();
return;
}
}

printf("\n\t\tKayit Bulunamadi..");
getch();
return;
}

void kayitListele(FILE *dosya)
{
struct kayitYapisi insan={"","","",'H'};
int i;
system("cls");
printf("%10s%20s%20s","Isim","Soyisim","Numara");

for(i=0;i<30;i++)
{
fseek(dosya,i*YapiBoyutu,SEEK_SET);
fread(&insan,YapiBoyutu,1,dosya);

if(insan.doluMu=='E')
{
printf("\n%10s%20s%20s",insan.isim,insan.soyisim,insan.numara);
}
}
getch();
}

char anaMenu()
{
char tus;

system("cls");

puts("\t Ana Menu");
puts("\n\n\t(1) Kayit Ekle");
puts("\n\t(2) Kayitlari Listele");
puts("\n\t(3) Kayit Sil");
puts("\n\t(4) Cikis");

do{
tus=getch();
}while(tus<'1'||tus>'4');

return tus;
}





< Bu mesaj bu kişi tarafından değiştirildi hellbas -- 1 Eylül 2014; 9:47:14 >