[C++] Kilka problemow z programem...
Ostatnio zmodyfikowano 2012-01-18 14:36
Eruzione Temat założony przez niniejszego użytkownika |
[C++] Kilka problemow z programem... » 2012-01-17 23:38:17 Witam! Mam kilka problemow z moim programem. Program ma służyć do obsługi biblioteki (dodawanie/usuwanie/ edytowanie użytkowników oraz książek, zarządzanie wypożyczeniami itd). Mam kilka problemow z obsługą plików, a dokładnej: 1. Pierwszy użytkownik zapisuje mi się dwa razy, ale już każdy następny poprawnie. 2. Przy dodawaniu nowych książek w pliku jest ona zapisywana kilka razy. 2. Odczyt plików, tutaj mam największy problem. Program wczytuje mi tylko jedna książkę i jednego użytkownika, choć w bazie jest ich więcej. #include <iostream> #include <conio.h> #include <string> #include <fstream> #include <cstdlib> #include <string> #include <time.h> #include <clocale> #include <cstdio>
using namespace std;
struct Ksiazki { string tytul; string imie_autora; string nazwisko_autora; string wydawnictwo; int rok; long long nr_ISBN; };
struct Czlowiek { string imie; string nazwisko; long long PESEL; };
int i; int u;
Ksiazki nowy_tytul[ 200 ]; Czlowiek nowy_uzytkownik[ 200 ];
void Dodaj_K(); void Zobacz_K(); void Zapisz_K(); void Wczytaj_K(); void Usun_K(); void Edytuj_K();
void Dodaj_M(); void Zobacz_M(); void Zapisz_M(); void Wczytaj_M(); void Usun_M(); void Edytuj_M();
void Szukaj( string szuk_tyt ); void wypozycz(); void osoba_wyp(); string data();
int main() { char wybor; string szuk; char op_1; char op_2; char op_3; cout << endl; cout << " xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" << endl; cout << " xxxxxxxxxx xxx xx xxx xxxxxx xxx xxx xx xx xxx xxx xxxxxxxxx" << endl; cout << " xxxxxxxxxx xxx xx xx xxx xx xxxxxx xx xxx xxxx xxxx xxxxxx x xxxx xxx xxxxxxxx" << endl; cout << " xxxxxxxxxx xxx xx xxx xxxxxx xx xxx xxxx xxxx xx xxxxx xxx xxxxxxxx" << endl; cout << " xxxxxxxxxx xxx xx xx xxx xx xxxxxx xx xxx xxxx xxxx xxxxxx x xxxx xxxxxxxx" << endl; cout << " xxxxxxxxxx xxx xx xxx xx xxx xxxxx xxxx xx xxx xx xxx xxxxxxxx" << endl; cout << " xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" << endl; do { cout << endl; cout << " Aktualnie posiadasz " << i << " ksiazek/ksiazki i " << u << " uzytkownikow" << endl << endl; cout << " [1] : Dodawanie / Usuwanie / Edycja uzytkownika " << endl; cout << " [2] : Dodawanie / Usuwanie / Edycja ksiazki " << endl; cout << " [3] : Wypozyczenie " << endl; cout << " [4] : Zwrot " << endl; cout << " [5] : Wyswietlenie bazy ksiazek / uzytkownikow " << endl; cout << " [6] : Wczytanie bazy ksiazek i uzytkownikow " << endl; cout << endl; cout << " ESC - Koniec programu " << endl << endl; wybor = getch(); switch( wybor ) { case '1': { do { cout << endl; cout << " [1] Rejestracja nowego uzytkownika" << endl; cout << " [2] Usuniecie uzytkownika" << endl; cout << " [3] Edycja danych uzytkownika" << endl << endl; cout << " [4] Powrot do menu glownego" << endl << endl; op_1 = getch(); switch( op_1 ) { case '1': Dodaj_M(); break; case '2': Usun_M(); break; case '3': Edytuj_M(); break; } } while( op_1 != '4' ); } break; case '2': { do { cout << endl; cout << " [1] Dodanie nowej ksiazki" << endl; cout << " [2] Usuniecie ksiazki" << endl; cout << " [3] Edycja danych o ksiazce" << endl << endl; cout << " [4] Powrot do menu glownego" << endl << endl; op_2 = getch(); switch( op_2 ) { case '1': Dodaj_K(); break; case '2': Usun_K(); break; case '3': Edytuj_K(); break; } } while( op_2 != '4' ); } break; case '3': wypozycz(); break; case '4': break; case '5': { do { cout << endl; cout << " [1] Wyswietl baz ksiazek" << endl; cout << " [2] Wyswietl baze uzytkownikow" << endl << endl; cout << " [3] Powrot do menu glownego" << endl << endl; op_3 = getch(); switch( op_3 ) { case '1': Zobacz_K(); break; case '2': Zobacz_M(); break; } } while( op_3 != '3' ); } break; case '6': Wczytaj_K(); Wczytaj_M(); break; } system( "cls" ); } while( wybor != 27 ); return 0; } void Dodaj_K() { cout << " Podaj tytul : "; getline( cin, nowy_tytul[ i ].tytul ); cout << " Podaj imie autora : "; cin >> nowy_tytul[ i ].imie_autora; cout << " Podaj nazwisko autora : "; cin >> nowy_tytul[ i ].nazwisko_autora; cout << " Podaj wydawnictwo : "; cin >> nowy_tytul[ i ].wydawnictwo; cout << " Podaj rok wydania : "; cin >> nowy_tytul[ i ].rok; cout << " Podaj numer ISBN : "; cin >> nowy_tytul[ i ].nr_ISBN; cin.ignore(); i++; Zapisz_K(); cout << endl << " Ksiazka zostala dodana i zapisana w bazie !" << endl; cout << " Wcisnij ENTER! :)"; cout << endl; getchar(); }
void Dodaj_M() { cout << " Podaj imie : "; cin >> nowy_uzytkownik[ u ].imie; cout << " Podaj nazwisko : "; cin >> nowy_uzytkownik[ u ].nazwisko; cout << " Podaj PESEL : "; cin >> nowy_uzytkownik[ u ].PESEL; cin.ignore(); u++; Zapisz_M(); cout << endl << " Uzytkownik zostal dodany i zapisany w bazie !" << endl; cout << " Wcisnij ENTER! :)"; cout << endl; getchar(); }
void Zobacz_K() { if( i != 0 ) { for( int j = 0; j < i; j++ ) { cout << endl; cout << "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" << endl; cout << "x Ksiazka nr " << j + 1 << ": " << endl; cout << "x Tytul :: " << nowy_tytul[ j ].tytul << endl; cout << "x Autor :: " << nowy_tytul[ j ].imie_autora << " " << nowy_tytul[ j ].nazwisko_autora << endl; cout << "x Wydwanictwo :: " << nowy_tytul[ j ].wydawnictwo << endl; cout << "x Rok wydania :: " << nowy_tytul[ j ].rok << endl; cout << "x Numer ISBN :: " << nowy_tytul[ j ].nr_ISBN << endl; cout << "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" << endl; } } else cout << " Nie ma zadnej ksiazki w bazie!!"; }
void Zobacz_M() { if( u != 0 ) { for( int j = 0; j < u; j++ ) { cout << endl; cout << "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" << endl; cout << "x Uzytkownik nr :: " << j + 1 << endl; cout << "x Imie :: " << nowy_uzytkownik[ j ].imie << endl; cout << "x Nazwisko :: " << nowy_uzytkownik[ j ].nazwisko << endl; cout << "x PESEL :: " << nowy_uzytkownik[ j ].PESEL << endl; cout << "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" << endl; } } else cout << " Nie ma zadnego uzytkownika w bazie!!"; }
void Zapisz_K() { ofstream plik( "ksiazki.txt", ios::out | ios::app ); plik << i; for( int j = 0; j < i; j++ ) { plik << nowy_tytul[ j ].tytul << endl; plik << nowy_tytul[ j ].imie_autora << endl; plik << nowy_tytul[ j ].nazwisko_autora << endl; plik << nowy_tytul[ j ].wydawnictwo << endl; plik << nowy_tytul[ j ].rok << endl; plik << nowy_tytul[ j ].nr_ISBN << endl << endl; } plik.close(); }
void Zapisz_M() { ofstream plik( "uzytkownicy.txt", ios::out | ios::app ); plik << u; for( int j = 0; j < u; j++ ) { plik << nowy_uzytkownik[ j ].imie << endl; plik << nowy_uzytkownik[ j ].nazwisko << endl; plik << nowy_uzytkownik[ j ].PESEL << endl << endl; } plik.close(); }
void Wczytaj_K() { ifstream plik( "ksiazki.txt", ios::in ); plik >> i; int j = 0; while( plik != NULL ) { plik >> nowy_tytul[ j ].tytul; plik >> nowy_tytul[ j ].imie_autora; plik >> nowy_tytul[ j ].nazwisko_autora; plik >> nowy_tytul[ j ].wydawnictwo; plik >> nowy_tytul[ j ].rok; plik >> nowy_tytul[ j ].nr_ISBN; j++; } cout << endl << " Wczytano dane. Nacisnij ENTER!"; getchar(); }
void Wczytaj_M() { ifstream plik( "uzytkownicy.txt", ios::in ); plik >> u; short j = 0; do { plik >> nowy_uzytkownik[ j ].imie; plik >> nowy_uzytkownik[ j ].nazwisko; plik >> nowy_uzytkownik[ j ].PESEL; j++; } while( plik != NULL ); }
void Usun_K() { int kogo; if( i != 0 ) { cout << " Podaj numer ksiazki ktora chcesz usunac: "; cin >> kogo; cin.ignore(); if( kogo > i ) cout << " Operacja nie powiodla sie. Brak ksiazki o takim numerze"; else { for( int k = kogo; k < i; k++ ) { nowy_tytul[ k - 1 ].tytul = nowy_tytul[ k ].tytul; nowy_tytul[ k - 1 ].imie_autora = nowy_tytul[ k ].imie_autora; nowy_tytul[ k - 1 ].nazwisko_autora = nowy_tytul[ k ].nazwisko_autora; nowy_tytul[ k - 1 ].wydawnictwo = nowy_tytul[ k ].wydawnictwo; nowy_tytul[ k - 1 ].rok = nowy_tytul[ k ].rok; nowy_tytul[ k - 1 ].nr_ISBN = nowy_tytul[ k ].nr_ISBN; } i--; cout << " Operacja zakonczyla sie sukcesem! ksiazka o numerze " << kogo << " zostala usunieta!"; Zapisz_K(); } } else { cout << " Nie ma ksiazek w bazie!! Wcisnij ENTER!" << endl; getchar(); } }
void Usun_M() { int kogo; if( u != 0 ) { cout << " Podaj numer uzytkownika ktorego chcesz usunac: "; cin >> kogo; cin.ignore(); if( kogo > u ) cout << " Operacja nie powiodla sie. Brak uzytkownika o takim numerze"; else { for( int k = kogo; k < u; k++ ) { nowy_uzytkownik[ k - 1 ].imie = nowy_uzytkownik[ k ].imie; nowy_uzytkownik[ k - 1 ].nazwisko = nowy_uzytkownik[ k ].nazwisko; nowy_uzytkownik[ k - 1 ].PESEL = nowy_uzytkownik[ k ].PESEL; } u--; cout << " Operacja zakonczyla sie sukcesem! uzytkownik o numerze " << kogo << " zostal usuniety!"; Zapisz_M(); } } else { cout << " Nie ma uzytkownikow w bazie!! Wcisnij ENTER!"; getchar(); } }
void Edytuj_K() { int kogo; if( i != 0 ) { cout << " Podaj numer ksiazki ktora chcesz zmienic: "; cin >> kogo; cin.ignore(); if( kogo > i ) cout << " Operacja nie powiodla sie. Brak ksiazki o takim numerze"; else { cout << " Podaj tytul : "; getline( cin, nowy_tytul[ kogo - 1 ].tytul ); cout << " Podaj imie autora : "; cin >> nowy_tytul[ kogo - 1 ].imie_autora; cout << " Podaj nazwisko autora : "; cin >> nowy_tytul[ kogo - 1 ].nazwisko_autora; cout << " Podaj wydawnictwo : "; cin >> nowy_tytul[ kogo - 1 ].wydawnictwo; cout << " Podaj rok wydania : "; cin >> nowy_tytul[ kogo - 1 ].rok; cout << " Podaj numer ISBN : "; cin >> nowy_tytul[ kogo - 1 ].nr_ISBN; cout << " Operacja zakonczyla sie sukcesem! ksiazka o numerze " << kogo << " zostala zmieniona!"; Zapisz_K(); } } else { cout << " Nie ma ksiazki w bazie!! Wcisnij ENTER!"; getchar(); } }
void Edytuj_M() { int kogo; if( u != 0 ) { cout << " Podaj numer uzytkownika ktorego chcesz zmienic: "; cin >> kogo; cin.ignore(); if( kogo > u ) cout << " Operacja nie powiodla sie. Brak uzytkownika o takim numerze"; else { cout << " Podaj imie : "; cin >> nowy_uzytkownik[ kogo - 1 ].imie; cout << " Podaj nazwisko : "; cin >> nowy_uzytkownik[ kogo - 1 ].nazwisko; cout << " Podaj Pesel : "; cin >> nowy_uzytkownik[ kogo - 1 ].PESEL; cout << " Operacja zakonczyla sie sukcesem! ksiazka o numerze " << kogo << " zostala zmieniona!"; Zapisz_M(); } } else { cout << " Nie ma ksiazki w bazie!! Wcisnij ENTER!"; getchar(); } }
void Szukaj( string szuk_tyt ) { int licznik = 0; for( int l = 0; l < i; l++ ) { if( nowy_tytul[ l ].tytul == szuk_tyt ) { cout << "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" << endl; cout << "x Ksiazka nr " << l + 1 << ": " << endl; cout << "x Tytul :: " << nowy_tytul[ l ].tytul << endl; cout << "x Autor :: " << nowy_tytul[ l ].imie_autora << " " << nowy_tytul[ l ].nazwisko_autora << endl; cout << "x Wydwanictwo :: " << nowy_tytul[ l ].wydawnictwo << endl; cout << "x Rok wydania :: " << nowy_tytul[ l ].rok << endl; cout << "x Numer ISBN :: " << nowy_tytul[ l ].nr_ISBN << endl; cout << "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" << endl; licznik = licznik + 1; } } if( licznik == 0 ) { cout << " W bazie nie znaleziono ksiazki o podanym tytule" << endl; } cin.ignore(); cout << " Wcisnij ENTER! :)"; getchar(); }
string data() { time_t czas; struct tm * data; char godzina[ 80 ]; time( & czas ); data = localtime( & czas ); strftime( godzina, 80, "%d.%m.%Y", data ); return godzina; }
void wypozycz() { int licznik_1 = 0; char znak; string szuk_tyt; cout << " Podaj tytul ksiazki ktora chcesz wypozyczyc : "; cin >> szuk_tyt; for( int l = 0; l < i; l++ ) { if( nowy_tytul[ l ].tytul == szuk_tyt ) { cout << endl; cout << " Ksiazka nr " << l + 1 << ": " << endl; cout << " Tytul :: " << nowy_tytul[ l ].tytul << endl; cout << " Autor :: " << nowy_tytul[ l ].imie_autora << " " << nowy_tytul[ l ].nazwisko_autora << endl; cout << " Wydwanictwo :: " << nowy_tytul[ l ].wydawnictwo << endl; cout << " Rok wydania :: " << nowy_tytul[ l ].rok << endl; cout << " Numer ISBN :: " << nowy_tytul[ l ].nr_ISBN << endl; cout << endl; licznik_1 = licznik_1 + 1; string imie_os_wyp; string nazwisko_os_wyp; cout << " Podaj imie i nazwisko: "; cin >> imie_os_wyp >> nazwisko_os_wyp; cout << endl; int licznik_2 = 0; for( int l = 0; l < u; l++ ) { if( nowy_uzytkownik[ l ].imie == imie_os_wyp && nowy_uzytkownik[ l ].nazwisko == nazwisko_os_wyp ) { cout << endl << " Czy napewno chcesz wypozyczyc te ksiazke? (T - tak/N - nie)"; cin >> znak; if( znak == 'T' || znak == 't' ) { cout << " Prosze bardzo! " << endl; cout << " Ksiazka zostala wypozyczona dnia: " << data() << endl; cout << " Do zwrotu za miesiac! " << endl; cout << " UWAGA! Za kazdy dzien zwolki naliczana jest kara w wysokosci 2 zl" << endl; cout << endl; } else if( znak == 'N' || znak == 'n' ) { cout << " Rozmysliles sie? Trudno.. sproboj innym razem :) " << endl; } cin.ignore(); ofstream plik( "wyp.txt", ios::out | ios::app ); plik << i << endl; for( int j = 0; j < i; j++ ) { plik << nowy_tytul[ j ].tytul << endl; plik << nowy_tytul[ j ].imie_autora << endl; plik << nowy_tytul[ j ].nazwisko_autora << endl; plik << nowy_tytul[ j ].wydawnictwo << endl; plik << nowy_tytul[ j ].rok << endl; plik << nowy_tytul[ j ].nr_ISBN << endl; plik << data() << endl; } licznik_2 = licznik_2 + 1; } } if( licznik_2 == 0 ) { cout << " W bazie nie znaleziono osoby o podanym imieniu i nazwisku," << endl; cout << " aby moc wypozyczyc ksiazke prosze sie zaejestrowac. " << endl; } } } if( licznik_1 == 0 ) { cout << " W bazie nie znaleziono ksiazki o podanym tytule" << endl; } cin.ignore(); cout << "Wcisnij ENTER! :)"; getchar(); }
Z góry dzięki za pomoc! Każda wskazówka będzie dla mnie cenna. |
|
jsc |
» 2012-01-17 23:49:14 Przede wszystkim skopiuj od siebie kod i wklej go do znaczników cpp, bo kod jest słabo czytelny. Nie zaszkodziłoby abyś się zapoznał: Kurs STCKurs formatowania postów na forum[/tut]. |
|
DejaVu |
» 2012-01-18 01:34:27 Masz źle napisane wczytywanie i zapisywanie. Jeżeli tytuł/imię/cokolwiek będzie miało więcej jak jeden wyraz to z automatu cała reszta nie zostanie wczytana. Druga sprawa: nie zapisujesz nigdzie informacji ile jest obecnie rekordów w bazie. Czy są jeszcze jakieś błędy - nie wiem. To takie błędy, które zauważyłem na pierwsze scrollnięcie Twojego kodu. |
|
Eruzione Temat założony przez niniejszego użytkownika |
» 2012-01-18 10:05:42 Masz źle napisane wczytywanie i zapisywanie. Jeżeli tytuł/imię/cokolwiek będzie miało więcej jak jeden wyraz to z automatu cała reszta nie zostanie wczytana. Druga sprawa: nie zapisujesz nigdzie informacji ile jest obecnie rekordów w bazie. Czy są jeszcze jakieś błędy - nie wiem. To takie błędy, które zauważyłem na pierwsze scrollnięcie Twojego kodu. |
Dzięki za wskazówki. Czy funkcje zapisujące i wczytujące są totalnie źle napisane i muszę je napisać od nowa czy mogę coś porostu zmienić? |
|
DejaVu |
» 2012-01-18 13:21:39 |
|
Eruzione Temat założony przez niniejszego użytkownika |
» 2012-01-18 14:36:41 Pomimo przeczytania przeczytania artykułu który podał DejaVu, a także artykułu o obsłudze plików, nadal nie wiem co jest nie tak. Próbowałem użyć funkcji getline(), ale ona takze nie daje efektu.
Czy mógłby mi ktoś napisać co jest nie tak z moimi funkcjami wczytującymi i zapisującymi? Próbowałem różnych rozwiązań, ale żadne się nie sprawdza. |
|
« 1 » |