Kod:
/*rastgele erişimli bir dosyada isim ve numaraya göre arama yapan c kodu*/
#include<stdio.h>
#include<conio.h>
#include<string.h>
#define Boyut 5000 //girilecek kayıt sayısına göre düzenlenebilir
typedef struct _veri{
int No;
char Ad[30];
char Soyad[30];
long int TC;
bool Durum;
}veri;
int main(){
FILE *oku;
if((oku=fopen("kayit.dat","r+"))==NULL) //dosyayı okuma ve yazma modunda açar
{
printf("Dosya Acilamadin");
getch();
return 0;
}
else
{
/*ara fonksiyonu başı*/
int secim,kno,bulunanlar[Boyut]={-1};
char kad[30];
veri veriokuyucu = {0,"","",0,true};
do{
printf("1-No'ya gore araman2-Isme gore araman:?");
scanf("%d",&secim);
}while(!(secim==1 || secim==2));
switch(secim){
case 1:
printf("Kullanici numarasini giriniz: ");
scanf("%d",&kno);
for(int i=0,k=0;i<Boyut;k++,i++){//dosyadaki bütün kayıtlara tek tek bakarak arama yapar
fseek(oku,i*sizeof(veri),SEEK_SET);
fread(&veriokuyucu,sizeof(veri),1,oku);
if(veriokuyucu.No == kno)
bulunanlar[k]=i; //bulunan kaydın sıra numarasını bulunanlar dizisine kaydeder
} //sonradan bunları teker teker yazdırmak için sıra numarasına bakar
break;
case 2:
printf("Kullanici adini giriniz: ");
scanf("%s",&kad);
for(int i=0,k=0;i<Boyut;k++,i++){
fseek(oku,i*sizeof(veri),SEEK_SET);
fread(&veriokuyucu,sizeof(veri),1,oku);
if(strstr(veriokuyucu.Ad,kad)!=NULL) //ikinci stringin ilk stringde olup olmadığını
bulunanlar[k]=i; //kontrol eder yoksa NULL değer döndürür.
}
break;
}
if(bulunanlar[0]==-1)
printf("Aranilan kriterlere uygun kayit bulunamadi...n");
else
for(int i=0;i<Boyut;i++){ //bulunan kayıtları ekrana yazdırma
if(bulunanlar[i]!=-1){
fseek(oku,bulunanlar[i]*sizeof(veri),SEEK_SET);
fread(&veriokuyucu,sizeof(veri),1,oku);
/*EkranaYaz(veriokuyucu);*/ //**** EkranaYaz(veri); prototipinde tanımlı olduğu varsayılır
}
}
/*ara fonksiyonu sonu*/
getch();
return 0;
}//else'in kırlangıç parantezi
}//main'in kırlangıç parantezi