Problem z baza danych książek

0

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

0

pewnie gdzieś przekraczasz zakres tablicy chyba ?
for(int i=0;i<n;++i) <- na pewno chcesz tak ? :
http://pytamy.pl/title,czym-wj-zyku-c-r-ni-si-i-od-i,pytanie.html?smclgnzlticaid=6d827

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