BİLGİSAYAR programlama II Dosyalar BİLGİSAYAR programlama II
dosyalar
Veriler kalıcı olarak hard disk, disket ya da CD ortamında saklanır (cd, flash bellek vs.) C++ programı kalıcı ortamda bir veri dosyası oluşturur. Veri dosyası ilk kayıt, kayıt ilave ve kayıt okuma olmak üzere 3 farklı şekilde açılır. Veri dosyası ilk kayıt modunda açılırsa, dosya içinde veri mevcut ise, bu veriler silinir.
Her bir dosya işlem yapıldıktan sonra kapatılmalıdır Her bir dosya işlem yapıldıktan sonra kapatılmalıdır. Aksi takdirde veri kaybı olabilir. Dosyada bilgi değişikliği ve bilgi silme işlemleri için ikinci bir dosyaya ihtiyaç vardır. Bu değiştirme ve silme işlemleri, kelime işlemci yardımıyla veya derleyici kullanılarak da yapılabilir. Dosya deyimlerini kullanabilmek için <fstream.h> kütüphanesi tanımlanmalıdır.
Dosya açma modları Dosya ilk kayıt modu: dosya.open(“rehber”, ios::out) dosyaya ilk kayıt yapılıyor. “rehber” dosyanın disk üzerindeki adı olacaktır. “rehber” adlı dosyayı temsil eden değişken adı da “dosya” dır.
Not: Dosyamızı out ile açtığımızda, aynı ada sahip daha önce oluşturulan bir dosya varsa, bu dosyadaki veriler silinir ve dosya yeniden açılır.
Dosyaya kayıt ilave modu dosya.open(“rehber”, ios::app) app, append’in (kayıt ilave) kısaltması, dosyaya kayıt ilavesi yapılıyor.
Not: Dosyamızı app ile açtığımızda, kayıt eklemek üzere açıldığından daha önce bu adla oluşturulmuş dosya olduğu varsayılmaktadır. Eğer bu adla oluşturulmuş bir dosya yok ise, öncelikle dosya oluşturulur.
Dosyadan veri okuma modu dosya.open(“rehber”, ios::in) dosyadan veri okunması sağlanıyor.
Yukarıda bahsedilen dosya açma modlarında, dosya adı olarak “rehber” kullanıldı. Programımız bu dosyayı yazma veya okuma amaçlı açarken, diskin neresine açacağı veya neresinden okuyacağı konusunda bilgi içermemektedir. Bu durumda “rehber” adlı dosyayı programımızın çalıştırıldığı klasörde arayacak veya orada oluşturacaktır.
Dosyanın farklı bir klasörde oluşturulması veya farklı bir klasörden veri okumak üzere açılması için, dosya adının önüne dosya yolunun yazılması gerekmektedir.
Örneğin; dosya.open(“c:\data\rehber”, ios::out) Bu örnekte “rehber” adlı dosyamız, harddiskin “data” klasörü içersinde oluşturulacaktır.
Benzer şekilde bu dosyadan veri okumak istediğimizde dosyayı şu şekilde açmalıyız: dosya.open(“c:\data\rehber”, ios::in)
Dosya kapama Yazma veya okuma amaçlı açılan dosyanın dosyayla ilgili işlemler bittiğinde kapatılması gereklidir. dosya değişkeninin temsil ettiği dosya şu şekilde kapatılır: dosya.close()
Örnek: Ad, soyad ve telefon numaralarını bir dosyaya kaydeden program.
#include <iostream. h> #include <fstream #include <iostream.h> #include <fstream.h> main() { fstream Dosya; char Ad[15], Soyad[15], Tel[10], Cevap; Dosya.open(“Telefon.Dat”, ios::out);
do { cout << “Ad : “; cin >> Ad; cout << “Soyad : “; cin >> Soyad; cout << “Telefon: “; cin >> Tel; Dosya << Ad << endl << Soyad << endl << Tel << endl; cout << “Tekrar giris (E/H)? “; cin >> Cevap; } while (Cevap == ‘E’ || Cevap == ‘e’); Dosya.close(); }
Önceki programda kaydedilen bilgileri dosyadan okuyarak ekrana listeleyen program.
#include <iostream.h> #include <fstream.h> #include <conio.h> main() { fstream Dosya; char Ad[15], Soyad[15], Tel[10];
Dosya.open(“Telefon.Dat”, ios::in); while (Dosya >> Ad >> Soyad >> Tel) cout << Ad << “ “ << Soyad << “ “ << Tel << endl; Dosya.close(); getch(); }
Daha düzgün bir listeleme için #include <iostream.h> #include <fstream.h> #include <conio.h> #include <iomanip.h> main() { fstream Dosya; char Ad[15], Soyad[15], Tel[10]; Dosya.open(“Telefon.Dat”, ios::in);
cout << “Ad “ << “Soyad “ << “Telefon” << endl << “--------------- ---------------” << “ ----------” << endl; cout << setiosflags(ios::left); while (Dosya >> Ad >> Soyad >> Tel) cout << setw(16) << Ad << setw(16) << Soyad << Tel << endl; cout << “\nListe tamamlandi…”; Dosya.close(); getch(); }
Örnek: stok.dat isimli bir dosyaya beyaz eşyanın ismini ve stoktaki miktarlarını kaydeden ve dosyadaki tüm bilgileri ekrana listeleyen bir C++ programı yazınız?
Kütüphane ve değişken tanımlamaları #include <iostream.h> #include <fstream.h> #include <conio.h> #include <iomanip.h> char Urun[20]; int Miktar; int Secim=0; fstream Dosya;
Dosyaya bilgi kaydeden fonksiyon Kayit() { char Cevap; clrscr(); Dosya.open("stok.dat", ios::app); do cout << "\nUrun ismi ve miktarini giriniz: "; cin >> Urun >> Miktar; Dosya << Urun << " " << Miktar << endl; cout << "\nTekrar giris (E/H): "; cin >> Cevap; } while (Cevap=='E' || Cevap =='e'); Dosya.close(); }
Dosyadan bilgileri okuyup listeleyen fonksiyon Liste() { clrscr(); Dosya.open("stok.dat", ios::in); cout << "Urun adi Miktari\n" << "-------------------- -------\n"; cout << setiosflags(ios::left); while(Dosya >> Urun >> Miktar) cout << setw(21) << Urun << Miktar<<endl; Dosya.close(); cout << "\nListe sonu, devam icin bir tus..."; getch(); }
Seçenekleri gösterip seçim alan fonksiyon Menu() { clrscr(); cout << "1- Kayit\n" << "2- Listeleme\n" << "3- Program sonu\n\n" << "Seciminiz: "; cin >> Secim; }
Ana program main() { while (Secim<3) Menu(); switch (Secim) case 1: Kayit(); break; case 2: Liste(); }
SORULAR Öğrenci no, adı, soyadı, vize ve final notları girildiğinde bir dosyaya kaydeden, öğrenci no, ad, soyad, vize, final ve ortalama not bilgisinin olduğu listeyi hazırlayan bir program yazınız. Ortalama = Vize*0.4+Final*0.6 Not: Program giriş ve listeleme işlemlerini tekrar tekrar yapabilecektir.