Tam Sürümünü Görmek İçin : struct ve dosyaya yazmada yardım.
portalturks
27/05/2008, 17:58
Merhabalar ,bir konuda yardım almak istiyorum. Şimdi menüsü olan bir program yazıcam, burada 1'e basınca structlara dışarıdan giriş yapıcam,[yaptım] ancak bu girişler bittikten sonra 2'ye basınca[yapamadım] dosyaya yazma işlemini nasıl yapcam?
Burada if-else if kullandım, sonuç olarak giriş işlemleri bittikten sonra 2 ye basmadan program sonlanıyor :( Swich- case mi öneriyorsunuz?
FecriAti
27/05/2008, 18:23
swich case daha mantıklıdır her zman ki menu genişse şarttır.geri donuslerini bi kontrol et ve şartını bi kontrol et.
FecriAti
27/05/2008, 18:24
kod kısmını yazarsan insanlar daha kolay yardımcı olabilir
portalturks
27/05/2008, 18:26
Geri dönüş ü anlayamadım :(
İşte bende onu yapmak istiyorum aslında kayıtları structa yükledikten sonra , menüye geri dönüp kişiden 2 ye basmasını ve dosyaya yazma işlemlerini gerçekleştirmesini :(
Menu-
1-
2-
3-
4-
5-
Kullanıcı 1 e bastı, elle bilgi girdi, şimdi 2 ye bassın ki dosyaya yazma gerçekleşsin :)
portalturks
27/05/2008, 18:27
Bu bir ödev olduğu için yazmaktan çekiniyorum açıkçası =)
acehreli
27/05/2008, 20:37
Kullanici "bitti" diyene kadar dongu icinde kalacaksin:
while (!bitti) {
/* Menuyu goster; istegi ogren */
if (/* ... */) {
/* ... */
} else if (/* ... */) {
/* ... */
} else if (/* cikis istegi */) {
bitti = true;
}
}
Ali
portalturks
27/05/2008, 22:06
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct kayit {
char ad[11];
char soyad[21];
char marka[11];
char tip[11];
int model;
char renk[11];
unsigned long int fiyat;
};
char bosluk=' ';
int main()
{
const int MAX=100;
char buffer[MAX];
int secenek1,secenek2,secenek3,secenek4,secenek5;
int kisi;
string aranan;
cout<<"LUTFEN ISLEMLERI SIRA ILE YAPINIZ\n"<<endl;
cout<<" MENU"<<endl;
cout<<"-----------------"<<endl;
cout<<"1- KAYIT GIRISI"<<endl;
cout<<"2- DOSYAYA YAZMA"<<endl;
cout<<"3- ARAMA"<<endl;
cout<<"4- DOSYADAN OKUMA"<<endl;
cout<<"5- CIKIS"<<endl;
cout<<"Kac kisi girmek istiyorsunuz?"<<endl;
cin>>kisi;
kayit oto[kisi];
cout<<"Secim:";
cin>>secenek1;
if (secenek1=1)
{
int c=1;
for(int i=0;i<kisi;i++)
{ // kişilerin ad,soyadı araç marka,model,tip,renk,fiyat girişlerinin yapılması.
cout<<c<<". KISININ:"<<endl;
cout<<"ADI:";
cin>>oto[kisi].ad;
cout<<"SOYADI:";
cin>>oto[kisi].soyad;
cout<<"ARABASININ MARKASI:";
cin>>oto[kisi].marka;
cout<<"TIPI:";
cin>>oto[kisi].tip;
cout<<"MODELI:";
cin>>oto[kisi].model;
cout<<"RENGI:";
cin>>oto[kisi].renk;
cout<<"FIYATI:";
cin>>oto[kisi].fiyat;
c++;
}
cout<<endl;
}
cout<<"Kayit tamamlandi,artik dosyaya yazmayi(2) baslatin"<<endl;
cin>>secenek2;
if (secenek2==2)
{
ofstream dosya("kayit.txt");
for (int i=0;i<kisi;i++)// kayit.txt isimli dosyaya yazma
{
dosya<<oto[kisi].ad<<bosluk<<oto[kisi].soyad<<bosluk<<oto[kisi].marka<<bosluk<<oto[kisi].tip<<bosluk<<oto[kisi].model<<bosluk<<oto[kisi].renk<<bosluk<<oto[kisi].fiyat<<endl;
dosya<<bosluk;
}
dosya.close();
}
cout<<"Dosyaya yazma tamamlandi,aramayi(3) baslatabilirsiniz"<<endl;
cin>>secenek3;
if (secenek3==3)
{
cout<<"Arama yapmak istediginiz kisinin soyadini giriniz"<<endl;
cin>>aranan;
for(int i=0;i<kisi;i++)
{
if(oto[kisi].soyad==aranan)
{
cout<<oto[kisi].ad<<bosluk<<oto[kisi].soyad<<bosluk<<oto[kisi].marka<<bosluk<<oto[kisi].tip<<bosluk<<oto[kisi].model<<bosluk<<oto[kisi].renk<<bosluk<<oto[kisi].fiyat<<endl;
}
}
cout<<"Arama tamamlandi,artik dosyadan okuma(4) yapabilirsiniz."<<endl;
cout<<endl;
cin>>secenek4;
if (secenek4==4)
{
ifstream dosya1("kayit.txt");
while (!dosya1.eof())
{
dosya1.getline(buffer,MAX);
cout<<buffer<<endl;
cout<<MAX<<endl;
}
}
system ("pause");
return 0;
}
}
Şimdi takıldığım yer dosya okuma yazma-sadece 1 tane veri yazıldığında program güzel güzel çalışıyor,ancak 2 veya daha fazla kişi girildiğinde sadece en son verileni yazıyor :(
acehreli
27/05/2008, 23:24
if (secenek1=1)
satirinda atama yapmak istemiyorsun tabii ki. == kullanman gerek... (Derleyicinin seni bu konuda uyarmasini beklerdim. Eger uyarmiyorsa, uyari ayarlarini acmani oneririm. Baska hatalar da yakalayabilir.)
Ayrica kodun anlasilmayacak kadar karmasik hale gelmek uzere: 188 karakterlik satirlar var ve aralarda bosluk bile kullanmamissin. :) Okumasi cok zor. Olasi hatalari da goremezsin. Ben olsam satirlardan birisini soyle degistirirdim:
dosya << oto[kisi].ad << bosluk
<< oto[kisi].soyad << bosluk
<< oto[kisi].marka << bosluk
<< oto[kisi].tip << bosluk
<< oto[kisi].model <<bosluk
<< oto[kisi].renk << bosluk
<< oto[kisi].fiyat << endl;
Ali
Forum Yazılımı : vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.