Witam.
Jestem w trakcie robienia bazy danych z książkami.
Znalazłem fajny kod w internecie, przerobiłem go, ale klapa.
Ktoś może mi pomóc co jest źle?
#include <iostream>
#include <string.h>
#include <fstream>
using namespace std;
struct ksiazka
{
int numer; /// numer w bazie
string tytul; //tytul
string autor; //autor
int rok; /// rok produkcji
float cena;
};
void dodaj_do_bazy(char *in,ksiazka *s,int n)
{
ofstream plik;
plik.open(in);
for(int i=0;i<n;++i)
{
s[i].numer = i+1;
plik<<s[i].numer<<endl;
cout<<"Podaj tytul :\n";
cin>>s[i].tytul;
plik<<s[i].tytul<<endl;
cout<<"Podaj autora :\n";
cin>>s[i].autor;
plik<<s[i].autor<<endl;
cout<<"Podaj rok wydania :\n";
cin>>s[i].rok;
plik<<s[i].rok<<endl;
cout<<"Podaj cene ksiazki :\n";
cin>>s[i].cena;
plik<<s[i].cena<<endl;
plik<<"\n\n";
}
plik.close();
}
///funkcja liczaca rozmiar tablicy z ksiazkami, zwroci liczbe do ktorej dodamy nowe pozycje
int rozmiar(char *in)
{
string autor , tytul;
int rok , numer;
double cena;
ifstream plik;
plik.open(in);
int rozm = 0;
while(!plik.eof())
{
plik>>numer;
plik>>tytul;
plik>>autor;
plik>>rok;
plik>>cena;
rozm += 1;
}
plik.close();
return rozm;
}
//wczytanie to tablicy
void zpliku(char *in,ksiazka *s,int n)
{
ifstream plik;
plik.open(in);
for(int i=0;i<n;++i)
{
plik>>s[i].numer;
plik>>s[i].tytul;
plik>>s[i].autor;
plik>>s[i].rok;
plik>>s[i].cena;
}
}
/// funkja wypisujaca wszystkie ksiazki
void wypisz(ksiazka *s,int n)
{
for(int i=0;i<n;++i)
{
cout<<"Nr."<<s[i].numer<<endl;
cout<<"Tytul : "<<s[i].tytul<<endl;
cout<<"Autor : "<<s[i].autor<<endl;
cout<<"Rok wydania : "<<s[i].rok<<endl;
cout<<"Cena : "<<s[i].cena<<endl;
cout<<"- - - - - - - - - - - - -\n";
}
}
/// funkcja sortuje po nazwie
void sort2(ksiazka *s,int n)
{
ksiazka tmp;
for(int i=0;i<n;++i)
{
for(int j=0;j<n-1;++j)
{
if(s[j].tytul > s[j+1].tytul)
{
tmp = s[j+1];
s[j+1] = s[j];
s[j] = tmp;
}
if(s[j].tytul == s[j+1].tytul)
{
if(s[j].autor > s[j+1].autor)
{
tmp = s[j+1];
s[j+1] = s[j];
s[j] = tmp;
}
}
}
}
}
/// funkcja usuwajaca ksiazke bazy
void usun(ksiazka *s,int n,int ktory)
{
int tmp;
for(int i=0;i<n;++i)
{
if(i+1 == ktory)
{
tmp = i;
}
}
for(int i=tmp;i<n;++i)
{
//s[i] = s[i+1];
s[i].tytul = s[i+1].tytul;
s[i].autor = s[i+1].autor;
s[i].rok = s[i+1].rok;
s[i].cena = s[i+1].cena;
}
}
int main(int argc,char **argv)
{
int znak;
strcpy(argv[1],"baza.txt");
//argv[1] = "baza.txt";
do
{
cout<<" Utworz baze danych (plik) wcisnij - 1\n";
cout<<" Dopisanie nowej ksiazki wcisnij - 2\n";
cout<<" Wypisanie wszystkich ksiazek wcisnij - 3\n";
cout<<" Usuniecie ksiazki z bazy wcisnij - 4\n";
cout<<" Sortowanie ksiazek po nazwie wcisnij - 5\n";
cout<<" Wyjscie z programu wcisnij - 0\n";
cout<<"Co chcesz robic ??\n";
cin>>znak;
switch(znak)
{
case 1:
{
int n;
cout<<"Ile ksiazek zapisac w bazie ?\n";
cin>>n;
ksiazka *s = new ksiazka [n];
dodaj_do_bazy(argv[1],s,n);
delete [] s;
break;
}
case 2:
{
int ile;
cout<<"Ile ksiazek chcesz dopisac do bazy ?\n";
cin>>ile;
int roz = rozmiar(argv[1])+ile-1;
int rozm = rozmiar(argv[1])-1;
ksiazka *s = new ksiazka [roz];
zpliku(argv[1],s,rozm);
for(int i=rozm;i<roz;++i)
{
s[i].numer = i+1;
cout<<"Podaj Tytul :\n";
cin>>s[i].tytul;
cout<<"Podaj Autora :\n";
cin>>s[i].autor;
cout<<"Podaj rok wydania :\n";
cin>>s[i].rok;
cout<<"Podaj cene :\n";
cin>>s[i].cena;
}
ofstream plik;
plik.open(argv[1]);
for(int i=0;i<roz;++i)
{
plik<<s[i].numer<<endl;
plik<<s[i].tytul<<endl;
plik<<s[i].autor<<endl;
plik<<s[i].rok<<endl;
plik<<s[i].cena<<endl;
plik<<"\n\n";
}
plik.close();
delete [] s;
break;
}
case 3:
{
cout<<"ksiazki w bazie :\n\n";
int n = rozmiar(argv[1])-1;
ksiazka *s = new ksiazka [n];
zpliku(argv[1],s,n);
wypisz(s,n);
delete [] s;
break;
}
case 4:
{
int n = rozmiar(argv[1])-1;
ksiazka *s = new ksiazka [n];
zpliku(argv[1],s,n);
int ktory;
cout<<"Ktora ksiazke usunac z bazy ?\n";
cin>>ktory;
usun(s,n,ktory);
ofstream plik;
plik.open(argv[1]);
for(int i=0;i<n-1;++i)
{
plik<<s[i].numer<<endl;
plik<<s[i].tytul<<endl;
plik<<s[i].autor<<endl;
plik<<s[i].rok<<endl;
plik<<s[i].cena<<endl;
plik<<"\n\n";
}
plik.close();
delete [] s;
break;
}
case 5:
{
cout<<"ksiazki z bazy posortowane po nazwie \n";
int n = rozmiar(argv[1])-1;
ksiazka *s = new ksiazka [n];
zpliku(argv[1],s,n);
sort2(s,n);
wypisz(s,n);
delete [] s;
break;
}
case 0:
{
cout<<"Koniec \n";
//break;
}
}
}while(znak != 0);
return 0;
}
Pod linuksem kompiluje się ale przy włączeniu mam
"Naruszenie ochrony pamięci"
w dev c++ pod windowsem się nie kompiluje i są błędy
cannot find -lmoldname
ld returned 1 exit status
Proszę o pomoc