C ile Dosyalama İşlemleri dosyaya kayıt ekleme kayit silme bulup degistirme kayit listeleme
07.01.2012-19:34 Tarihinde Eklendi.
www.seyfettinkahveci.com
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
Uzun süredir yorumlara cevap veremediğim için sistem yeni yorumlara kapatılmıştır. Anlayışınız için teşekkürler. |
|