paula1902 Temat założony przez niniejszego użytkownika |
[c++] Program do obsługi biblioteki. Problem z funkcją wypożyczającą ksiązki » 2018-01-20 19:32:20 Mam problem z programem. Właściwie zalążkiem programu, bo te wszystkie dane powinny być pobierane od użytkownika lub z pliku i zapisane do pliku. Ale mam problem ze złożonymi strukturami dlatego postanowiłam najpierw spróbować w ten sposób. Muszę stworzyć listę czytelników, listę książek i połączyć książki wypożyczone z czytelnikami. Funkcje dodawania ksiązki i czytelnika działają. Natomiast problem pojawia się z wypożyczeniem (a więc i oddaniem, bo nie było możliwości sprawdzenia). Kompilator nie wyrzuca mi żadnych błędów. Próbowałam modyfikować funkcję na różne sposoby, jednak po wywołaniu funkcji wypozyczKs i nastepnym wypiszLC nie wyświetla się nic. #include <iostream> #include <string> using namespace std;
struct Ksiazka { string nAutora; string iAutora; string tytul; int liczba_egz; Ksiazka * Knast; };
struct Wypozyczona { Ksiazka * wypozyczona; string dataWyp; Wypozyczona * nastWyp; };
struct Czytelnik { string nazwisko; string imie; int nr_karty; Czytelnik * Cnast; Wypozyczona * wypKs; };
void dodajKsiazke( Ksiazka *& gl, const string nazw, const string im, const string tytul, int const le ); void dodajCzytelnika( Czytelnik *& gl, const string nazw, const string im, int const nr ); void dodDoWypoz( Wypozyczona *& gl, Ksiazka *& doWyp, const string data ); void wypiszLK( Ksiazka * glowa ); void wypiszC( Czytelnik * czyt ); void wypiszLC( Czytelnik * glowa ); Czytelnik * znajdzCzytelnika( Czytelnik * gl, const string nazw, const string imie ); Ksiazka * znajdzKsiazke( Ksiazka * gl, const string tytul ); Wypozyczona * znajdzWypozyczona( Wypozyczona * gl, Ksiazka * szukana ); void usunKs( Ksiazka *& gl, Wypozyczona * gw, const string tytul ); void wypozycz( Ksiazka *& gl, Czytelnik * & gc, const string nazw, const string imie, const string tytul, const string data ); void usunZwyp( Wypozyczona *& gl, Wypozyczona *& usun ); void oddajKsiazke( Ksiazka * & gl, Czytelnik *& gc, const string nazw, const string imie, const string tytul ); void usunCzytelnika( Czytelnik * gl, const string nazwisko, const string imie );
int main() { Czytelnik * glowaC = NULL; Ksiazka * glowaK = NULL; dodajKsiazke( glowaK, "Sienkiewicz", "Henryk", "W pustyni i w puszczy", 3 ); dodajKsiazke( glowaK, "Sienkiewicz", "Henryk", "Krzyzacy", 15 ); dodajKsiazke( glowaK, "Mickiewicz", "Adam", "Pan Tadeusz", 7 ); dodajKsiazke( glowaK, "Kaminski", "Aleksander", "Kamienie na szaniec", 1 ); dodajCzytelnika( glowaC, "Lis", "Piotr", 0256 ); dodajCzytelnika( glowaC, "Nowak", "Piotr", 0471 ); dodajCzytelnika( glowaC, "Nowak", "Adam", 0257 ); dodajCzytelnika( glowaC, "Kot", "Anna", 0456 ); dodajCzytelnika( glowaC, "Nowaczewski", "Piotr", 0252 ); wypiszLC( glowaC ); cout << endl; wypiszC( znajdzCzytelnika( glowaC, "Nowak", "Adam" ) ); wypiszC( znajdzCzytelnika( glowaC, "Nowak", "Ada" ) ); cout << endl; wypozycz( glowaK, glowaC, "Nowak", "Piotr", "Krzyzacy", "2018-01-13" ); wypozycz( glowaK, glowaC, "Nowak", "Piotr", "Pan Tadeusz", "2018-01-13" ); wypozycz( glowaK, glowaC, "Nowak", "Adam", "Pan Tadeusz", "2018-01-13" ); wypiszLC( glowaC ); wypiszC( znajdzCzytelnika( glowaC, "Nowaczewski", "Piotr" ) ); cin.get(); return 0; }
void dodajKsiazke( Ksiazka *& gl, const string nazw, const string im, const string tytul, int const le ) { Ksiazka * nowa = new Ksiazka; nowa->nAutora = nazw; nowa->iAutora = im; nowa->tytul = tytul; nowa->liczba_egz = le; nowa->Knast = NULL; if( gl == NULL ) { gl = nowa; return; } if( gl = nowa ) nowa->liczba_egz += gl->liczba_egz; if( gl->tytul > nowa->tytul ) { nowa->Knast = gl; gl = nowa; return; } Ksiazka * tmp = gl; while( tmp->Knast != NULL && tmp->Knast->tytul < nowa->tytul ) tmp = tmp->Knast; nowa->Knast = tmp->Knast; tmp->Knast = nowa; }
void dodajCzytelnika( Czytelnik *& gl, const string nazw, const string im, int const nr ) { Czytelnik * nowy = new Czytelnik; nowy->nazwisko = nazw; nowy->imie = im; nowy->nr_karty = nr; nowy->Cnast = NULL; nowy->wypKs = NULL; if( gl == NULL ) { gl = nowy; return; } if( gl->nazwisko > nowy->nazwisko ) { nowy->Cnast = gl; gl = nowy; return; } if( gl->nazwisko == nowy->nazwisko ) { if( gl->imie > nowy->imie ) { nowy->Cnast = gl; gl = nowy; return; } } Czytelnik * tmp = gl; while( tmp->Cnast != NULL && tmp->Cnast->nazwisko < nowy->nazwisko ) tmp = tmp->Cnast; nowy->Cnast = tmp->Cnast; tmp->Cnast = nowy; }
void dodDoWypoz( Wypozyczona *& gl, Ksiazka *& doWyp, const string data ) { Wypozyczona * wyp = new Wypozyczona; wyp->wypozyczona = doWyp; wyp->dataWyp = data; wyp->nastWyp = NULL; if( gl == NULL ) gl = wyp; return; if( gl->dataWyp > wyp->dataWyp ) { wyp->nastWyp = gl; gl = wyp; return; } Wypozyczona * tmp = gl; while( tmp->nastWyp != NULL && tmp->nastWyp->dataWyp < wyp->dataWyp ) tmp = tmp->nastWyp; wyp->nastWyp = tmp->nastWyp; tmp->nastWyp = wyp; }
void wypiszLK( Ksiazka * glowa ) { while( glowa != NULL ) { cout << glowa->nAutora << " " << glowa->iAutora << " " << '"' << glowa->tytul << '"' << " " << glowa->liczba_egz << endl; glowa = glowa->Knast; } }
void wypiszC( Czytelnik * czyt ) { if( czyt != NULL ) { cout << czyt->nazwisko << " " << czyt->imie << " " << czyt->nr_karty << endl; if( czyt->wypKs != NULL ) wypiszLK( czyt->wypKs->wypozyczona ); } } void wypiszLC( Czytelnik * glowa ) { while( glowa != NULL ) { wypiszC( glowa ); if( glowa->wypKs != NULL ) wypiszLK( glowa->wypKs->wypozyczona ); glowa = glowa->Cnast; } } Czytelnik * znajdzCzytelnika( Czytelnik * gl, const string nazw, const string imie ) { while( gl != NULL ) { if( gl->nazwisko == nazw && gl->imie == imie ) return gl; gl = gl->Cnast; } return NULL; }
Ksiazka * znajdzKsiazke( Ksiazka * gl, const string tytul ) { while( gl != NULL ) { if( gl->tytul == tytul ) return gl; gl = gl->Knast; } return NULL; }
Wypozyczona * znajdzWypozyczona( Wypozyczona * gl, Ksiazka * szukana ) { while( gl != NULL ) { if( gl->wypozyczona == szukana ) return gl; gl = gl->nastWyp; } return NULL; }
void usunKs( Ksiazka *& gl, Wypozyczona * gw, const string tytul ) { Ksiazka * usun = znajdzKsiazke( gl, tytul ); if( gl == NULL ) { cout << "Brak ksiazek w bazie!" << endl; return; } if( usun == NULL ) { cout << "Nie ma takiej ksiazki w bazie!" << endl; return; } if( znajdzWypozyczona( gw, usun ) != NULL ) { if( gl == usun ) { gl = gl->Knast; delete usun; return; } Ksiazka * tmp = gl; while(( tmp->Knast != NULL ) && tmp->Knast != usun ) tmp = tmp->Knast; if( tmp->Knast != NULL ) { usun = tmp->Knast; tmp->Knast = tmp->Knast->Knast; delete usun; return; } cout << "Ksiazka jest wypozyczona!" << endl; } } void wypozycz( Ksiazka *& gl, Czytelnik * & gc, const string nazw, const string imie, const string tytul, const string data ) { Ksiazka * szukana = znajdzKsiazke( gl, tytul ); if( szukana == NULL ) cout << "Brak ksiazki w systemie!" << endl; if( szukana->liczba_egz == 0 ) cout << "Brak dostepnych egzemplarzy!"; Czytelnik * czytel = znajdzCzytelnika( gc, nazw, imie ); if( czytel == NULL ) cout << "Nie ma takiego czytelnika w bazie!"; dodDoWypoz( czytel->wypKs, szukana, data ); ( szukana->liczba_egz ) --; }
void usunZwyp( Wypozyczona *& gl, Wypozyczona *& usun ) { if( gl == NULL ) { return; } if( gl == usun ) { gl = gl->nastWyp; delete usun; return; } Wypozyczona * tmp = gl; while(( tmp->nastWyp != NULL ) && tmp->nastWyp != usun ) tmp = tmp->nastWyp; if( tmp->nastWyp != NULL ) { usun = tmp->nastWyp; tmp->nastWyp = tmp->nastWyp->nastWyp; delete usun; return; } }
void oddajKsiazke( Ksiazka * & gl, Czytelnik * & gc, const string nazw, const string imie, const string tytul ) { Czytelnik * czyt = znajdzCzytelnika( gc, nazw, imie ); if( czyt == NULL ); cout << "Nie ma takiego czytelnika w bazie!" << endl; Ksiazka * ks = znajdzKsiazke( gl, tytul ); Wypozyczona * wypC = znajdzWypozyczona( czyt->wypKs, ks ); if( wypC == NULL ) cout << "Nie znaleziono takiej ksiazki u czytelnika!" << endl; if( ks == NULL ) cout << "Brak takiej ksiazki w bazie!" << endl; usunZwyp( czyt->wypKs, wypC ); ks->liczba_egz++; }
void usunCzytelnika( Czytelnik * gl, const string nazwisko, const string imie ) { Czytelnik * usun = znajdzCzytelnika( gl, nazwisko, imie ); if( gl == NULL ) { cout << "Brak czytelnikow w bazie!" << endl; return; } if( gl == usun ) { if( usun->wypKs == NULL ) { gl = gl->Cnast; delete usun; return; } cout << "Nie mozna usunac czytelnika!" << endl; } Czytelnik * tmp = gl; while(( tmp->Cnast != NULL ) && tmp->Cnast != usun ) tmp = tmp->Cnast; if( tmp->Cnast != NULL ) { if( usun->wypKs == NULL ) { usun = tmp->Cnast; tmp->Cnast = tmp->Cnast->Cnast; delete usun; return; } cout << "Nie mozna usunac czytelnika!" << endl; } }
|