Baza danych - problem z odczytem z pliku

0

Witam.
Uczę się programowania obiektowego i postanowiłem napisać prostą bazę danych w tym wypadku klientów banku z użyciem klasy. Problem polega na tym że funkcja odczytująca z pliku powiela ostatni obiekt i w rezultacie powstaje coś takiego
Tak wygląda przed ponownym uruchomieniem programu: http://www.tinypic.pl/ofl3bcqw57p0
a tak po: http://www.tinypic.pl/iv5oyqjz2sfs
Kod źródłowy
plik klient.h

#include<iostream>
using namespace std;
class Klient
{
      private: 
               double stanKonta;
               string imie;
               string nazwisko;
               int numerID;
      public:
             static int ileKlientow;
             Klient(int id, string name, string surname, double stan = 0);
             Klient(){};
             void dodaj_srodkow (double ile);
             void odejmij_srodkow (double ile);
             void wyczysc_konto();
             int ID();
             double ile_srodkow();
             string Imie();
             string Nazwisko();
             ~Klient();
};
 

plik klient.cpp

#include "klient.h"
using namespace std;

int Klient::ileKlientow = 0; //licznik obiektów
//--------------------------
//konstruktor
Klient::Klient(int id, string name, string surname, double stan): numerID(id), imie(name), nazwisko(surname), stanKonta(stan)
{
                   ileKlientow++;
}
//--------------------------
//destruktor
Klient::~Klient()
{
                 ileKlientow--;
}
//---------------------------
void Klient::dodaj_srodkow(double ile)
{
                             stanKonta += ile;
}
//---------------------------
void Klient::odejmij_srodkow(double ile)
{
                               stanKonta -=ile;
}
//---------------------------
void Klient::wyczysc_konto()
{
                       stanKonta = 0;
}
//---------------------------
int Klient::ID()
{
            return numerID;
}
string Klient::Imie()
{
              return imie;
}
string Klient::Nazwisko()
{
                  return nazwisko;
}
double Klient::ile_srodkow()
{
                     return stanKonta;
}
/////////////////////////////// 

plik main.cpp

 #include "klient.h"
#include<iostream>
#include<sstream>
#include<fstream>
#include<conio.h>
using namespace std;
Klient *klient[200];
int id = 0;
double string_na_double(string tekst)
{
    istringstream strumien(tekst);
    double liczba;
    strumien>>liczba;
    return liczba;
}
int string_na_int(string tekst)
{
    istringstream strumien(tekst);
    int z;
    strumien>>z;
    return z;
}
char wyswietl_menu()
{
    system("cls");
    cout<<"                             Liczba klientow: "<<Klient::ileKlientow<<endl;
    cout<<"1 - Dodaj nowego klienta\n";
    cout<<"2 - Usun klienta\n";
    cout<<"3 - Wyswietl wszystkich klientow\n";
    cout<<"4 - Wyszukaj klienta\n";
    cout<<"0 - Koniec\n";
    return getch();
}
void odczyt()
{
     int ID;
     string im;
     string na;
     double st;
     ifstream odczyt;
     odczyt.open("dane.txt");
     if(odczyt.good())
     {
     while(!odczyt.eof())
     {
                string liczba;
                getline(odczyt, liczba, '$');
                ID = string_na_int(liczba);
                getline(odczyt, im, '$');
                getline(odczyt, na, '$');
                getline(odczyt, liczba, '\n');
                st = string_na_double(liczba);
                klient[Klient::ileKlientow] = new Klient(ID, im, na, st);
     }
     }
     odczyt.close();
}
void zapisz()
{
     ofstream zapis;
     zapis.open("dane.txt", ios::out);
     for(int i = 0; i<Klient::ileKlientow; i++)
     {
           
     zapis<<klient[i]->ID()<<"$"<<klient[i]->Imie()<<"$"<<klient[i]->Nazwisko()<<"$"<<klient[i]->ile_srodkow()<<"\n";
     }
     zapis.close();
}

void dodaj_klienta()
{
     system("cls");
     string imie, nazwisko;
     cout<<"Podaj imie klienta: ";
     cin>>imie;
     cout<<"\nPodaj nazwisko klienta: ";
     cin>>nazwisko;
     klient[Klient::ileKlientow] = new Klient(id, imie, nazwisko);
     id++;
     zapisz();
}
void wypisz()
{
     system("cls");
     for(int i = 0; i<Klient::ileKlientow; i++)
     {
             cout<<"ID: "<<klient[i]->ID()<<endl;
             cout<<"Imie: "<<klient[i]->Imie()<<endl;
             cout<<"Nazwisko: "<<klient[i]->Nazwisko()<<endl;
             cout<<"Stan konta: "<<klient[i]->ile_srodkow()<<endl;
             cout<<"----------------------------------------------\n";
     }
     system("pause");
}

int main()
{
    bool koniec = false;
    odczyt();
    do
    {   
        
        switch(wyswietl_menu())
        {
                           case '1': dodaj_klienta(); break;
                           case '2': cout<<"opcja 2"; break;
                           case '3': wypisz(); break;
                           case '4': cout<<"opcja 4"; break;
                           case '0': koniec = true; break;
        }
    }
    while(!koniec);
    
    
    return 0;
}

Oczywiście ten program jeszcze nie jest skończony, ale najpierw chcę zrobić sprawne zapisywanie, odczytywanie i dodawanie nowych obiektów, dopiero wtedy mogę się zabierać za pozostałe rzeczy.

0

ref

1
     string liczba,stk;
     ifstream odczyt("dane.txt");
     while(getline(odczyt, liczba, '$'))
     {
                getline(odczyt, im, '$');
                getline(odczyt, na, '$');
                getline(odczyt, stk, '\n');
                klient[Klient::ileKlientow] = new Klient(string_na_int(liczba), im, na, string_na_double(stk));
     }
     odczyt.close();
0

Super dzięki, tylko że powinno być

 klient[Klient::ileKlientow] = new Klient(string_na_int(liczba), im, na, string_na_double(stk));
0

Jeszcze jedno pytanko. Jak zrobić konwersję class na class*? Za pomocą konstruktora kopiującego udało mi się class* na class, ale nie wiem jak zrobić odwrotnie.

0
Klient k;
Klient *wk=&k;
Klient &rk=*wk;
0

Dodałem funkcję usuwającą, jeszcze nie działa tak jak powinna, ale jestem ciekaw czy idę w dobrym kierunku.

 void usun_klienta()
{
     system("cls");
     int i, numer;
     cout<<"Podaj ID klienta którego chcesz usunąc\n";
     cin>>numer;
     for(i = 0; i<Klient::ileKlientow; i++)
     {
           if (klient[i]->ID()==numer) break;
     }
     Klient temp;
     for(i; i<Klient::ileKlientow; i++)
     {
            temp = klient[i];
            klient[i] = klient[i+1];
            klient[i+1] = &temp;
     }
     delete klient[Klient::ileKlientow];
     zapisz();
}
0

Pojawił się nowy problem, napisałem kilka funkcji i mam problem z jedną

int wielu_klientow(int numery[], int j)
{
    system("cls");
    cout<<"Znaleziono wielu klientow\n";
    for(int i = 0; i<j; i++)
    {
            wypisz(numery[i]);
            cout<<"------------------------------\n";
    }
    int id;
    cout<<"Podaj ID klienta ktorego chcesz wybrac\n";
    cin>>id;
    for(int i = 0; i<j; i++)
    {
            if (klient[numery[i]]->ID() == id)
            {
                                return numery[i];
            }
            
    }
    
} 

tu jest wywoływana

 int szukaj_imienia()
{
    system("cls");
    string imie;
    bool znaleziono = false;
    int numery[Klient::ileKlientow];
    int j = 0;
    cout<<"Podaj imie klienta do wyszukania\n";
    cin>>imie;
    for(int i = 0; i<Klient::ileKlientow; i++)
    {
            if (klient[i]->Imie() == imie)
            {
                      numery[j] = i;
                      j++;    
                      znaleziono = true;      
            }
            
    }
    if (!znaleziono) return -1;
    else
    {
        if(j>1) return wiele_klientow(numery, j);
        else return numery[0];
    }
}
//----------------------------------------
int szukaj_nazwiska()
{
    system("cls");
    string nazwisko;
    bool znaleziono = false;
    int numery[Klient::ileKlientow];
    int  j = 0;
    cout<<"Podaj nazwisko klienta do wyszukania\n";
    cin>>nazwisko;
    for(int i = 0; i<Klient::ileKlientow; i++)
    {
            if (klient[i]->Nazwisko() == nazwisko)
            {
                      numery[j] = i;
                      j++;    
                      znaleziono = true;      
            }
            
    }
    if (!znaleziono) return -1;
    else
    {
        if(j>1) return wiele_klientow(numery, j);
        else return numery[0];
    }
}

i tutaj wyrzuca mi taki błąd:
[Linker error] undefined reference towiele_klientow(int*, int)' `

0

A gdzie masz tą funkcję: wiele_klientow(int*, int)
Tamta na górze to: wielu_klientow(int*, int)
Typowy błąd - użycie polskich nazw.

0

Wow dzięki, w życiu bym nie wpadł że to coś tak banalnego.
Wrzucam kod działającego programu.

#include "klient.h"
#include<iostream>
#include<sstream>
#include<fstream>
#include<conio.h>
using namespace std;
Klient *klient[200];
int id = 0;
//----------------------------------------
double string_na_double(string tekst);
int string_na_int(string tekst);
char wyswietl_menu();
void odczyt();
void zapisz();
void menu_wyszukiwania();
int szukaj_ID();
int szukaj_imienia();
int szukaj_nazwiska();
int wielu_klientow(int numery[], int j);
void menu_klienta(int numer);
void dodaj_klienta();
void wypisz();
void wplata(int i);
void wyplata(int i);
void wypisz(int i);
void usun_klienta();
void usun_klienta(int numer);
//----------------------------------------

int main()
{
    bool koniec = false;
    odczyt();
    if(Klient::ileKlientow>0) id = klient[Klient::ileKlientow-1]->ID()+1;
    do
    {   

        
        switch(wyswietl_menu())
        {
                           case '1': dodaj_klienta(); break;
                           case '2': usun_klienta(); break;
                           case '3': wypisz(); break;
                           case '4': menu_wyszukiwania(); break;
                           case '0': koniec = true; break;
        }
    }
    while(!koniec);
    
    
    return 0;
}
//----------------------------------------
void menu_klienta(int numer)
{
     system("cls");
     if(numer!=-1)
     {
     bool koniec = false;
     do
     {
     wypisz(numer);
     
     cout<<"\nCo chcesz zrobic?\n";
     cout<<"1 - Wplata srodkow\n";
     cout<<"2 - Wyplata srodkow\n";
     cout<<"3 - Usun klienta\n";
     cout<<"0 - Wroc do menu wyszukiwania\n";
     switch(getch())
     {
                    case '1': wplata(numer); break;
                    case '2': wyplata(numer); break;
                    case '3': 
                         {
                              usun_klienta(numer); 
                              koniec = true;
                              break;
                         }
                    case '0': koniec = true; break;
     }
     }
     while(!koniec);
     }
     else
     {
         cout<<"Nie znaleziono klienta\n";
     }
}
//----------------------------------------
int wielu_klientow(int numery[], int j)
{
    system("cls");
    cout<<"Znaleziono wielu klientow\n";
    for(int i = 0; i<j; i++)
    {
            wypisz(numery[i]);
            cout<<"------------------------------\n";
    }
    int id;
    cout<<"Podaj ID klienta ktorego chcesz wybrac\n";
    cin>>id;
    for(int i = 0; i<j; i++)
    {
            if (klient[numery[i]]->ID() == id)
            {
                                return numery[i];
            }
            
    }
    
}
//----------------------------------------
void wplata(int i)
{
     system("cls");
     double ile;
     cout<<"Ile chcesz wplacic?\n";
     cin>>ile;
     klient[i]->dodaj_srodkow(ile);
     zapisz();
}
//----------------------------------------
void wyplata(int i)
{
     system("cls");
     double ile;
     cout<<"Ile chcesz wyplacic?\n";
     cin>>ile;
     klient[i]->odejmij_srodkow(ile);
     zapisz();
}
//----------------------------------------
int szukaj_ID()
{
    system("cls");
    int id;
    cout<<"Podaj ID klienta do wyszukania\n";
    cin>>id;
    for(int i = 0; i<Klient::ileKlientow; i++)
    {
            if (klient[i]->ID() == id)
            {
                                return i;
            }
            
    }
    return -1;
}
//----------------------------------------
int szukaj_imienia()
{
    system("cls");
    string imie;
    bool znaleziono = false;
    int numery[Klient::ileKlientow];
    int j = 0;
    cout<<"Podaj imie klienta do wyszukania\n";
    cin>>imie;
    for(int i = 0; i<Klient::ileKlientow; i++)
    {
            if (klient[i]->Imie() == imie)
            {
                      numery[j] = i;
                      j++;    
                      znaleziono = true;      
            }
            
    }
    if (!znaleziono) return -1;
    else
    {
        if(j>1) return wielu_klientow(numery, j);
        else return numery[0];
    }
}
//----------------------------------------
int szukaj_nazwiska()
{
    system("cls");
    string nazwisko;
    bool znaleziono = false;
    int numery[Klient::ileKlientow];
    int  j = 0;
    cout<<"Podaj nazwisko klienta do wyszukania\n";
    cin>>nazwisko;
    for(int i = 0; i<Klient::ileKlientow; i++)
    {
            if (klient[i]->Nazwisko() == nazwisko)
            {
                      numery[j] = i;
                      j++;    
                      znaleziono = true;      
            }
            
    }
    if (!znaleziono) return -1;
    else
    {
        if(j>1) return wielu_klientow(numery, j);
        else return numery[0];
    }
}
//----------------------------------------
void menu_wyszukiwania()
{
     bool koniec = false;
     do
     {
     system("cls");
     cout<<"Wedlug jakiego kryterium chcesz wyszukac klienta\n";
     cout<<"1 - Po numerze ID\n";
     cout<<"2 - Po imieniu\n";
     cout<<"3 - Po nazwisku\n";
     cout<<"0 - Wroc do menu\n";
     switch(getch())
     {
                    case '1': menu_klienta(szukaj_ID()); break;
                    case '2': menu_klienta(szukaj_imienia()); break;
                    case '3': menu_klienta(szukaj_nazwiska()); break;
                    case '0': koniec = true; break;
     }
     }
     while(!koniec);
}
//----------------------------------------
double string_na_double(string tekst)
{
    istringstream strumien(tekst);
    double liczba;
    strumien>>liczba;
    return liczba;
}
//----------------------------------------
int string_na_int(string tekst)
{
    istringstream strumien(tekst);
    int z;
    strumien>>z;
    return z;
}
//----------------------------------------
char wyswietl_menu()
{
    system("cls");
    cout<<"                             Liczba klientow: "<<Klient::ileKlientow<<endl;
    cout<<"1 - Dodaj nowego klienta\n";
    cout<<"2 - Usun klienta\n";
    cout<<"3 - Wyswietl wszystkich klientow\n";
    cout<<"4 - Wyszukaj klienta\n";
    //cout<<"5 - Wplaty/wyplaty\n";
    cout<<"0 - Koniec\n";
    return getch();
}
//----------------------------------------
void odczyt()
{
     string im;
     string na;
     string liczba,stk;
     ifstream odczyt("dane.txt");
    if (odczyt.good())
     {
     while(getline(odczyt, liczba, '$'))
     {
                getline(odczyt, im, '$');
                getline(odczyt, na, '$');
                getline(odczyt, stk, '\n');
                klient[Klient::ileKlientow] = new Klient(string_na_int(liczba), im, na, string_na_double(stk));
     }
     odczyt.close();
     
     }
}
//----------------------------------------
void zapisz()
{
     ofstream zapis;
     zapis.open("dane.txt", ios::out);
     for(int i = 0; i<Klient::ileKlientow; i++)
     {
           
     zapis<<klient[i]->ID()<<"$"<<klient[i]->Imie()<<"$"<<klient[i]->Nazwisko()<<"$"<<klient[i]->ile_srodkow()<<"\n";
     }
     zapis.close();
}
//----------------------------------------
void dodaj_klienta()
{
     system("cls");
     string imie, nazwisko;
     cout<<"Podaj imie klienta: ";
     cin>>imie;
     cout<<"\nPodaj nazwisko klienta: ";
     cin>>nazwisko;
     klient[Klient::ileKlientow] = new Klient(id, imie, nazwisko);
     id++;
     zapisz();
}
//----------------------------------------
void wypisz()
{
     system("cls");
     for(int i = 0; i<Klient::ileKlientow; i++)
     {
             cout<<"ID: "<<klient[i]->ID()<<endl;
             cout<<"Imie: "<<klient[i]->Imie()<<endl;
             cout<<"Nazwisko: "<<klient[i]->Nazwisko()<<endl;
             cout<<"Stan konta: "<<klient[i]->ile_srodkow()<<endl;
             cout<<"----------------------------------------------\n";
     }
     system("pause");
}
//----------------------------------------
void wypisz(int i)
{
     
             cout<<"ID: "<<klient[i]->ID()<<endl;
             cout<<"Imie: "<<klient[i]->Imie()<<endl;
             cout<<"Nazwisko: "<<klient[i]->Nazwisko()<<endl;
             cout<<"Stan konta: "<<klient[i]->ile_srodkow()<<endl;
}
//----------------------------------------
void usun_klienta()
{
     system("cls");
     int i, numer;
     bool znaleziono = false;
     cout<<"Podaj ID klienta ktorego chcesz usunac\n";
     cin>>numer;
     for(i = 0; i<Klient::ileKlientow; i++)
     {
           if (klient[i]->ID()==numer) 
           {
                                       znaleziono  = true;
                                       break;
           }
     }
     if(znaleziono)
     {
     Klient *temp;
     for(i; i<Klient::ileKlientow; i++)
     {
            temp = klient[i];
            klient[i] = klient[i+1];
            klient[i+1] = temp;
     }
     delete klient[Klient::ileKlientow];
     zapisz();
     }
     else
     {
         cout<<"Niestety nie znaleziono klienta o takim numerze ID\n";
         system("pause");
     }
}
//----------------------------------------
void usun_klienta(int numer)
{    
     Klient *temp;
     int i = numer;
     for(i; i<Klient::ileKlientow; i++)
     {
            temp = klient[i];
            klient[i] = klient[i+1];
            klient[i+1] = temp;
     }
     delete klient[Klient::ileKlientow];
     zapisz();
}
//----------------------------------------

 

Co sądzicie? Czegoś brakuje? Coś jest zbędne? Wydaje mi się że tych funkcji jest trochę za dużo.

0

Daje pełny kod.
Klient.h

 #include<iostream>
using namespace std;
class Klient
{
      private: 
               double stanKonta;
               string imie;
               string nazwisko;
               int numerID;
      public:
             static int ileKlientow;
             Klient(int id, string name, string surname, double stan = 0);
             Klient(){};
             //Klient(Klient *wzor);
             //Klient(Klient &wzor);
             void dodaj_srodkow ();
             void odejmij_srodkow ();
             void wyczysc_konto();
             int ID();
             double ile_srodkow();
             string Imie();
             string Nazwisko();
             ~Klient();
};

Klient.cpp

 #include "klient.h"
#include<fstream>
#include<sstream>
using namespace std;

int Klient::ileKlientow = 0; //licznik obiektów
//--------------------------
//konstruktor
Klient::Klient(int id, string name, string surname, double stan): numerID(id), imie(name), nazwisko(surname), stanKonta(stan)
{
                   ileKlientow++;
}
//--------------------------
//destruktor
Klient::~Klient()
{
                 ileKlientow--;
}
//---------------------------
void Klient::dodaj_srodkow()
{

                                  system("cls");
                                  double ile;
                                  cout<<"Ile chcesz wplacic?\n";
                                  cin>>ile;
                                  stanKonta += ile;
}
//---------------------------
void Klient::odejmij_srodkow()
{
                                    system("cls");
                                    double ile;
                                    cout<<"Ile chcesz wyplacic?\n";
                                    cin>>ile;
                                    stanKonta -= ile;
}
//---------------------------
void Klient::wyczysc_konto()
{
                       stanKonta = 0;
}
//---------------------------
/*Klient::Klient(Klient *wzor)
{
               stanKonta = wzor->stanKonta;
               imie = wzor->imie;
               nazwisko = wzor->nazwisko;
               numerID = wzor->numerID;
}
Klient::Klient(Klient &wzor)
{
               stanKonta = wzor.ile_srodkow();
               imie = wzor.Imie();
               nazwisko = wzor.Nazwisko();
               numerID = wzor.ID();
}*/
//---------------------------
int Klient::ID()
{
            return numerID;
}
string Klient::Imie()
{
              return imie;
}
string Klient::Nazwisko()
{
                  return nazwisko;
}
double Klient::ile_srodkow()
{
                     return stanKonta;
}
///////////////////////////////

main.cpp

#include "klient.h"
#include<iostream>
#include<sstream>
#include<fstream>
#include<conio.h>
using namespace std;
Klient *klient[200];
int id = 0;
//----------------------------------------
double string_na_double(string tekst);
int string_na_int(string tekst);
char wyswietl_menu();
void odczyt();
void zapisz();
void menu_wyszukiwania();
int szukaj_ID();
int szukaj_imienia();
int szukaj_nazwiska();
int wielu_klientow(int numery[], int j);
void menu_klienta(int numer);
void dodaj_klienta();
void wypisz();
void wypisz(int i);
void usun_klienta();
void usun_klienta(int numer);
//----------------------------------------

int main()
{
    bool koniec = false;
    odczyt();
    if(Klient::ileKlientow>0) id = klient[Klient::ileKlientow-1]->ID()+1;
    do
    {   

        
        switch(wyswietl_menu())
        {
                           case '1': dodaj_klienta(); break;
                           case '2': usun_klienta(); break;
                           case '3': wypisz(); break;
                           case '4': menu_wyszukiwania(); break;
                           case '0': koniec = true; break;
        }
    }
    while(!koniec);
    
    
    return 0;
}
//----------------------------------------
void menu_klienta(int numer)
{
     system("cls");
     if(numer!=-1)
     {
     bool koniec = false;
     do
     {
     wypisz(numer);
     
     cout<<"\nCo chcesz zrobic?\n";
     cout<<"1 - Wplata srodkow\n";
     cout<<"2 - Wyplata srodkow\n";
     cout<<"3 - Usun klienta\n";
     cout<<"0 - Wroc do menu wyszukiwania\n";
     switch(getch())
     {
                    case '1': 
                         {
                              klient[numer]->dodaj_srodkow();
                              zapisz();
                              break;
                         }
                    case '2': 
                         {
                              klient[numer]->odejmij_srodkow();
                              zapisz();
                              break;
                         }
                    case '3': 
                         {
                              usun_klienta(numer); 
                              koniec = true;
                              break;
                         }
                    case '0': koniec = true; break;
     }
     }
     while(!koniec);
     }
     else
     {
         cout<<"Nie znaleziono klienta\n";
     }
}
//----------------------------------------
int wielu_klientow(int numery[], int j)
{
    system("cls");
    cout<<"Znaleziono wielu klientow\n";
    for(int i = 0; i<j; i++)
    {
            wypisz(numery[i]);
            cout<<"------------------------------\n";
    }
    int id;
    cout<<"Podaj ID klienta ktorego chcesz wybrac\n";
    cin>>id;
    for(int i = 0; i<j; i++)
    {
            if (klient[numery[i]]->ID() == id)
            {
                                return numery[i];
            }
            
    }
    
}
//----------------------------------------
//----------------------------------------
int szukaj_ID()
{
    system("cls");
    int id;
    cout<<"Podaj ID klienta do wyszukania\n";
    cin>>id;
    for(int i = 0; i<Klient::ileKlientow; i++)
    {
            if (klient[i]->ID() == id)
            {
                                return i;
            }
            
    }
    return -1;
}
//----------------------------------------
int szukaj_imienia()
{
    system("cls");
    string imie;
    bool znaleziono = false;
    int numery[Klient::ileKlientow];
    int j = 0;
    cout<<"Podaj imie klienta do wyszukania\n";
    cin>>imie;
    for(int i = 0; i<Klient::ileKlientow; i++)
    {
            if (klient[i]->Imie() == imie)
            {
                      numery[j] = i;
                      j++;    
                      znaleziono = true;      
            }
            
    }
    if (!znaleziono) return -1;
    else
    {
        if(j>1) return wielu_klientow(numery, j);
        else return numery[0];
    }
}
//----------------------------------------
int szukaj_nazwiska()
{
    system("cls");
    string nazwisko;
    bool znaleziono = false;
    int numery[Klient::ileKlientow];
    int  j = 0;
    cout<<"Podaj nazwisko klienta do wyszukania\n";
    cin>>nazwisko;
    for(int i = 0; i<Klient::ileKlientow; i++)
    {
            if (klient[i]->Nazwisko() == nazwisko)
            {
                      numery[j] = i;
                      j++;    
                      znaleziono = true;      
            }
            
    }
    if (!znaleziono) return -1;
    else
    {
        if(j>1) return wielu_klientow(numery, j);
        else return numery[0];
    }
}
//----------------------------------------
void menu_wyszukiwania()
{
     bool koniec = false;
     do
     {
     system("cls");
     cout<<"Wedlug jakiego kryterium chcesz wyszukac klienta\n";
     cout<<"1 - Po numerze ID\n";
     cout<<"2 - Po imieniu\n";
     cout<<"3 - Po nazwisku\n";
     cout<<"0 - Wroc do menu\n";
     switch(getch())
     {
                    case '1': menu_klienta(szukaj_ID()); break;
                    case '2': menu_klienta(szukaj_imienia()); break;
                    case '3': menu_klienta(szukaj_nazwiska()); break;
                    case '0': koniec = true; break;
     }
     }
     while(!koniec);
}
//----------------------------------------
double string_na_double(string tekst)
{
    istringstream strumien(tekst);
    double liczba;
    strumien>>liczba;
    return liczba;
}
//----------------------------------------
int string_na_int(string tekst)
{
    istringstream strumien(tekst);
    int z;
    strumien>>z;
    return z;
}
//----------------------------------------
char wyswietl_menu()
{
    system("cls");
    cout<<"                             Liczba klientow: "<<Klient::ileKlientow<<endl;
    cout<<"1 - Dodaj nowego klienta\n";
    cout<<"2 - Usun klienta\n";
    cout<<"3 - Wyswietl wszystkich klientow\n";
    cout<<"4 - Wyszukaj klienta\n";
    //cout<<"5 - Wplaty/wyplaty\n";
    cout<<"0 - Koniec\n";
    return getch();
}
//----------------------------------------
void odczyt()
{
     string im;
     string na;
     string liczba,stk;
     ifstream odczyt("dane.txt");
    if (odczyt.good())
     {
     while(getline(odczyt, liczba, '$'))
     {
                getline(odczyt, im, '$');
                getline(odczyt, na, '$');
                getline(odczyt, stk, '\n');
                klient[Klient::ileKlientow] = new Klient(string_na_int(liczba), im, na, string_na_double(stk));
     }
     odczyt.close();
     
     }
}
//----------------------------------------
void zapisz()
{
     ofstream zapis;
     zapis.open("dane.txt", ios::out);
     for(int i = 0; i<Klient::ileKlientow; i++)
     {
           
     zapis<<klient[i]->ID()<<"$"<<klient[i]->Imie()<<"$"<<klient[i]->Nazwisko()<<"$"<<klient[i]->ile_srodkow()<<"\n";
     }
     zapis.close();
}
//----------------------------------------
void dodaj_klienta()
{
     system("cls");
     string imie, nazwisko;
     cout<<"Podaj imie klienta: ";
     cin>>imie;
     cout<<"\nPodaj nazwisko klienta: ";
     cin>>nazwisko;
     klient[Klient::ileKlientow] = new Klient(id, imie, nazwisko);
     id++;
     zapisz();
}
//----------------------------------------
void wypisz()
{
     system("cls");
     for(int i = 0; i<Klient::ileKlientow; i++)
     {
             cout<<"ID: "<<klient[i]->ID()<<endl;
             cout<<"Imie: "<<klient[i]->Imie()<<endl;
             cout<<"Nazwisko: "<<klient[i]->Nazwisko()<<endl;
             cout<<"Stan konta: "<<klient[i]->ile_srodkow()<<endl;
             cout<<"----------------------------------------------\n";
     }
     system("pause");
}
//----------------------------------------
void wypisz(int i)
{
     
             cout<<"ID: "<<klient[i]->ID()<<endl;
             cout<<"Imie: "<<klient[i]->Imie()<<endl;
             cout<<"Nazwisko: "<<klient[i]->Nazwisko()<<endl;
             cout<<"Stan konta: "<<klient[i]->ile_srodkow()<<endl;
}
//----------------------------------------
void usun_klienta()
{
     system("cls");
     int i, numer;
     bool znaleziono = false;
     cout<<"Podaj ID klienta ktorego chcesz usunac\n";
     cin>>numer;
     for(i = 0; i<Klient::ileKlientow; i++)
     {
           if (klient[i]->ID()==numer) 
           {
                                       znaleziono  = true;
                                       break;
           }
     }
     if(znaleziono)
     {
     Klient *temp;
     for(i; i<Klient::ileKlientow; i++)
     {
            temp = klient[i];
            klient[i] = klient[i+1];
            klient[i+1] = temp;
     }
     delete klient[Klient::ileKlientow];
     zapisz();
     }
     else
     {
         cout<<"Niestety nie znaleziono klienta o takim numerze ID\n";
         system("pause");
     }
}
//----------------------------------------
void usun_klienta(int numer)
{    
     Klient *temp;
     int i = numer;
     for(i; i<Klient::ileKlientow; i++)
     {
            temp = klient[i];
            klient[i] = klient[i+1];
            klient[i+1] = temp;
     }
     delete klient[Klient::ileKlientow];
     zapisz();
}
//----------------------------------------

 

Kompilator Dev C++ 4.9.9.2

1 użytkowników online, w tym zalogowanych: 0, gości: 1