Kurtbeyi
Misafir Editör
Rastgele Erişimli Telefon Rehberi Uygulaması
Kod:
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
#define SIZE 1000
struct rehber{
char isim[70];
char telno[15];
};
typedef struct rehber Rehber;
**** yenikayit(FILE *);
**** guncelle(FILE *);
**** sil(FILE *);
**** dosyaolustur(FILE *);
**** listele(FILE *);
int menu();
int ara(char [][20],char *);
int kelimelereayir(char *,char [][20]);
**** kucukharf(char *);
char turkce_tolower(char);
**** arama(FILE *fPtr);
**** yazdirhtml(char *,Rehber [],int);
**** turkce(char *,FILE *);
bool kontrolet(char *,FILE *);
int main()
{
Rehber a;
FILE *p;
int secim;
if((p=fopen("rehber.txt","r+"))==NULL)
{
printf("dosya okuma modunda acilamadi\nYazma modunda acilacak\n");
p=fopen("rehber.txt","w+");
dosyaolustur(p);
}
else
printf("dosya okuma modunda acildi\n");
while((secim=menu())!=6)
{
switch(secim)
{
case 1:yenikayit(p);break;
case 2:guncelle(p);break;
case 3:sil(p);break;
case 4:listele(p);break;
case 5:arama(p);break;
default:puts("gecersiz secim");break;
}
}
return 0;
}
**** yenikayit(FILE *fPtr)
{
Rehber a;
int i=0;
do{
fseek( fPtr, i * sizeof( Rehber ), SEEK_SET );
fread(&a,sizeof(Rehber),1,fPtr);
i++;
}while(strcmp(a.isim,"")!=0&&i<SIZE);
printf("isim giriniz\n");
fflush(stdin);
gets(a.isim);
printf("Telefon numarasi giriniz(orn:262xxxxxxx)\n");
fflush(stdin);
gets(a.telno);
if(kontrolet(a.telno,fPtr)==false) {
fseek( fPtr, (i-1) * sizeof( Rehber ), SEEK_SET );
fwrite(&a,sizeof(Rehber),1,fPtr);
}
else
printf("bu telefon numarasi kayitlarda bulunmakta\n\n");
}
**** guncelle(FILE *fPtr)
{
int i,secim,j=0;
Rehber a;
do{
j++;
if(j==3)
break;
if(j>1)
printf("belirtilen kayit bulunamadi\n");
printf("guncellenecek kayit numarasini giriniz\n") ;
scanf("%d",&i);
fseek( fPtr, (i-1) * sizeof( Rehber ), SEEK_SET );
fread(&a,sizeof(Rehber),1,fPtr);
}while(strcmp(a.isim,"")==0);
if(j!=3)
{
printf("Kayit :%s %s\n",a.isim,a.telno);
printf("\n1-ismi guncelle\n2-Telefon numarasini guncelle\n?\n");
scanf("%d",&secim);
if(secim==1){
printf("Yeni isimi giriniz\n");
fflush(stdin);
gets(a.isim);
}
else if(secim==2)
{
printf("Telefon numarasi giriniz(orn:262xxxxxxx)\n");
fflush(stdin);
gets(a.telno);
}
if(secim<3&&secim>0)
{
fseek( fPtr, (i-1) * sizeof( Rehber ), SEEK_SET );
fwrite(&a,sizeof(Rehber),1,fPtr);
printf("guncelleme yapildi\n\n");
}
else
printf("gecersiz secim\n\n");
}
else
printf("guncellenecek kayit bulunamadi\n\n");
}
**** sil(FILE *fPtr)
{
int i,j=0;
Rehber a;
do{
j++;
if(j==3)
break;
if(j>1)
printf("belirtilen sirada kayit bulunmamakta\n");
printf("silinecek kayit numarasini giriniz\n") ;
scanf("%d",&i);
fseek( fPtr, (i-1) * sizeof( Rehber ), SEEK_SET );
fread(&a,sizeof(Rehber),1,fPtr);
}while(strcmp(a.isim,"")==0);
if(j!=3)
{
strcpy(a.isim,"");
strcpy(a.telno,"");
fseek( fPtr, (i-1) * sizeof( Rehber ), SEEK_SET );
fwrite(&a,sizeof(Rehber),1,fPtr);
printf("%d. siradaki kayit silindi\n",i);
}
else
printf("silinecek kayit bulunamadi\n");
}
**** arama(FILE *fPtr)
{
Rehber r[20],a;
int dizi[20];
char kelime[70];
char b[5][20];
int i,j=0,ksayisi;
puts("Aranilacak kelimeyi veya telefon numarasini giriniz\n");
fflush(stdin);
gets(kelime);
ksayisi=kelimelereayir(kelime,b);
for(i=0;i<SIZE;i++)
{
fseek( fPtr, i * sizeof( Rehber ), SEEK_SET );
fread(&a,sizeof(Rehber),1,fPtr);
if(strcmp(a.isim,"")!=0)
if(ara(b,a.isim)>=ksayisi||ara(b,a.telno)>0)
{
dizi[j]=i+1;
strcpy(r[j].isim,a.isim);
strcpy(r[j].telno,a.telno);
j++;
if(j==20)
break;
}
}
if(j>0)
{
printf("\n%d sonuc bulundu\n\n",j);
yazdirhtml(b[0],r,j);
for(int i=0;i<j;i++)
printf("%d. kayit:%s %s\n",dizi[i],r[i].isim,r[i].telno);
printf("\nSonuclar ayni zamanda %s dosyasina yazildi\n\n",b[0]);
}
else
printf("\nHicbir sonuc bulunamadi\n");
}
int menu()
{
int secim;
printf("1-kayit ekleme\n"
"2-kayit guncelleme\n"
"3-kayit silme\n"
"4-tum kayitlari listele\n"
"5-arama\n"
"6-cikis\n");
scanf("%d",&secim);
return secim;
}
**** dosyaolustur(FILE *fPtr)
{
int i;
Rehber a;
strcpy(a.isim,"");
strcpy(a.telno,"");
for(i=0;i<SIZE;i++)
fwrite(&a,sizeof(Rehber),1,fPtr);
}
**** listele(FILE *fPtr)
{
Rehber a;
int kayitvarmi=0;
for(int i=0;i<SIZE;i++)
{
fseek( fPtr, (i) * sizeof( Rehber ), SEEK_SET );
fread(&a,sizeof(Rehber),1,fPtr);
if(strcmp(a.isim,"")!=0)
{
if(kayitvarmi==0)
{
printf("%-5s%-20s %-15s\n","SIRA","ISIM","TELEFON NO");
printf("---- -------------------- --------------\n");
kayitvarmi=1;
}
printf("%-5d%-20s %-15s\n",i+1,a.isim,a.telno);
}
}
if(kayitvarmi==0)
printf("Rehberde kayit bulunmamakta\n");
printf("\n");
}
int kelimelereayir(char *s,char a[][20])
{
short int bosluk=1,i=0,j=0;
for(;*s!='\0'&&*s!='\n';s++)
{
if(!ispunct(*s)&&!isspace(*s))
{
if(bosluk==1)
bosluk=0;
if(bosluk==0)
{
a[i][j++]=*s;
}
}
else
{
if(bosluk==0)
{
a[i][j]='\0';
i++;
j=0;
}
bosluk=1;
}
}
if(bosluk==0)
{
a[i][j]='\0';
a[++i][0]='\0';
}
else
a[i][0]='\0';
return i;
}
**** kucukharf(char *s)
{
for(;*s!='\0'&&*s!='\n';s++)
*s=turkce_tolower(*s);
*s='\0';
}
char turkce_tolower(char a)
{
switch(a)
{
case 'I':
return 141-256;
break;
case 152-256:
return 'i';
break;
case 153-256:
return 148-256;
break;
case 154-256:
return 129-256;
break;
case 158-256:
return 159-256;
break;
case 128-256:
return 135-256;
break;
case 166-256:
return 167-256;
break;
default:
return tolower(a);
break;
}
}
int ara(char a[][20],char *aranilacak)
{
char k[70];
int i,j=0,t,counter=0;
strcpy(k,aranilacak);
kucukharf(k);
for(i=0;a[i][0]!='\0';i++)
kucukharf(a[i]);
for(j=0;j<i;j++)
if(strlen(k)>=strlen(a[j])){
for(t=0;t<=strlen(k)-strlen(a[j]);t++)
if(strncmp(a[j],&k[t],strlen(a[j]))==0)
{
counter++;
break;
}
}
return counter;
}
//Türkçe karakterlerin doğru şekilde html dosyasına yazılması için fonksiyon
**** turkce(char *a,FILE *fPtr)
{
for(;*a!='\0';a++)
{
switch(*a)
{
case -121:
fprintf(fPtr,"ç");
break;
case -128:
fprintf(fPtr,"Ç");
break;
case -89:
fprintf(fPtr,"ğ");
break;
case -90:
fprintf(fPtr,"Ğ");
break;
case -97:
fprintf(fPtr,"ş");
break;
case -98:
fprintf(fPtr,"Ş");
break;
case -127:
fprintf(fPtr,"ü");
break;
case -102:
fprintf(fPtr,"Ü");
break;
case -108:
fprintf(fPtr,"ö");
break;
case -103:
fprintf(fPtr,"Ö");
break;
case -115:
fprintf(fPtr,"ı");
break;
case -104:
fprintf(fPtr,"İ");
break;
default:
fprintf(fPtr,"%c",*a);
break;
}
}
fprintf(fPtr,"<br/>");
}
**** yazdirhtml(char *s,Rehber a[],int j)
{
strcat(s,"-aramasonuc.html");
FILE *p;
int i,k;
if((p=fopen(s,"w"))!=NULL)
{
fprintf(p,"<html>\n<head>\n</head>\n<body>"
"<font color=blue size=4>");
for(i=0;i<j;i++)
{
if(strcmp(a[i].isim,"")!=0)
{
turkce(a[i].isim,p);
if(strlen(a[i].telno)==10)
for(int k=0;k<10;k++)
{
if(k==3||k==6|k==8)
fprintf(p," ");
fprintf(p,"%c",a[i].telno[k]);
}
else if(strlen(a[i].telno)==11)
{
for(int k=0;k<11;k++){
if(k==4||k==7|k==9)
fprintf(p," ");
fprintf(p,"%c",a[i].telno[k]);
}
}
else
fprintf(p,"%s",a[i].telno);
}
fprintf(p,"<br><br>");
}
fprintf(p,"</font></body></html>");
}
fclose(p);
}
bool kontrolet(char *s,FILE *fPtr)
{
Rehber a;
char tel1[15],tel2[15];
strcpy(tel1,"0");
strcat(tel1,s);
for(int i=0;i<SIZE;i++)
{
fseek( fPtr, (i) * sizeof( Rehber ), SEEK_SET );
fread(&a,sizeof(Rehber),1,fPtr);
strcpy(tel2,"0");
strcat(tel2,a.telno);
if(strcmp(s,a.telno)==0||strcmp(tel1,a.telno)==0||strcmp(tel2,s)==0)
return true;
}
return false;
}