Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++, fstream] Własna baza danych w oparciu o plik

Ostatnio zmodyfikowano 2013-06-26 21:33
Autor Wiadomość
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
C/C++
#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 7 :
                // wyswietl(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;
}
P-86279
DejaVu
» 2013-06-26 20:57:23
C/C++
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...
P-86281
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.
P-86282
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
P-86284
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 ...
P-86286
pekfos
» 2013-06-26 21:12:34
Pokaż aktualne Wczytaj() i Zapisz().
P-86287
tidde
Temat założony przez niniejszego użytkownika
» 2013-06-26 21:16:03
C/C++
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();
}
P-86288
pekfos
» 2013-06-26 21:18:56
cin to nie plik i nie zwiększasz nigdzie zmiennej i (w Wczytajplik()).
P-86289
« 1 » 2
  Strona 1 z 2 Następna strona