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

Zapisywanie binarne na zapisywanie strumieniem

Ostatnio zmodyfikowano 2014-06-19 10:31
Autor Wiadomość
Byron
Temat założony przez niniejszego użytkownika
Zapisywanie binarne na zapisywanie strumieniem
» 2014-06-14 00:06:34
Witam, dostałem kod lecz mam problem ze wspomnianymw temacie zapisywaniem. W pliku jest zapisywanie binarne do plików .dat a potrzebuję zapisywania strumieniem do plików .txt. Niestety, sam tego nie potrafię zrobić.
C/C++
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

class Film {
private:
    int identyfikator_filmu;
    char gatunek[ 10 ];
   
public:
   
    Film() { }
    Film( int id, char * gatunek )
    {
        identyfikator_filmu = id;
        strcpy( this->gatunek, gatunek );
    }
   
    void wypisz_film()
    {
        cout << "ID: " << identyfikator_filmu << ", Gatuenk filmu: " << gatunek;
    }
   
    int daj_id() { return identyfikator_filmu; }
   
    int porownaj_typ( char * gatunek ) //funkcja na razie nie uzywana
    {
        if( strcmp( this->gatunek, gatunek ) )
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
};

class Klient {
private:
    int identyfikator_klienta;
    char nazwisko[ 50 ];
    char imie[ 50 ];
    int wiek;
   
public:
    Klient() { }
    Klient( int id_kl, int wiek_klienta, char * nazwisko, char * imie )
    {
        identyfikator_klienta = id_kl;
        wiek = wiek_klienta;
        strcpy( this->nazwisko, nazwisko );
        strcpy( this->imie, imie );
    }
   
    void wypisz_klienta()
    {
        cout << "ID: " << identyfikator_klienta << ", Nazwisko: " << nazwisko << ", Imie: " << imie << ", " << wiek << " lat";
    }
   
    int daj_id_kl() { return identyfikator_klienta; }
    int daj_wiek_kl() { return wiek; }
   
};

class Wypozyczenie {
private:
    int id_wypozyczenie, id_filmu;
   
public:
    Wypozyczenie() { }
    Wypozyczenie( int id_wypozyczenie, int id_filmu )
    {
        this->id_wypozyczenie = id_wypozyczenie;
        this->id_filmu = id_filmu;
    }
   
    void wypisz_wypozyczenie()
    {
        cout << "ID klienta: " << id_wypozyczenie << ", ID filmu: " << id_filmu;
    }
    int daj_id_wypoz() { return id_wypozyczenie; }
    int daj_id_fl() { return id_filmu; }
   
   
};

int main() {
    int wybor_zadania;
    int f, klient, wypozycenie_filmu; //film,klient,wypo?yczenie;
    int id_filmu; //id_filmu(case 1,3)
    char gat_filmu[ 10 ]; //gatunek filmu (case 1)
    int id_klienta, wiek; // case 2
    char nazwisko[ 50 ]; //case 2
    char imie[ 50 ]; // case 2
    int liczba_filmow, liczba_klientow, liczba_wypozyczen; //case 4,5,6
    char koniec = 'n';
    Film * fl;
    fl = new Film[ 100 ];
   
    Klient * kl;
    kl = new Klient[ 100 ];
   
    Wypozyczenie * wypozycz;
    wypozycz = new Wypozyczenie[ 100 ];
   
    ifstream zplikFilm( "film.dat", ios_base::binary );
    if( zplikFilm.is_open() )
    {
        liczba_filmow = 0;
        while( zplikFilm.read(( char * ) & fl[ liczba_filmow ], sizeof( fl[ liczba_filmow ] ) ) ) {
            liczba_filmow++;
        }
    }
    zplikFilm.close();
   
   
    ifstream zplikKlient( "klient.dat", ios_base::binary );
    if( zplikKlient.is_open() )
    {
        liczba_klientow = 0;
        while( zplikKlient.read(( char * ) & kl[ liczba_klientow ], sizeof( kl[ liczba_klientow ] ) ) ) {
            liczba_klientow++;
        }
    }
    zplikKlient.close();
   
   
    ifstream zplikWypozyczenie( "wypozyczenie.dat", ios_base::binary );
    if( zplikWypozyczenie.is_open() )
    {
        liczba_wypozyczen = 0;
        while( zplikWypozyczenie.read(( char * ) & wypozycz[ liczba_wypozyczen ], sizeof( wypozycz[ liczba_wypozyczen ] ) ) ) {
            liczba_wypozyczen++;
        }
    }
    zplikWypozyczenie.close();
   
    do
    {
        cout << "1.Dodaj nowy film" << endl;
        cout << "2.Dodaj nowego klienta" << endl; //trzeba dodac funkcje: usun klienta o podanym ID
        cout << "3.Wypozycz film klientowi" << endl;
        cout << "4.Wypisz wszystkie filmy wedlug gatunkow" << endl;
        cout << "5.Wypisz wszystkich klientow" << endl;
        cout << "6.Wypisz wszystkie wypozyczenia" << endl;
        cout << "7.Znajdz najpopularniejszy gatunek filmu w danym przedziale wiekowym" << endl;
        cout << "8.Wyjdz z programu" << endl;
       
        cin >> wybor_zadania;
        system( "cls" ); //funkcja czyszczaca okienko konsoli, biblioteka cstdlib
        switch( wybor_zadania )
        {
        case 1:
            {
                cout << "Wybrales opcje dodania nowego filmu.\nIle filmow chcesz dodac?" << endl;
                cin >> f;
                for( int i = 0; i < f; i++ )
                {
                   
                    cout << "Podaj identyfikator filmu: ";
                    cin >> id_filmu;
                    cout << "Podaj gatunek filmu: ";
                    cin >> gat_filmu;
                    cout << endl;
                    Film tmpp( id_filmu, gat_filmu );
                    fl[ i ] = tmpp; //przypisanie pobranych danych do zmiennej
                   
                }
                for( int i = 0; i < f; i++ )
                {
                    fl[ i ].wypisz_film(); //wypisywanie filmu
                }
                getchar();
                getchar();
               
                ofstream doplikFilm( "film.dat", ios_base::app | ios_base::binary );
               
                for( int i = 0; i < f; i++ )
                {
                    doplikFilm.write(( char * ) & fl[ i ], sizeof fl[ i ] ); //zapisywanie binarne do pliku
                   
                }
                doplikFilm.close();
               
                ifstream zplikFilm( "film.dat", ios_base::binary );
                if( zplikFilm.is_open() )
                {
                    liczba_filmow = 0;
                    while( zplikFilm.read(( char * ) & fl[ liczba_filmow ], sizeof( fl[ liczba_filmow ] ) ) ) {
                        liczba_filmow++; //sprawdzenie ile jest filmow w pliku bazy danych poprzez wczytywanie
                    }
                }
                zplikFilm.close();
                break;
            }
           
           
        case 2:
            {
                cout << "Wybrales opcje dodania klienta.\nIle klientow chcesz dodac?" << endl;
                cin >> klient;
                for( int i = 0; i < klient; i++ )
                {
                   
                    cout << "Podaj identyfikator klienta: ";
                    cin >> id_klienta;
                    cout << "Podaj imie kilenta: ";
                    cin >> imie;
                    cout << "Podaj nazwisko klienta: "; //pobieranie danych
                    cin >> nazwisko;
                    cout << "Podaj wiek klienta: ";
                    cin >> wiek;
                    cout << endl;
                    Klient tmpw( id_klienta, wiek, nazwisko, imie );
                    kl[ i ] = tmpw;
                   
                }
               
                for( int i = 0; i < klient; i++ )
                {
                    kl[ i ].wypisz_klienta(); //wypisywanie danych
                }
                getchar();
                getchar();
               
               
                ofstream doplikuKlient( "klient.dat", ios_base::app | ios_base::binary );
                for( int i = 0; i < klient; i++ )
                {
                    doplikuKlient.write(( char * ) & kl[ i ], sizeof kl[ liczba_klientow ] ); //zapisanie binarne do pliku
                   
                }
                doplikuKlient.close();
               
                ifstream zplikKlient( "klient.dat", ios_base::binary );
                if( zplikKlient.is_open() )
                {
                    liczba_klientow = 0;
                    while( zplikKlient.read(( char * ) & kl[ liczba_klientow ], sizeof( kl[ liczba_klientow ] ) ) ) {
                        liczba_klientow++; //sprawdzenie liczby klientow przez wczytanie
                    }
                }
                zplikKlient.close();
                break;
               
            }
        case 3:
            {
                cout << "Wybrales opcje dodania wypozyczenia.\nIle wypozyczen chcesz pokazac? " << endl;
                cin >> wypozycenie_filmu;
                for( int i = 0; i < wypozycenie_filmu; i++ )
                {
                    cout << "Podaj ID klienta: ";
                    cin >> id_klienta;
                    cout << "Podaj ID filmu: ";
                    cin >> id_filmu;
                    cout << endl;
                    Wypozyczenie tmpwp( id_klienta, id_filmu );
                    wypozycz[ i ] = tmpwp;
                   
                }
                for( int i = 0; i < wypozycenie_filmu; i++ )
                {
                    wypozycz[ i ].wypisz_wypozyczenie();
                }
                getchar();
                getchar();
               
               
                ofstream doplikWypozyczenie( "wypozyczenie.dat", ios_base::app | ios_base::binary );
                for( int i = 0; i < wypozycenie_filmu; i++ )
                {
                    doplikWypozyczenie.write(( char * ) & wypozycz[ i ], sizeof kl[ i ] ); //zapisanie binarne do pliku
                }
                doplikWypozyczenie.close();
               
                ifstream zplikWypozyczenie( "wypozyczenie.dat", ios_base::binary );
                if( zplikWypozyczenie.is_open() )
                {
                    liczba_wypozyczen = 0;
                    while( zplikWypozyczenie.read(( char * ) & wypozycz[ liczba_wypozyczen ], sizeof( wypozycz[ liczba_wypozyczen ] ) ) ) {
                       
                        liczba_wypozyczen++; //sprawdzenie liczby wypozyczen przez wczytywanie
                    }
                }
                zplikWypozyczenie.close();
                break;
               
            }
        case 4:
            {
                for( int i = 0; i < liczba_filmow; i++ ) {
                    fl[ i ].wypisz_film();
                    cout << endl;
                }
                getchar();
                getchar();
                break;
            }
        case 5:
            {
                for( int i = 0; i < liczba_klientow; i++ )
                {
                    kl[ i ].wypisz_klienta();
                    cout << endl;
                }
                getchar();
                getchar();
                break;
            }
           
        case 6:
            {
                for( int i = 0; i < liczba_wypozyczen; i++ )
                {
                    wypozycz[ i ].wypisz_wypozyczenie();
                    cout << endl;
                }
                getchar();
                getchar();
                break;
            }
        case 7:
            cout << "Funkcja na razie nie dostepna.\n";
            break;
           
        case 8:
            {
                koniec = 't';
                break;
            }
            default: cout << "Bledne polecenie."; break;
        }
        system( "cls" );
    } while( koniec != 't' );
   
    return 0;
}
Z góry dziekuję za pomoc.
P-112047
pekfos
» 2014-06-19 10:31:36
Dopisz do klas metody, przyjmujące referencję na strumień i zapisujące do niego składowe klasy.
P-112288
« 1 »
  Strona 1 z 1