Witam
Zrobiłem program który ma spełniać funkcję książki telefonicznej oparty na klasie. Problem w tym, że wyszukiwanie osoby po nazwisku nie działa tak jakbym chciał. Gdy dodam więcej niż 1 osobę to program podczas wyszukiwania widzi tylko 1 dodaną osobę, a resztę olewa tzn. jeżeli np. 1 osoba miała na nazwisko Kowalski to program bezbłędnie, tak jak zamierzałem podaje imię i nazwisko oraz telefon danej osoby, a jeżeli ten Kowalski byłby dodany jako 2gi to przeleciałby cały plik tekstowy i wyświetlił komunikat "Blednie podano nazwisko. Sprobuj ponownie!". Może coś pochrzaniłem w tych operacjach na plikach (najbardziej prawdopodobne, że coś w case 2 jest źle (część kodu odpowiedzialna za wyszukiwanie)).
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
class ksiazka
{
public:
char imie[20];
char nazwisko[20];
int numer;
void dodaj (void);
void wyswietl (void);
~ksiazka(void); //destruktor
};
void ksiazka::dodaj(void)
{
cout << "Podaj imie: ";
cin >> imie;
cout << "Podaj nazwisko: ";
cin >> nazwisko;
cout << "Podaj numer telefonu: ";
cin >> numer;
cout << endl;
};
void ksiazka::wyswietl (void)
{
system ("cls");
cout << "Znaleziona osoba to: \n\n" << imie << " " << nazwisko << endl;
cout << "Telefon: " << numer << endl << endl;
}
ksiazka::~ksiazka(void)
{
delete[] imie;
delete[] nazwisko;
}
int main(int argc, char *argv[])
{
int a, miejsce, length;
char szukaj[20];
bool exit = false;
ksiazka osoba;
do
{
cout << "Ksiazka telefoniczna by Ramirez\n\n";
cout << "-----------------MENU----------\n\n";
cout << "1. Dodaj nowa osobe\n";
cout << "2. Wyszukaj osobe po nazwisku\n";
cout << "3. Wyjdz\n\n";
cout << "-------------------------------\n";
int wybierz = 0;
cout << "Wybierz dzialanie: ";
cin >> wybierz;
if (wybierz >= 1 && wybierz <=3)
{
system("cls");
switch (wybierz)
{
case 1:
{
system("cls");
osoba.dodaj();
fstream plik;
plik.open( "ksiazka_telefoniczna.txt", ios::in | ios::out );
if( plik.good() == true )
{
//tu operacje na pliku (zapis/odczyt)
plik.seekg(0, ios::end);
plik.write((const char*)&osoba, sizeof(osoba));
plik.close();
}
system ("pause");
system ("cls");
break;
}
case 2:
{
cout << "Podaj nazwisko szukanej osoby: ";
cin >> szukaj;
fstream plik;
plik.open( "ksiazka_telefoniczna.txt", ios::in | ios::out );
if( plik.good() == true )
{
//tu operacje na pliku (zapis/odczyt)
plik.seekg(0, ios::end);
length = plik.tellg();
miejsce = length/sizeof(osoba);
plik.seekg(0, ios::beg);
for(a=0;a<miejsce;a++)
{
plik.read((char*)&osoba, sizeof(osoba));
if(!strcmp(osoba.nazwisko,szukaj))
{
osoba.wyswietl();
system("pause");
system("cls");
break;
}
plik.close();
}
}
if(a==miejsce)
{
cout << "Blednie podano nazwisko. Sprobuj ponownie!" << endl;
getchar();
getchar();
system ("cls");
}
break;
}
case 3:
system ("cls");
cout << "Program konczy dzialanie.\n\n";
exit = true;
break;
}
}
else
{
system ("cls");
cout << "Wprowadziles bledny numer.\n";
cout << "Czy chcesz wyjsc z programu?(t/n)\n";
char wybor[1];
cin >> wybor[0];
if (wybor[0] == 't')
{
system ("cls");
cout << "Program konczy dzialanie.\n\n";
exit = true;
}
else if (wybor [0] == 'n')
{
system ("cls");
}
else
{
system ("cls");
cout << "Wprowadziles zla cyfre :(\n";
cout << "Program konczy dzialanie.\n\n";
exit = true;
}
}
} while (exit!=true);
system("PAUSE");
return EXIT_SUCCESS;
}
Tutaj lepiej widać: http://wklej.org/hash/f025ee8f2e8/
Jeżeli ktoś się na tym zna i miałby chwilę wolnego czasu to proszę o pomoc.