Zaczełem pisać aplikację dla biblioteki, nie taką z prawdziwego zdarzenia, tylko taką do próby, i w czasie pisania napotkałem parę problemów.
O to mój program:
#include
#include
#include
#include
#include
using namespace std;
class zbiory
{
protected:
string tytul;
string autor;
string rokwydania;
string wydawnictwo;
fstream import1;
public:
zbiory(string t, string a, string r, string w )
{
tytul = t;
autor = a;
rokwydania = r;
wydawnictwo = w;
}
void opis_add()
{
ofstream import1;
import1.open("biblioteka/ksiazki.txt",ios::app | ios::out);
import1 <<"." <
import1 << tytul ;
import1 <
import1 << autor ;
import1 << endl;
import1 << rokwydania ;
import1 <
import1 << wydawnictwo ;
import1 <
import1.close();
}
void opis_del()
{
string str;
fstream import2;
fstream temp;
import2.open("biblioteka/ksiazki.txt",ios::in );
temp.open("biblioteka/tmp.txt", ios::out | ios::trunc);
if(import2.good() && temp.good())
{
do
{
import2 >> str;
if(str != tytul)
{
temp << str <
}
if(str != autor)
{
temp << str <
}
if(str != rokwydania)
{
temp << str <
}
if(str != wydawnictwo)
{
temp << str <
}
}
while(!import2.eof() );
temp.close();
import2.close();
}
}
void edytuj_opis()
{
}
void lista1()
{
}
void listawypozyczonych()
{
}
void lista_w_bibliotece()
{
}
void exportl()
{
}
~zbiory()
{
cout <<"Obiekt usuniety";
}
private:
void wypozyczone()
{
}
void zwrot()
{
}
};
class czytelnicy
{
};
string tyt, aut,wyd;
string rok;
void menu2_opis_add()
{
system("cls");
cout <<"Podaj tytul >>";
cin >>tyt;
cout <
cout <<"Podaj autora >>";
cin >>aut;
cout <
cout <<"Podaj rok wydania >>";
cin >>rok;
cout <<"Podaj wydawnictwo >>";
cin >>wyd;
zbiory *zbio = new zbiory(tyt,aut,rok,wyd);
zbio -> opis_add();
zbio -> ~zbiory();
}
void menu2_opis_del()
{
system("cls");
cout <<"Podaj tytul >>";
cin >>tyt;
cout <
cout <<"Podaj autora >>";
cin >>aut;
cout <
cout <<"Podaj rok wydania >>";
cin >>rok;
cout <<"Podaj wydawnictwo >>";
cin >>wyd;
zbiory *zbio = new zbiory(tyt,aut,rok,wyd);
zbio -> opis_del();
zbio -> ~zbiory();
}
int main()
{
menu:
system("cls");
cout <<"MENU"<
cout <<""<
cout <<"[1] Zbiory"<
cout <<"[2] Czytelnicy"<
cout <<"[3] Wyjscie" <
int a;
cout <<">>";
cin >>a;
switch(a)
{
case 1:
menu2:
system("cls");
cout <<"[1] + opis"<
cout <<"[2] - opis" <
cout <<"[3] edytuj opis" <
cout <<"[4] lista" <
cout <<"[5] lista wypozyczonych" <
cout <<"[6] lista w bibliotece" <
cout <<"[7] wypozyczenie"<
cout <<"[8] zwrot" <
cout <<"[9] export do pliku" <
cout <<"[10] import do pliku" <
cout <<"[11] powrot"<
cout <<""<
cout <<">>";
cin >>a;
switch(a)
{
case 1:
menu2_opis_add();
goto menu2;
break;
case 2:
menu2_opis_del();
goto menu2;
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
break;
case 8:
break;
case 9:
break;
case 10:
break;
case 11:
goto menu;
break;
default:
cout <<"Wybrales nieprawidlowa wartosc";
getch();
goto menu2;
break;
}
case 2:
menu3:
system("cls");
cout <<"[1] + opis"<
cout <<"[2] - opis"<
cout <<"[3] edytuj opis"<
cout <<"[4] lista"<
cout <<"[5] lista wypozyczonych"<
cout <<"[6] lista w bibliotece"<
cout <<"[7] export do pliku" <
cout <<"[8] import do pliku" <
cout <<"[9] powrot" <
cout <<""<
cout <<">>";
cin >> a;
switch(a)
{
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
break;
case 8:
break;
case 9:
goto menu;
break;
default:
cout <<"Wybrales nieprawidlowa wartosc"<
getch();
goto menu3;
break;
}
break;
case 3:
break;
default:
cout <<"Wybrales nieprawidlowa wartosc"<
getch();
goto menu;
break;
}
}
Mój problem ma miejsce w tym fragmencie:
void opis_del()
{
string str;
fstream import2;
fstream temp;
import2.open("biblioteka/ksiazki.txt",ios::in );
temp.open("biblioteka/tmp.txt", ios::out | ios::trunc);
if(import2.good() && temp.good())
{
do
{
import2 >> str;
if(str != tytul)
{
temp << str <
}
if(str != autor)
{
temp << str <
}
if(str != rokwydania)
{
temp << str <
}
if(str != wydawnictwo)
{
temp << str <
}
}
while(!import2.eof() );
temp.close();
import2.close();
}
}
Ten fragment kodu powinien w pliku tem przenieść tylko te elementu, które nie mają takiej samego tytułu, ani nazy autora itd, jednak nie działa poprawnie Oto przykładowa zawartość pliku ksiazki.txt:
.
Lalka
Boleslaw_Pusa
2013
Operon
.
Zbrodnia_i_kara
Oskar_Polok
2013
Operon
A o to wynik działania progranu w pliku temp.txt:
.
.
.
.
Lalka
Lalka
Lalka
Boleslaw_Prus
Boleslaw_Prus
Boleslaw_Prus
2013
2013
2013
Operon
Operon
Operon
.
.
.
.
Zbrodnia_i_kara
Zbrodnia_i_kara
Zbrodnia_i_kara
Zbrodnia_i_kara
Oskar_Polok
Oskar_Polok
Oskar_Polok
Oskar_Polok
2013
2013
2013
Operon
Operon
Operon
Operon
Operon
Operon
Proszę o propozycje modyfikacji tego kodu