Klasa z listą oraz wczytywanie do pliku - Problem

0

Czy ktoś mogłby pomoc mam problem z ponizszym kodem nie wiem czemu nie zapisuje do pliku itd .
Program ma dopisywac ksiazki do listy oraz zapisywac do pliku txt.

 //
//  main.cpp
//  iBiblioteka2
//
//  Created by Bogdan Budnik on 11-05-15.
//  Copyright 2011 __MyCompanyName__. All rights reserved.
//

#include <iostream>
#include <stdlib.h>
#include <string>
#include <fstream>
#include <vector>
#include <algorithm>
#include <list>
#include <cstdio>

using namespace std;
//////////////////////////////////////////////////////////////////////////////////////////////////////



class Ksiazka
{
private:
    string autor; //autor kiazki
    string tytul;  //tytul ksiazki
    int numer;  //numer katalogowy
    string data;   //data wyporzyczenia ()
    int stan; //0 - dostepna, 1 - wypozyczona
public:
    Ksiazka () {}
    Ksiazka (string a, string t, int n, string d, int s = 0);
    string OdczytAutor ();
    string OdczytTytul ();
    int OdczytNumer ();
    string OdczytData ();
    int OdczytStan ();
    void Zmiana_stanu ();
    friend int operator== (Ksiazka a, Ksiazka b);
    friend int operator< (Ksiazka a, Ksiazka b);
    void Wczytaj (istream& we, bool r = false);
    void Wypisz (ostream &wy, bool r = false);
    friend istream& operator>> (istream& we, Ksiazka &k);
    friend ostream& operator<< (ostream& wy, Ksiazka k);
    
};
//////////////////////////////////////////////////////////////////////////////////////////////////////
class Ksiazki
{
private:
    vector <Ksiazka> baza;
    vector <Ksiazka>::iterator i;
public:
    Ksiazki ();
    void Wypisz ();
    void Dodaj (Ksiazka a);
    void Usun (Ksiazka a);
    void Edytuj (int numer);
    void Zmien (int numer);        //zmiana stanu
    Ksiazka Szukaj (int numer);
    void Szukaj (string autor, vector<Ksiazka> &temp);
    ~Ksiazki ();
};
//////////////////////////////////////////////////////////////////////////////////////////////////////
using namespace std;

Ksiazka::Ksiazka (string a, string t, int n, string d, int s)
{
    autor = a;
    tytul = t;
    numer = n;
    data = d;
    stan = s;
}

string Ksiazka::OdczytAutor ()
{
    return autor;
}

string Ksiazka::OdczytTytul ()
{
    return tytul;
}

int Ksiazka::OdczytNumer ()
{
    return numer;
}

string Ksiazka::OdczytData ()
{
    return data;
}

int Ksiazka::OdczytStan ()
{
    return stan;
}

void Ksiazka::Zmiana_stanu ()
{
    if (stan == 1) stan = 0;
    else stan = 1;
}

void Ksiazka::Wczytaj (istream &we, bool r)
{
    autor = "";
    tytul = "";
    numer = 0;
    data = "";
    stan = 0;
    char temp [601];
    if (r) cout << "Podaj imie i nazwisko autora:\t";
   we.getline (temp, 300);
     autor = temp;    
     
    if (r) cout << "Podaj tytul ksiazki:\t";
    we.getline (temp, 300);
    
    tytul = temp;
    if (r) cout << "Podaj numer katalogowy:\t";
    we >> numer;
    we.ignore ();
    if (r) cout << "Podaj date wprowadzenia:\t";
    we >> data;
    if (r) stan = 0;
    else 
    {
        we >> stan;
        we.ignore ();
    }
}

void Ksiazka::Wypisz (ostream &wy, bool r)
{
    if (r) cout << "Imie i nazwisko autora:\t"; 
    wy << autor << endl;
    if (r) cout << "Tytul ksiazki:\t";
    wy << tytul << endl;
    if (r) cout << "Numer katalogowy:\t";
    wy << numer << endl;
    if (r) cout << "Data wprowadzenia:\t";
    wy << data << endl;
    if (r) 
    {
        if (stan == 0) cout << "Ksiazka dostepna\n";
        else cout<< "Ksiazka wypozyczona\n";
    }
    else wy << stan << endl;
}

istream& operator>> (istream& we, Ksiazka &k)
{
    k.Wczytaj (we, true);
    return we;
}

ostream& operator<< (ostream& wy, Ksiazka k)
{
    k.Wypisz (wy, true);
    return wy;
}

int operator== (Ksiazka a, Ksiazka b)
{
    if (a.numer != 0 && b.numer != 0)
    {
        if (a.numer == b.numer) return 1;
    }
    else
    {
        if (a.autor == b.autor) return 1;
    }
    return 0;
}

int operator< (Ksiazka a, Ksiazka b)
{
    if (a.numer < b.numer) return 1;
    return 0;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////
using namespace std;

Ksiazki::Ksiazki ()
{
    Ksiazka a;
    ifstream plik ("/Users/bogdanbudnik/Desktop/Dane/iBiblioteka2/iBiblioteka2/ksiazki.txt");
    while (!plik.eof ())
    {
        a.Wczytaj (plik);
        if (a.OdczytNumer () != 0) baza.push_back (a);
    }
    plik.close ();
}

void Ksiazki::Wypisz ()
{
    for (i = baza.begin () ; i < baza.end () ; i++)
        cout << *i << endl;
}

void Ksiazki::Dodaj (Ksiazka a)
{
    baza.push_back (a);
    cout << "Ksiazka wprowadzona\n";
}

void Ksiazki::Zmien (int numer)
{
    Ksiazka a ("", "", numer, "");
    i = find (baza.begin (), baza.end (), a);
    if (i != baza.end ()) i -> Zmiana_stanu ();
}

void Ksiazki::Usun (Ksiazka a)
{
    i = find (baza.begin (), baza.end (), a);
    if (i != baza.end ()) 
    {
        baza.erase (i);
        cout << "Ksiazka usunieta z bazy!\n";
    }    
    else cout << "Nie ma w bazie ksiazki o takich danych!\n";
}

void Ksiazki::Edytuj (int numer)
{
    Ksiazka t ("", "", numer, "");
    i = find (baza.begin (), baza.end (), t);
    if (i != baza.end ()) 
    {
        cin >> *i;
        cout << "Ksiazka zmodyfikowany!\n";
    }    
    else cout << "Nie ma w bazie ksiazki o takich danych!\n";
}

Ksiazka Ksiazki::Szukaj (int numer)
{
    Ksiazka t ("", "", numer, "");
    i = find (baza.begin (), baza.end (), t);
    if (i != baza.end ()) 
    {
        return *i;
    }    
    else 
    {
        cout << "Nie ma w bazie ksiazki o takich danych!\n";
        Ksiazka z ("", "", 0, "");
        return z;
    }    
}

void Ksiazki::Szukaj (string autor, vector<Ksiazka> &temp)
{
    Ksiazka t (autor, "", 0, "");
    temp.clear ();
    i = find (baza.begin (), baza.end (), t);
    while (i != baza.end ()) 
    {
        temp.push_back (*i);
        i = find (i + 1, baza.end (), t);
    }    
}

Ksiazki::~Ksiazki ()
{
    ofstream plik ("/Users/bogdanbudnik/Desktop/Dane/iBiblioteka2/iBiblioteka2/ksiazki.txt");
    for (i = baza.begin (); i < baza.end () ; i++)
    {
        i->Wypisz (plik);
    }
    plik.close ();
}

 
//////////////////////////////////////////////////////////////////////////////////////////////////////
int main (int argc, const char * argv[]) {
   int menu;
    do{
     cout<<"##########################################################"<<endl;
     cout<<"#############            MENU          ###################"<<endl;
     cout<<"##########################################################"<<endl;
     cout<<"##########  AUTOR: BOGDAN BUDNIKK WSKSIM  ################"<<endl;
     cout<<"##########################################################"<<endl<<endl<<endl;
    
    cout<<"##########################################################"<<endl;
    cout<<"WPROWADZ JEDNA Z PODANYCH OPCJI:"<<endl;
    cout<<"##########################################################"<<endl;

    
    cout<<"1 -DODAJ KSIAZKE DO BAZY"<<endl;
    cout<<"2 -Pokaz liste"<<endl;
    cout<<"3 -EDYTUJ"<<endl;
    cout<<"4 -USUN"<<endl;
    cout<<"5 -SZUKAJ W BAZIE PO NUMERZE"<<endl;
    cout<<"5 -SZUKAJ W BAZIE PO AUTORZE"<<endl;
    cout<<"##########################################################"<<endl<<endl<<endl;
    
   
    Ksiazka a;
    Ksiazki ksiaze;
    cin>>menu;
    switch(menu){
        case 1:
            cin>> a;
            cin.ignore ();
            ksiaze.Dodaj(a);
   
            break;
        case 2:
            ksiaze.Wypisz();
            break;
        default: break;
    }
    }while (menu!=0);

return 0;}
0

Może dlatego, że nie masz tego nigdzie w mainie wywołanego?

0

ifstream plik ("/Users/bogdanbudnik/Desktop/Dane/iBiblioteka2/iBiblioteka2/ksiazki.txt");

Rzuciło mi się w/w. Popraw / na \

0

U*sunięcie linku nie pomzga

0

Jakie usunięcie linku?

0

tzn. usunolem sciezke do pliku i zostawilem --- ifstream plik ("ksiazki.txt");
Problem polega na tym ze jak odpale to wyswietla wprowadz imie i nazwisko i zaraz wyswietla wprowadz tytol bez miejsca na wpisanie imeenia i nazwiska

0

po:
cin>>menu;
dodaj:
cin.ignore();

Mam jeszcze problem z tym ze wpisuje na liste a nie widac tego w pliku. Czy to wina kompilatora bo zauwazylem ze na poczatku mi zapisywalo a po zmodyfikowaniu pliku tekstowego juz nie dziala.

0

cin.ignore();
dziala z tym
dzieki
jeszcze tylko problem wczytywania pliku...

0

Jest problem jeszcze z zapisem i odczytem z pliku txt

//
//  main.cpp
//  iBiblioteka2
//
//  Created by Bogdan Budnik on 11-05-15.
//  Copyright 2011 __MyCompanyName__. All rights reserved.
//

#include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>
#include <vector>
#include <algorithm>
#include <list>
#include <cstdio>

using namespace std;
//////////////////////////////////////////////////////////////////////////////////////////////////////



class Ksiazka
{
private:
    string autor; //autor kiazki
    string tytul;  //tytul ksiazki
    int numer;  //numer katalogowy
    string data;   //data wyporzyczenia ()
    int stan; //0 - dostepna, 1 - wypozyczona
public:
    Ksiazka (){}

    Ksiazka (string a, string t, int n, string d, int s = 0);
    string OdczytAutor ();
    string OdczytTytul ();
    int OdczytNumer ();
    string OdczytData ();
    int OdczytStan ();
    void Zmiana_stanu ();
    friend int operator== (Ksiazka a, Ksiazka b);
    friend int operator< (Ksiazka a, Ksiazka b);
    void Wczytaj (istream& we, bool r = false);
    void Wypisz (ostream &wy, bool r = false);
    friend istream& operator>> (istream& we, Ksiazka &k);
    friend ostream& operator<< (ostream& wy, Ksiazka k);
	
};
//////////////////////////////////////////////////////////////////////////////////////////////////////
class Ksiazki
{
private:
    vector <Ksiazka> baza;
    vector <Ksiazka>::iterator i;
    
public:
    Ksiazki ();
    void Wypisz ();
    void Dodaj (Ksiazka a);
    void Usun (Ksiazka a);
    void Edytuj (int numer);
    void Zmien (int numer);
    void Wczytaj (Ksiazka a);//zmiana stanu
    //int  Pisz (int i);
    Ksiazka Szukaj (int numer);
    ~Ksiazki();
	
};
//////////////////////////////////////////////////////////////////////////////////////////////////////


Ksiazka::Ksiazka (string a, string t, int n, string d, int s)
{
    autor = a;
    tytul = t;
    numer = n;
    data = d;
    stan = s;
}

string Ksiazka::OdczytAutor ()
{
    return autor;
}

string Ksiazka::OdczytTytul ()
{
    return tytul;
}

int Ksiazka::OdczytNumer ()
{
    return numer;
}

string Ksiazka::OdczytData ()
{
    return data;
}

int Ksiazka::OdczytStan ()
{
    return stan;
}

void Ksiazka::Zmiana_stanu ()
{
    if (stan == 1) stan = 0;
    else stan = 1;
}

void Ksiazka::Wczytaj (istream &we, bool r)
{
    autor = "";
    tytul = "";
    numer = 0;
    data = "";
    stan = 0;
    char temp [601];
    char tmp[30];
 
    
	if (r) cout << "Podaj imie i nazwisko autora:\t";

	we.getline (tmp, 30);
	autor = tmp;    
   
      
    
    if (r) cout << "Podaj tytul ksiazki:\t";
    we.getline (temp, 300);
     
    
    tytul = temp;
    if (r) cout << "Podaj numer katalogowy:\t";
    we >> numer;
    we.ignore ();
    if (r) cout << "Podaj date wprowadzenia:\t";
    we >> data;
    if (r) stan = 0;
    else 
    {
        we >> stan;
        we.ignore ();
    }
}

void Ksiazka::Wypisz (ostream &wy, bool r)
{
    if (r) cout << "Imie i nazwisko autora:\t"; 
    wy << autor << endl;
    if (r) cout << "Tytul ksiazki:\t";
    wy << tytul << endl;
    if (r) cout << "Numer katalogowy:\t";
    wy << numer << endl;
    if (r) cout << "Data wprowadzenia:\t";
    wy << data << endl;
    if (r) 
    {
        if (stan == 0) cout << "Ksiazka dostepna\n";
        else cout<< "Ksiazka wypozyczona\n";
    }
    else wy << stan << endl;
}

istream& operator>> (istream& we, Ksiazka &k)
{
    k.Wczytaj (we, true);
    return we;
}

ostream& operator<< (ostream& wy, Ksiazka k)
{
    k.Wypisz (wy, true);
    return wy;
}

int operator== (Ksiazka a, Ksiazka b)
{
    if (a.numer != 0 && b.numer != 0)
    {
        if (a.numer == b.numer) return 1;
    }
    else
    {
        if (a.autor == b.autor) return 1;
    }
    return 0;
}

int operator< (Ksiazka a, Ksiazka b)
{
    if (a.numer < b.numer) return 1;
    return 0;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////


Ksiazki::Ksiazki ()
{
    Ksiazka a;
    string str;
   

    ifstream plik ;
     plik.open("ksiazki.txt");
    if (plik.is_open())
    {
        while ( plik.good() )
        {
a.Wczytaj(plik,false);           
            if (a.OdczytNumer () != 0) baza.push_back (a);
        }
        plik.close();
    }
}

void Ksiazki::Wypisz ()

{
    for (i = baza.begin () ; i < baza.end () ; i++)
        cout << *i << endl;
}

void Ksiazki::Dodaj (Ksiazka a)
{
    baza.push_back (a);
    cout << "Ksiazka wprowadzona\n";
}

void Ksiazki::Zmien (int numer)
{
    Ksiazka a ("", "", numer, "");
    i = find (baza.begin (), baza.end (), a);
    if (i != baza.end ()) i -> Zmiana_stanu ();
}

void Ksiazki::Usun (Ksiazka a)
{
    i = find (baza.begin (), baza.end (), a);
    if (i != baza.end ()) 
    {
        baza.erase (i);
        cout << "Ksiazka usunieta z bazy!\n";
    }    
    else cout << "Nie ma w bazie ksiazki o takich danych!\n";
}

void Ksiazki::Edytuj (int numer)
{
    Ksiazka t ("", "", numer, "");
    i = find (baza.begin (), baza.end (), t);
    if (i != baza.end ()) 
    {
        cin >> *i;
        cout << "Ksiazka zmodyfikowany!\n";
    }    
    else cout << "Nie ma w bazie ksiazki o takich danych!\n";
}

Ksiazka Ksiazki::Szukaj (int numer)
{
    Ksiazka t ("", "", numer, "");
    i = find (baza.begin (), baza.end (), t);
    if (i != baza.end ()) 
    {
        return *i;
    }    
    else 
    {
        cout << "Nie ma w bazie ksiazki o takich danych!\n";
        Ksiazka z ("", "", 0, "");
        return z;
    }    
}
void Ksiazki::Wczytaj (Ksiazka a)
{
    ofstream plik;
    plik.open("ksiazki.txt");
    if (plik.is_open())
    {
       
    a.Wypisz(plik,false);
        plik.close();
        
    }
        
}


Ksiazki::~Ksiazki ()
{
    ofstream plik ("ksiazki.txt");
    for (i = baza.begin (); i < baza.end () ; i++)
    {
        i->Wypisz (plik);
    }
    plik.close ();
}

//////////////////////////////////////////////////////////////////////////////////////////////////////
int main (int argc, const char * argv[]) {
	int menu;
    do{
		cout<<"##########################################################"<<endl;
		cout<<"#############            MENU          ###################"<<endl;
		cout<<"##########################################################"<<endl;
		cout<<"##########  AUTOR: BOGDAN BUDNIKK WSKSIM  ################"<<endl;
		cout<<"##########################################################"<<endl<<endl<<endl;
		
		cout<<"##########################################################"<<endl;
		cout<<"WPROWADZ JEDNA Z PODANYCH OPCJI:"<<endl;
		cout<<"##########################################################"<<endl;
		
		
		cout<<"1 -DODAJ KSIAZKE DO BAZY"<<endl;
		cout<<"2 -Pokaz liste"<<endl;
		cout<<"3 -EDYTUJ"<<endl;
		cout<<"4 -USUN"<<endl;
		cout<<"5 -SZUKAJ W BAZIE PO NUMERZE"<<endl;
		cout<<"6 -Wypozycz ksiazke lub przyjmnij spowrotem"<<endl;
		cout<<"##########################################################"<<endl<<endl<<endl;
		
		
		Ksiazka a;
		Ksiazki ksiaze;
    
       
		cin>>menu;
        cin.ignore();
        
		switch(menu){
			case 1:
				cin>> a;
				cin.ignore ();
				ksiaze.Dodaj(a);
				
				break;
			case 2:
               
				ksiaze.Wypisz();
				break;
			case 3:
				int c;
				
				cout << "Wprowadz numer katalogowy ksiazki\t";
				cin>> c;
                cout<<endl;
				cin.ignore();
				ksiaze.Edytuj(c);
				break;
			case 4:
				cin>> a;
				cin.ignore ();
				ksiaze.Usun(a);
				break;
			case 5: 
                int p;
                cout << "Wprowadz numer katalogowy ksiazki";
                cin>>p;
                cin.ignore();
                a=ksiaze.Szukaj(p);
               if (a.OdczytAutor () != "") cout << a;
                break;
                
			case 6:
                int b;
                cout << "Wprowadz numer katalogowy ksiazki";
				cin>> b;
				cin.ignore ();
				ksiaze.Zmien(b);
                ksiaze.Wypisz();
				break;
				
			default: break;
		
		}
        
    }while (menu!=0);
	
	return 0;}

 

1 użytkowników online, w tym zalogowanych: 0, gości: 1