tidde Temat założony przez niniejszego użytkownika |
[C++, fstream] Własna baza danych w oparciu o plik » 2013-06-26 20:53:56 Witam serdecznie Panów.... Napisałem program który umożliwia tworzenie bazy danych osób, nie działa mi zapisywanie do pliku(tworzy plik ale nie zapisuje w nim nic) a także odczytywanie z pliku i usuwanie bazy. Po 2 nie wiem jak skonstruować funkcję szukaj ( by szukało w bazie osób np poprzez łączenie różnych kryteriów nr telefonu+imie czy inne) wklejam kod #include <cstdlib> #include <iostream> #include <conio.h> #define MAX 100 #include <fstream> #include <string> using namespace std; struct osoba { char imie[ 20 ]; char nazwisko[ 30 ]; char numer[ 15 ]; char wiek[ 2 ]; char miejsce_urodzenia[ 40 ]; }; void wczytaj( struct osoba Baza[], int i ) { cout << "\n ID : " << i << endl; cout << "Imie : "; cin >> Baza[ i ].imie; cout << "Nazwisko : "; cin >> Baza[ i ].nazwisko; cout << "Nr tel : "; cin >> Baza[ i ].numer; cout << "Wiek : "; cin >> Baza[ i ].wiek; cout << "Miejsce urodzenia: "; cin >> Baza[ i ].miejsce_urodzenia; }
void WypiszOsobe( struct osoba Baza[], int i ) { cout << "Imie : "; cout << Baza[ i ].imie << endl; cout << "Nazwisko : "; cout << Baza[ i ].nazwisko << endl; cout << "Nr tel : "; cout << Baza[ i ].numer << endl; cout << "Wiek : "; cout << Baza[ i ].wiek << endl; cout << "Miejsce urodzenia: "; cout << Baza[ i ].miejsce_urodzenia << endl; }
void WypiszBaze( struct osoba Baza[], int n ) { int i; for( i = 0; i < n; i++ ) if( Baza[ i ].imie[ 0 ] != 0 ) { cout << "ID : " << i << endl; cout << "Imie : "; cout << Baza[ i ].imie << endl; cout << "Nazwisko : "; cout << Baza[ i ].nazwisko << endl; cout << "Nr tel : "; cout << Baza[ i ].numer << endl; cout << "Wiek : "; cout << Baza[ i ].wiek << endl; cout << "Miejsce urodzenia: "; cout << Baza[ i ].miejsce_urodzenia << endl; } else cout << "Baza jest pusta"; }
void szukaj( struct osoba Baza[], int i ) { }
void kasuj( struct osoba Baza[], int i ) { char w; int s; cout << "Czy chcesz wykasowac dane z bazy ? [T/N]"; cin >> w; if( w == 'T' || w == 't' ) { for( s = 0; s < i; s++ ) { cout << Baza[ i ].imie << ""; Baza[ i ].nazwisko == ""; Baza[ i ].wiek == ""; Baza[ i ].numer == ""; Baza[ i ].miejsce_urodzenia == ""; } } }
void Zapisz( struct osoba Baza[], int i ) { int n; ofstream plik; plik.open( "baza.txt", ios::out | ios::app ); if( plik.fail() ) { plik.close(); exit( 1 ); } for( n = 0; n <= i; n++ ) if( Baza[ i ].imie[ 0 ] != 0 ) { plik >> Baza[ i ].imie << endl; plik >> Baza[ i ].nazwisko << endl; plik >> Baza[ i ].wiek << endl; plik >> Baza[ i ].numer << endl; plik >> Baza[ i ].miejsce_urodzenia << endl; } plik.close(); }
void Wczytaj( struct osoba Baza[], int i ) { ifstream plik( "baza.txt", std::ios::in | std::ios::out ); if( plik.good() == true ) do { cout << Baza[ i ].imie << endl; cout << Baza[ i ].nazwisko << endl; cout << Baza[ i ].wiek << endl; cout << Baza[ i ].numer << endl; cout << Baza[ i ].miejsce_urodzenia << endl; } while( !plik.eof() ); cout << "Wczytano dane. Nacisnij ENTER!"; getchar(); }
int main( int argc, char * argv[] ) { struct osoba BazaOsob[ MAX ]; int n = 0, wybor; int ile; cout << "Podaj wielkosc bazy danych : "; cin >> ile; if( ile > MAX ) cout << "Podales zbyt duzy rozmiar bazdy danych -max wynosi " << MAX; else { do { cout << "1. Dodaj osobe \n"; cout << "2. Wypisz osobe\n"; cout << "3. Wypisz baze\n"; cout << "4. Szukaj osobe\n"; cout << "5. Zapisz do pliku\n"; cout << "6. Kasuj dane\n"; cout << "7. Wyswietl zawartosc pliku\n"; cout << "8. Koniec\n"; cin >> wybor; switch( wybor ) { case 1: wczytaj( BazaOsob, n ); n++; system( "cls" ); break; case 2: int i; cout << "Podaj numer: "; cin >> i; if( i < n ) { cout << "Osoba o ID: " << i << ": \n"; WypiszOsobe( BazaOsob, i ); } system( "cls" ); break; case 3: WypiszBaze( BazaOsob, n ); break; case 4: szukaj( BazaOsob, n ); break; case 5: Zapisz( BazaOsob, n ); break; case 6: kasuj( BazaOsob, n ); break; case 8: return EXIT_SUCCESS;; break; default: { system( "cls" ); system( "color 17" ); cout << "\n WINDOWS FATAL ERROR \n BlueScreen \n"; } system( "cls" ); }; } while( wybor = 8 ); } getch(); return EXIT_SUCCESS; }
|
|
DejaVu |
» 2013-06-26 20:57:23 void Wczytaj( struct osoba Baza[], int i ) { ifstream plik( "baza.txt", std::ios::in | std::ios::out ); if( plik.good() == true ) do { cout << Baza[ i ].imie << endl; cout << Baza[ i ].nazwisko << endl; cout << Baza[ i ].wiek << endl; cout << Baza[ i ].numer << endl; cout << Baza[ i ].miejsce_urodzenia << endl; } while( !plik.eof() ); cout << "Wczytano dane. Nacisnij ENTER!"; getchar(); }
cout-em raczej trudno wczytać dane z pliku :) Poza tym nie otwieraj pliku jednocześnie do odczytu i zapisu bo std::fstream jest kapryśny... |
|
pekfos |
» 2013-06-26 20:57:44 W funkcji zapisującej powinny być operatory <<, zamiast >>, a we wczytującej odwrotnie. Poza tym nie otwieraj pliku jednocześnie do odczytu i zapisu bo std::fstream jest kapryśny... |
Jeśli nie są przeplatane operacje odczytu z zapisem to nie powinno być problemu. A jeśli są, to przed wykonaniem operacji innego typu, trzeba ustawić odpowiednią pozycję w pliku. |
|
tidde Temat założony przez niniejszego użytkownika |
» 2013-06-26 21:06:20 poprawiłem i nadal wywala mi błędy...;/ i nei chce odczytać ani zapisać do pliku |
|
tidde Temat założony przez niniejszego użytkownika |
» 2013-06-26 21:11:08 jeżeli ktoś znalazłby czas prosiłbym o ukazanie mi poprawnej funkcji zapisywania i wyświetlania...dopiero zaczynam prg w c++ i błędy widać pewnie gołym okiem ... |
|
pekfos |
» 2013-06-26 21:12:34 Pokaż aktualne Wczytaj() i Zapisz(). |
|
tidde Temat założony przez niniejszego użytkownika |
» 2013-06-26 21:16:03 void Zapisz( struct osoba Baza[], int i ) { int n; ofstream plik; plik.open( "baza.txt", ios::out | ios::app ); if( plik.fail() ) { plik.close(); exit( 1 ); } for( n = 0; n <= i; n++ ) if( Baza[ i ].imie[ 0 ] != 0 ) { plik << Baza[ i ].imie << endl; plik << Baza[ i ].nazwisko << endl; plik << Baza[ i ].wiek << endl; plik << Baza[ i ].numer << endl; plik << Baza[ i ].miejsce_urodzenia << endl; } plik.close(); }
void Wczytajplik( struct osoba Baza[], int i ) { ifstream plik( "baza.txt", std::ios::in | std::ios::out ); if( plik.good() == true ) do { cin >> Baza[ i ].imie; cin >> Baza[ i ].nazwisko; cin >> Baza[ i ].wiek; cin >> Baza[ i ].numer; cin >> Baza[ i ].miejsce_urodzenia; } while( !plik.eof() ); cout << "Wczytano dane. Nacisnij ENTER!"; getchar(); } |
|
pekfos |
» 2013-06-26 21:18:56 cin to nie plik i nie zwiększasz nigdzie zmiennej i (w Wczytajplik()). |
|
« 1 » 2 |