Witam
mam taki problem : otóż jest sobie program, który tworzy bazę danych w pliku txt.
Wszystkie funkcje działają jak należy, tylko po skompilowaniu, gdy wybiorę opcję, że chcę jeszcze raz wyświetlić menu, i wtedy wybiorę którąkolwiek opcję z menu, to wychodzą bzdury (np. wyświetla dane dobrze, ale gdy wcisnę “t”, aby zobaczyć menu jeszcze raz, i wtedy znów kliknę na wyświetlanie, to program wyświetla tylko jedną, pustą linijkę zamiast zawartości pliku. Inny przykład - za pierwszym razem poprawnie zapisuje dane do pliku, za kolejnym już wogóle nie zapisuje).
Oto kod :
#include
#include
#include
#include
using namespace std;
string marka,model,napis,slowo,moc,rocznik,przebieg,pojemnosc;
char decyzja;
short int wybor;
class samochod
{
public:
string marka;
string model;
string przebieg;
string moc;
string rocznik;
string pojemnosc;
};
samochod a;
fstream plik;
fstream plik2;
void dodawanie()
{
cout<<"Podaj marke samochodu\n";
cin>>a.marka;
cout<<"Podaj model samochodu\n";
cin>>a.model;
cout<<"Podaj przebieg\n";
cin>>a.przebieg;
cout<<"Podaj moc w KM\n";
cin>>a.moc;
cout<<"Podaj rocznik\n";
cin>>a.rocznik;
cout<<"Podaj pojemnosc\n";
cin>>a.pojemnosc;
cout<<"Dodaje...\n";
_sleep(1000);
plik.open("save.txt",ios::app|ios::out);
if(plik.is_open()==true)
{
plik<
plik<
plik<
plik<
plik<
plik<
plik.close();
}
else
cout<<"Nie udalo sie otworzyc\n";
}
void wyswietlanie()
{
plik.open("save.txt",ios::in);
if(plik.is_open()==true)
{
plik>>a.marka;
plik>>a.model;
plik>>a.przebieg;
plik>>a.moc;
plik>>a.rocznik;
plik>>a.pojemnosc;
while(!plik.eof()) //eof() - Funkcja ta służy do sprawdzania, czy wskaźnik pliku znajduje się na końcu pliku.
{
cout<<"Marka : "<
plik>>a.marka;
plik>>a.model;
plik>>a.przebieg;
plik>>a.moc;
plik>>a.rocznik;
plik>>a.pojemnosc;
}
plik.close();
}
else
cout<<"Nie udalo sie otworzyc\n";
}
void usuwanie()
{
cout<<"Podaj marke, model, rocznik i pojemnosc.\nTen samochod bedzie usuniety\n\n";
cout<<"Marka :\n";
cin>>marka;
cout<<"Model :\n";
cin>>model;
cout<<"Rocznik :\n";
cin>>rocznik;
cout<<"Pojemnosc :\n";
cin>>pojemnosc;
plik.open("save.txt",ios::in);
plik2.open("savetemp.txt",ios::app|ios::out);
if(plik.is_open()==true && plik2.is_open()==true)
{
plik>>a.marka;
plik>>a.model;
plik>>a.przebieg;
plik>>a.moc;
plik>>a.rocznik;
plik>>a.pojemnosc;
while(!plik.eof()) //eof() - Funkcja ta służy do sprawdzania, czy wskaźnik pliku znajduje się na końcu pliku.
{
if(a.marka==marka && a.model==model && a.rocznik==rocznik && a.pojemnosc==pojemnosc)
{
cout<<"Znaleziono taki pojazd, usuwam...\n";
goto dalej;
}
else
{
plik2<
plik2<
plik2<
plik2<
plik2<
plik2<
}
dalej:
plik>>a.marka;
plik>>a.model;
plik>>a.przebieg;
plik>>a.moc;
plik>>a.rocznik;
plik>>a.pojemnosc;
}
plik.close();
plik2.close();
}
else
cout<<"Nie udalo sie otworzyc\n";
remove("save.txt");
rename("savetemp.txt","save.txt");
}
void szukaj()
{
cout<<"Podaj slowo jakie chcesz wyszukac\n";
cin>>slowo;
clrscr();
plik.open("save.txt",ios::in);
if(plik.is_open()==true)
{
plik>>a.marka;
plik>>a.model;
plik>>a.przebieg;
plik>>a.moc;
plik>>a.rocznik;
plik>>a.pojemnosc;
while(!plik.eof()) //eof() - Funkcja ta służy do sprawdzania, czy wskaźnik pliku znajduje się na końcu pliku.
{
if(a.marka==slowo || a.model==slowo || a.przebieg==slowo || a.moc==slowo || a.rocznik==slowo || a.pojemnosc==slowo)
{
cout<<"Marka : "<
}
plik>>a.marka;
plik>>a.model;
plik>>a.przebieg;
plik>>a.moc;
plik>>a.rocznik;
plik>>a.pojemnosc;
}
plik.close();
}
else
cout<<"Nie udalo sie otworzyc\n";
}
int main()
{
do{
clrscr();
cout<<"Menu\n\n";
cout<<"1 - dodawanie\n";
cout<<"2 - usuwanie\n";
cout<<"3 - wyszukiwanie\n";
cout<<"4 - wyswietlanie\n";
cout<<"5 - koniec\n\n";
cout<<"Podaj swoj wybor\n";
cin>>wybor;
switch(wybor)
{
case 1:
{
clrscr();
dodawanie();
break;
}
case 2:
{
clrscr();
usuwanie();
break;
}
case 3:
{
clrscr();
szukaj();
break;
}
case 4:
{
clrscr();
wyswietlanie();
break;
}
case 5:
{
return 0;
break;
}
}
cout<<"\nCzy chcesz powtorzyc (n/t)?\n";
cin>>decyzja;
}while(decyzja!='n');
system("PAUSE");
return 0;
}
// getline(plik,napis);
// cout<