C ile Dosyalama İşlemleri dosyaya kayıt ekleme kayit silme bulup degistirme kayit listeleme


07.01.2012-19:34 Tarihinde Eklendi.
www.seyfettinkahveci.com Derecelendirme: 10 / 10 Oy Sayısı: 16005614Toplam Puan: 62640 / Yorum Sayısı: 412005614 adet.


Kodlar:

#include <stdio.h>//kütüphane ekleniyor
#include <windows.h>//kütüphane ekleniyor
struct OGRENCI {//ogrenci struct yapısı tanımlanıyor
char isim[15];//struct yapısı değişkenleri
int vize;//struct yapısı değişkenleri
int final;//struct yapısı değişkenleri
char bolum[15];//struct yapısı değişkenleri
}kisi[10],yedek[10],silinecek[10];//struct yapısına kişi ve yedek isimleri veriliyor
void kayit_ekle();//fonksiyonlar tanımlanıyor
void ara_bul();//fonksiyonlar tanımlanıyor
void listele();//fonksiyonlar tanımlanıyor
void bul_degistir();//fonksiyonlar tanımlanıyor
void kayit_sil();//fonksiyonlar tanımlanıyor
char menu();//fonksiyonlar tanımlanıyor
int sayac;//global bir sayac eklendi kişi syısını bulmak için
main()
{//ana fonksiyon
    char secim;//secim adında bir değişen tanımlanıyor
    do{
        secim=menu();//menuden gelen tuş algılanıyor
        switch(secim)//menuden gelen veriyi karşılaştırmaya sokuyor
        {
           case '1': kayit_ekle();break;//menuden gelen veri 1 ise kayıt ekleme fonksiyonu çağırılıyor
           case '2': listele();break;//menuden gelen veri 2 ise listeleme fonksiyonu çağırılıyor
           case '3':ara_bul();break;//menuden gelen veri 3 ise arabul fonksiyonu çağırılıyor
           case '4':bul_degistir();break;//menuden gelen veri 4 ise buldegistir fonksiyonu çağırılıyor
           case '5':kayit_sil();break;//menuden gelen veri 5 ise kayıt silfonksiyonu çağırılıyor

        }
    }while(secim<='5' && secim>='1');//karşılaştırma menuden gelen verilerin 1 ile 5 arasında ise

    }//ana fonksiyon sonu
char menu(){//menu fonksiyonu
    char tus;//tus adında char tipinde değişken tanımlanıyor
    printf("1-kayit ekle\n2-listele\n3-arabul\n4-buldegistir\n5-sil\n");//manu seçenekleri ekrana yazdırılıyor
    tus=getch();//kullanıcının girdiği tuş algılanıyor
    return tus;//menu fonksiyonunun çağırıldığı yere kullanıcının girdiği tuş döndürülüyor
}//menu fonksiyonu sonu
    void kayit_ekle(){//kayıt ekleme fonksiyonu
        char tus2;//tus2 adında char tipinde değişken tanımlanıyor
        FILE *dosya;//file tipinde bir dosya adında bir pointer tanımlanıyor
        dosya=fopen("a.txt","w");//dosya önceki verilerin üstüne yazmak için açılıyor

    do{printf("%d.kişi adi giriniz",sayac+1);//kullanıcıdan isim isteniyor
    scanf("%s",kisi[sayac].isim);//kullanıcını girdiği veri struct yapısına aktarılıyor
    fflush(stdin);//veri değişkene aktarıldıktan sonra gerekli alan boşaltılıyor
    printf("%d.kişinin bölüm giriniz",sayac+1);//kullanıcıdan bölüm isteniyor
    scanf("%s",kisi[sayac].bolum);//kullanıcını girdiği veri struct yapısına aktarılıyor
    fflush(stdin);//veri değişkene aktarıldıktan sonra gerekli alan boşaltılıyor
    printf("%d.kişi vizesi giriniz",sayac+1);//kullanıcıdan vize isteniyor
    scanf("%d",&kisi[sayac].vize);//kullanıcını girdiği veri struct yapısına aktarılıyor
    fflush(stdin);//veri değişkene aktarıldıktan sonra gerekli alan boşaltılıyor
    printf("%d.kişi finali giriniz",sayac+1);//kullanıcıdan final isteniyor
    scanf("%d",&kisi[sayac].final);//kullanıcını girdiği veri struct yapısına aktarılıyor
    fflush(stdin);//veri değişkene aktarıldıktan sonra gerekli alan boşaltılıyor
    printf("yeni kayit için e basin ve menüye dönmek için herhangi bir tusa basin");//veriler girildikten sonra kullanıcıdan yeni veri girmek istermisiniz diye soruluyor
    tus2=getch();//kullanıcının girdiği karakter tus2 değişkenine aktarılıyor

fprintf(dosya,"%s\t%s\t%d\t%d\n",kisi[sayac].isim,kisi[sayac].bolum,kisi[sayac].vize,kisi[sayac].final);//veriler dosyaya yazılıyor
sayac++;//whileiçin sayac 1 arttırılıyor
    }while(tus2=='e' || tus2=='E');//eğer kullanıcı devam etmek isterse tekrar dön
fclose(dosya);//dosya kapatılıyor
}//kayıt ekleme fonksiyonusonu
void listele(){//listele fonksiyonu
FILE *dosya;//file tipinde bir dosya adında bir pointer tanımlanıyor
dosya=fopen("a.txt","r");//dosya önceki verileri okumak için açılıyor
int a=0,i;//değişkenler tanımlanıyor
while(!feof(dosya)){//dosya sonuna kadar dön
    fscanf(dosya,"%s%s%d%d",yedek[a].isim,yedek[a].bolum,&yedek[a].vize,&yedek[a].final);//veriler dosyadan okunuyor
a++;      //while için a arttırılıyor
}//dosya sonuna kadar dön sonu
for(i=0;i<(a-1);i++)//yedek yapısının sonuna kadar dönülüyor
printf("%d\t%s\t%s\t%d\t%d\n",i+1,yedek[i].isim,yedek[i].bolum,yedek[i].vize,yedek[i].final);//okunan veriler ekrana yazılıyor
fclose(dosya);//dosya kapatılıyor
}//listele fonksiyonu sonu
void ara_bul(){//arabul fonksiyonu
    char kelime[150];//kelima adında char tipinde bir değişken tanımlanıyor
printf("Aranacak Kelimeyi girin");//kullanıcıdan aranacak veri isteniyor
scanf("%s",&kelime);//girilen veri kelime değişkenine aktarılıyor
FILE *dosya;//file tipinde bir dosya adında bir pointer tanımlanıyor
dosya=fopen("a.txt","r");//dosya önceki verileri okumak için açılıyor
int a=0,i;//değişkenler tanımlanıyor döngüler için
while(!feof(dosya)){//dosya sonuna kadar dön
    fscanf(dosya,"%s%s%d%d",yedek[a].isim,yedek[a].bolum,&yedek[a].vize,&yedek[a].final);//dosyadan veriler okunup yedek yapısına aktarılıyor
a++;     //while için a 1 arttırılıyor
 }//dosya sonuna kadar dön sonu
for(i=0;i<(a-1);i++){//yedek yapısının sonuna kadar dönülüyor
 if(strcmp(kelime,yedek[i].isim)==0)
        {//eğer aranan kelime yedek yapısının ismine eşit ise aşağıdakileri yap
printf("%d\t%s\t%s\t%d\t%d\n",i+1,yedek[i].isim,yedek[i].bolum,yedek[i].vize,yedek[i].final);//veriler ekrana yadırılıyor
}//eğer aranan kelime yedek yapısının ismine eşit ise aşağıdakileri yap sonu
}//yedek yapısının sonuna kadar dönülüyorsonu
fclose(dosya);//dosya kapatılıyor
}//arabul fonksiyonu sonu
void bul_degistir(){//bul değişrtir fonksiyonu
    char kelime[150];
printf("Degisecek Kisiyi girin");//degisecek kisi kulanıcıdan alınıyor
scanf("%s",&kelime);//kullanıcının girdiği veri kelime değişkenine atanıyor
FILE *dosya;//file tipinde bir dosya pointerı tanımlanıyor
dosya=fopen("a.txt","r");//a.txt dosyası sadece okunmak için yazılıyor
int a=0,i;//kullanılacak değişkenler tanımlanıyor
while(!feof(dosya)){//dosya sonuna kadar dönülüyor başlangıç
    fscanf(dosya,"%s%s%d%d",yedek[a].isim,yedek[a].bolum,&yedek[a].vize,&yedek[a].final);//dosyadan alınan veriler yedek yapısına aktarılıyor
a++;     //yedek değişkenini her seferinde farklı gelmesi için a her seferinde arttırılıyor
}//dosya sonuna kadar dönülüyor sonu
for(i=0;i<(a-1);i++){//yedek yapısına alınan verilerin işleme sokulması
 if(strcmp(kelime,yedek[i].isim)==0)//eğer değişecek kelime yedek yapısının ismine eşit ise aşağıdakileri yap
        {
            printf("%dninci kişinin adını giriniz",i+1);//kullanıcıdan yeni isim isteniyor
            scanf("%s",yedek[i].isim);//isim yedek yapısının değişecek kısmına atanıyor
            fflush(stdin);//değişkene aktarıldıktan sonra o kısım boşaltılıyor
            printf("%dninci kişinin bölümünü giriniz",i+1);//kullanıcıdan yeni bölüm isteniyor
            scanf("%s",yedek[i].bolum);//bölüm yedek yapısının değişecek kısmına atanıyor
            fflush(stdin);//değişkene aktarıldıktan sonra o kısım boşaltılıyor
            printf("%dninci kişinin vizesini giriniz",i+1);//kullanıcıdan yeni vize isteniyor
            scanf("%d",&yedek[i].vize); //vize yedek yapısının değişecek kısmına atanıyor
            fflush(stdin);//değişkene aktarıldıktan sonra o kısım boşaltılıyor
            printf("%dninci kişinin Finalini giriniz",i+1);//kullanıcıdan yeni final isteniyor
            scanf("%d",&yedek[i].final);//final yedek yapısının değişecek kısmına atanıyor
            fflush(stdin);//değişkene aktarıldıktan sonra o kısım boşaltılıyor

}
}//yedek yapısına alınan verilerin işleme sokulması sonu
fclose(dosya);//dosya sadece okunmak için açılan dosya kapatılıyor

//şimdi bu kısımda değiştirilen yedek yapısını a.txtnin üzerine yazarak bul değiştir örneğimizi bitireceğiz
FILE *dosya2;//file tipinde bir dosya2 pointerı tanımlanıyor
dosya2=fopen("a.txt","w");//a.txt dosyası önceki veriler silinecek şekilde açılıyor
int i2;//integer tipinde for döngüsü için i2 değişkeni oluşturuluyor
for(i2=0;i2<(a-1);i2++){//yine yedek değişkeninin sonuna kadar dönülüyor
fprintf(dosya2,"%s\t%s\t%d\t%d\n",yedek[i2].isim,yedek[i2].bolum,yedek[i2].vize,yedek[i2].final);
}//yedek değişkeninin sonuna kadar dönme sonu
fclose(dosya2);//açılan dosya kapatılıyor
}//bul değiştir fonksiyonu sonu


void kayit_sil(){//kayit sil fonksiyonu
char kelime[150];
printf("Silinecek Kişiyi girin");//silinecek kişi kulanıcıdan alınıyor
scanf("%s",&kelime);//kullanıcının girdiği veri kelime değişkenine atanıyor
FILE *dosya;//file tipinde bir dosya pointerı tanımlanıyor
dosya=fopen("a.txt","r");//a.txt dosyası sadece okunmak için yazılıyor
int a=0,i=0,kacinci;//kullanılacak değişkenler tanımlanıyor
while(!feof(dosya)){//dosya sonuna kadar dönülüyor başlangıç
    fscanf(dosya,"%s%s%d%d",yedek[a].isim,yedek[a].bolum,&yedek[a].vize,&yedek[a].final);//dosyadan alınan veriler yedek yapısına aktarılıyor
a++;     //yedek değişkenini her seferinde farklı gelmesi için a her seferinde arttırılıyor
}//dosya sonuna kadar dönülüyor sonu

for(i=0;i<(a-1);i++){//yedek yapısına alınan verilerin işleme sokulması
 if(strcmp(kelime,yedek[i].isim)==0)//eğer silinmesi gereken kişi adı yedek yapısının ismine eşit ise aşağıdakileri yap
        {            kacinci=i;//aranan verinin kaçıncı olduğu bulunuyor
                   }//eğer silinmesi gereken kişi adı yedek yapısının ismine eşit ise aşağıdakileri yapsonu

}//yedek yapısına alınan verilerin işleme sokulması sonu
for(i=0;i<(kacinci);i++){//verinin bulunduğu yere kadar dön
    strcpy(silinecek[i].isim,yedek[i].isim);
//kacıncıya kadar olan kısımlar silinen yapısına aktarılıyor
    strcpy(silinecek[i].bolum,yedek[i].bolum);
//kacıncıya kadar olan kısımlar silinen yapısına aktarılıyor
    silinecek[i].vize=yedek[i].vize;
//kacıncıya kadar olan kısımlar silinen yapısına aktarılıyor
    silinecek[i].final=yedek[i].final;
//kacıncıya kadar olan kısımlar silinen yapısına aktarılıyor
}
//verinin bulunduğu yere kadar dön sonu
for(i=(kacinci+1);i<=(a-1);i++){//silinen veriden sonrakini silinecek kısmına ata
    strcpy(silinecek[i-1].isim,yedek[i].isim);//kacıncıdan sonra olan kısımlar silinen yapısına aktarılıyor
    strcpy(silinecek[i-1].bolum,yedek[i].bolum);//kacıncıdan sonra  olan kısımlar silinen yapısına aktarılıyor
    silinecek[i-1].vize=yedek[i].vize;//kacıncıdan sonra  olan kısımlar silinen yapısına aktarılıyor
    silinecek[i-1].final=yedek[i].final;//kacıncıdan sonra  olan kısımlar silinen yapısına aktarılıyor
}//silinen veriden sonrakini silinecek kısmına ata sonu


fclose(dosya);//dosya sadece okunmak için açılan dosya kapatılıyor

//şimdi bu kısımda değiştirilen yedek yapısını a.txtnin üzerine yazarak bul değiştir örneğimizi bitireceğiz
FILE *dosya2;//file tipinde bir dosya2 pointerı tanımlanıyor
dosya2=fopen("a.txt","w");//a.txt dosyası önceki veriler silinecek şekilde açılıyor
int i2;//integer tipinde for döngüsü için i2 değişkeni oluşturuluyor
for(i2=0;i2<(a-1);i2++){//yine silinecek değişkeninin sonuna kadar dönülüyor
fprintf(dosya2,"%s\t%s\t%d\t%d\n",silinecek[i2].isim,silinecek[i2].bolum,silinecek[i2].vize,silinecek[i2].final);
}//silinecek değişkeninin sonuna kadar dönme sonu
fclose(dosya2);//açılan dosya kapatılıyor

}//kayitsil fonksiyonu sonu

 

Bu Konuda Herhangi Bir Sorunuz Varsa Yorumlar Kısmından Yazın En Kısa Sürede Cevaplamaya Çalışırım.

Seyfettin KAHVECİ
Balıkesir Üniversitesi
NEF-BOTE



Yazının tamamının kopyalanması yasaktır. En baştaki birkaç paragrafı kopyalayıp, yazıya link verebilirsiniz. Aksi durumda uyarılmaksızın yasal yollara gidilecektir.

Uzun süredir yorumlara cevap veremediğim için sistem yeni yorumlara kapatılmıştır. Anlayışınız için teşekkürler.
Yorumlar
Ad Soyad:muhrrem önalŞehir:Balıkesir
Tarih:19.11.2013
Soru bilgiler için teşekürler hocam
Cevap Ben teşekkür ederim iyi çalışmalar...
Ad Soyad:ali canŞehir:Adana
Tarih:25.07.2012
Soru peki hocam girilen yeni bir kişiyi alfabetik sıra ile girmek için ne yapmak gerekir örneğin; 1.ali 2.deniz 3. kişide cemre girilsin yeni kayıtlar : 1.ali 2.cemre 3.deniz olacak teşekkürler
Cevap Öncelikle kullanıcının girdiği verileri bir diziye atamalısınız. Daha sonra bir vektör tanımlamalısınız ve vektör dizinin başından itibaren sonuna kadar olan bölümün tümünü kapsamalıdır. Vektörlerde bulunan sort() fonksiyonunu kullanarak vektörün içindeki elemanları a'dan z'ye kadar sıralayıp daha sonra verileri ekrana yazdırmalısın. Vektörleri sıralama örneği için buraya tıkla
Yorumunuz için teşekkürler anlamadığınız başka bölüm olursa yardımcı olmaya çalışırım. İyi Çalışmalar.