Baza danych w C++ proszę o pomoc

0

Witam, mam za zadanie stworzyć baze danych z programami. Udało mi sie stworzyc w miare działający program. Nie działa mi tylko funkcja usuwania i dodawania rekordów i nie wiem jak to poprawić, dlatego proszę was o pomoc ;) Z góry dziękuje!

/**

	
	1.Zakładanie nowego pliku
    2.Dopisanie nowego programu
	3.Wypisanie wszystkich na ekran 
	4.Wyszukiwanie po cenie sprzedazy netto
	5.Usuwanie programu z bazy	
    6.Sortowanie po cenie sprzedazy netto
    7.Sortowanie po nazwie
    8.Tworzenie kopii bazy danych
					   **/
	
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

struct Program
{
	int numer;		   ///   numer w bazie
	string nazwa, rodzaj, wydawca;        /// nazwa, rodzaj i wydawca programu
	int rok, pakiety;                   ///   rok produkcji, ilosc pakietow
	double cena, cena2, vat;        /// cena zakupu netto, cena sprzedazy netto, procent vat
	
};


/// dodawanie programow do bazy danych wszelkie informacje znajduja sie w pliku *.txt

void dodaj_do_bazy(char *in,Program *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 nazwe programu :\n";
		cin>>s[i].nazwa;
		plik<<s[i].nazwa<<endl;
		
		cout<<"Podaj rodzaj :\n";
		cin>>s[i].rodzaj;
		plik<<s[i].rodzaj<<endl;
		
		cout<<"Podaj rok produkcji :\n";
		cin>>s[i].rok;
		plik<<s[i].rok<<endl;
		
		cout<<"Podaj cene zakupu netto :\n";
		cin>>s[i].cena;
		plik<<s[i].cena<<endl;
		
		cout<<"Podaj cene sprzedazy netto :\n";
		cin>>s[i].cena2;
		plik<<s[i].cena2<<endl;
		
		cout<<"Podaj procent podatku VAT :\n";
		cin>>s[i].vat;
		plik<<s[i].vat<<endl;
		
		cout<<"Podaj wydawce ;\n";
		cin>>s[i].wydawca;
		plik<<s[i].wydawca<<endl;
		
		cout<<"Podaj ilosc pakietow w magazynie :\n";
		cin>>s[i].pakiety;
		plik<<s[i].pakiety<<endl;
		
		plik<<"\n\n";
	}
	plik.close();
}


///funkcja liczaca rozmiar tablicy struktur (wyciaga z pliku juz zapisane tam programy) 
///do ktorej wpisujemy dane o programach

int rozmiar(char *in)
{
	string rodzaj, nazwa, wydawca;
	int rok , numer, pakiety;
	double cena, cena2, vat;
	
	
	ifstream plik;
	plik.open(in);
	int rozm = 0;
	
	while(!plik.eof())
	{
		plik>>numer;
		plik>>nazwa;
		plik>>rodzaj;
		plik>>rok;
		plik>>cena;
		plik>>cena2;
		plik>>vat;
		plik>>wydawca;
        plik>>pakiety;
       	
		rozm += 1;
	}
	
	plik.close();
	return rozm;
}

///funkcja wyciagajaca z pliku programy do tablicy struktur
void zpliku(char *in,Program *s,int n)
{
	ifstream plik;
	plik.open(in);
	
	for(int i=0;i<n;++i)
	{
		plik>>s[i].numer;
		plik>>s[i].nazwa;
		plik>>s[i].rodzaj;
		plik>>s[i].rok;
		plik>>s[i].cena;
		plik>>s[i].cena2;
		plik>>s[i].vat;
		plik>>s[1].wydawca;
		plik>>s[i].pakiety;
	}
}

/// funkja wypisujaca wszystkie programy na ekran

void wypisz(Program *s,int n)
{
	for(int i=0;i<n;++i)
	{
		cout<<"Nr."<<s[i].numer<<endl;
		cout<<"Nazwa :         "<<s[i].nazwa<<endl;
		cout<<"Rodzaj :         "<<s[i].rodzaj<<endl;
		cout<<"Rok wydania : "<<s[i].rok<<endl;
		cout<<"Cena zakupu netto :          "<<s[i].cena<<endl;
		cout<<"Cena sprzedazy netto :          "<<s[i].cena2<<endl;
		cout<<"Procent podatku VAT :          "<<s[i].vat<<endl;
		cout<<"Wydawca :          "<<s[i].wydawca<<endl;
		cout<<"Ilosc pakietow w magazynie :          "<<s[i].pakiety<<endl;
		cout<<"-  -  -  -  -  -  -  -  -  -  -  -  -\n";
	}
}


/// funkcja sortuje po cenie sprzedazy

void sort(Program *s,int n)
{
	Program tmp;
	for(int i=0;i<n;++i)
	{
		for(int j=0;j<n-1;++j)
		{
			if(s[j].cena2 > s[j+1].cena2)
			{
				tmp = s[j+1];
				s[j+1] = s[j];
				s[j] = tmp;
			}
		}
	}
}

	
/// funkcja sortuje po nazwie 

void sort2(Program *s,int n)
{
	Program tmp;
	for(int i=0;i<n;++i)
	{
		for(int j=0;j<n-1;++j)
		{
			if(s[j].nazwa > s[j+1].nazwa)
			{
				tmp = s[j+1];
				s[j+1] = s[j];
				s[j] = tmp;
			}
			if(s[j].nazwa == s[j+1].nazwa)
			{
				if(s[j].rodzaj > s[j+1].rodzaj)
				{
					tmp = s[j+1];
					s[j+1] = s[j];
					s[j] = tmp;
				}
			}
		}		
	}
}	
	
///funkcja wyszukuje po cenie sprzedazy programu, jesli jest taki program wypisuje jeden ktory znalazl lub od do jakiej ceny

void szukaj_po_cenie(Program *s,int n,double szukana_cena)
{
	int licznik = 0;
	
	for(int i=0;i<n;++i)
	{
		if(s[i].cena2 == szukana_cena)
		{
			cout<<"Nr."<<s[i].numer<<endl;
			cout<<"Nazwa :         "<<s[i].nazwa<<endl;
			cout<<"Rodzaj :         "<<s[i].rodzaj<<endl;
			cout<<"Rok produkcji : "<<s[i].rok<<endl;
			cout<<"Cena zakupu netto :          "<<s[i].cena<<endl;
			cout<<"Cena sprzedazy netto :          "<<s[i].cena2<<endl;
			cout<<"Procent podatku VAT :          "<<s[i].vat<<endl;
			cout<<"Wydawca :          "<<s[i].wydawca<<endl;
			cout<<"Ilosc pakietow w magazynie :          "<<s[i].pakiety<<endl;
			cout<<"-  -  -  -  -  -  -  -  -  -  -  -  -\n";
			
			licznik = licznik + 1;  //zmienna licznik sprawdza czy w bazie byl program
		}
	}
	if(licznik == 0)
	{
	
		double cena3,cena4;
		cout<<"W bazie nie znaleziono programu o podanej cenie \n\n";
		cout<<"Podaj przedzial cenowy jaki Cie interesuje \n";
		cout<<" Od :  ";
		cin>>cena3;
		cout<<" do :  ";
		cin>>cena4;
	
		Program tmp,tmp2;
		for(int i=0;i<n;++i)
		{
			if(cena3<s[i].cena2 && s[i].cena2<cena4) 
			{	
				cout<<"Nr."<<s[i].numer<<endl;
				cout<<"Nazwa :         "<<s[i].nazwa<<endl;
				cout<<"Rodzaj :         "<<s[i].rodzaj<<endl;
				cout<<"Rok produkcji : "<<s[i].rok<<endl;
				cout<<"Cena zakupu netto :          "<<s[i].cena<<endl;
		     	cout<<"Cena sprzedazy netto :          "<<s[i].cena2<<endl;
			    cout<<"Procent podatku VAT :          "<<s[i].vat<<endl;
		    	cout<<"Wydawca :          "<<s[i].wydawca<<endl;
		    	cout<<"Ilosc pakietow w magazynie :          "<<s[i].pakiety<<endl;
				cout<<"-  -  -  -  -  -  -  -  -  -  -  -  -\n";
				
			}
			
		}
		
		
	}
}

/// funkcja usuwajaca programu z bazy

void usun(Program *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].nazwa = s[i+1].nazwa;
		s[i].rodzaj = s[i+1].rodzaj;
		s[i].rok   = s[i+1].rok;
		s[i].cena  = s[i+1].cena;
		s[i].cena2 = s[i+1].cena2;
		s[i].vat = s[i+1].vat;
		s[i].wydawca = s[i+1].wydawca;
		s[i].pakiety = s[i+1].pakiety;
	}
}

/// funkcja tworzaca kopie bazy danych (pliku)
void kopia(Program *s,int n,char *out)
{
	ofstream plik;
	plik.open(out);
	
	for(int i =0;i<n;++i)
	{
		plik<<s[i].numer<<endl;
		plik<<s[i].nazwa<<endl;
		plik<<s[i].rodzaj<<endl;
		plik<<s[i].rok<<endl;
		plik<<s[i].cena<<endl;
		plik<<s[i].cena2<<endl;
		plik<<s[i].vat<<endl;
		plik<<s[1].wydawca<<endl;
		plik<<s[i].pakiety<<endl;
		plik<<".  .  .  .  .  .  \n";
	}
	
	plik.close();
}

/**------------------------- funkcja main --------------------------**/

int main(int argc,char **argv)
{

	cout<<"***************************************************\n";       		
	cout<<"*******by xxxxxxxxxxxxxxxxxxxxxxxx**********\n";
	cout<<"***************************************************\n";
	
	int znak;	
	
	///przykladowa nazwa bazy danych
	
	argv[1] = "baza.txt";
	
	do
	{
	cout<<"		Utworz baze danych (plik)			wcisnij - 1\n";	
	cout<<"		Dopisanie nowego programu/programow 		wcisnij - 2\n";
	cout<<"		Wypisanie wszystkich programow  		wcisnij - 3\n";	
	cout<<"		Wyszukanie programu po cenie sprzedazy      	wcisnij - 4\n";
	cout<<"		Usuniecie programu z bazy       		wcisnij - 5\n";
	cout<<"		Sortowanie programow po cenie sprzedazy         wcisnij - 6\n";
	cout<<"		Sortowanie programow po nazwie 	                wcisnij - 7\n";
	cout<<"		Tworzenie kopii bazy danych       		wcisnij - 8\n\n";
	
	
	cout<<"		Wyjscie z programu                   		wcisnij - 0\n";
	
	cout<<"Co chcesz zrobic ??\n";
	
	cin>>znak;
	
	
	switch(znak)
	{
		case 1:
		{
			int n;
			cout<<"Ile programow zapisac w bazie ?\n";
			cin>>n;			
			Program *s = new Program [n];
			dodaj_do_bazy(argv[1],s,n);
			delete [] s;
			break;
		}
		case 2:
		{
		
			int ile;
			cout<<"Ile programow chcesz dopisac do bazy ?\n";
			cin>>ile;	
					
			int roz = rozmiar(argv[1])+ile-1;
			int rozm = rozmiar(argv[1])-1;
			
					
			Program *s = new Program [roz];
			zpliku(argv[1],s,rozm);
			
			for(int i=rozm;i<roz;++i)
			{
				s[i].numer = i+1;
				cout<<"Podaj nazwe :\n";
				
				cin>>s[i].nazwa;
				cout<<"Podaj rodzaj :\n";
				
				cin>>s[i].rodzaj;
				cout<<"Podaj rok produkcji :\n";
				
				cin>>s[i].rok;
				cout<<"Podaj cene zakupu netto :\n";
				
				cin>>s[i].cena;
				cout<<"Podaj cene sprzedazy netto :\n";
				
				cin>>s[i].cena2;
				cout<<"Podaj procent podatku VAT :\n";
				
				cin>>s[i].vat;
				cout<<"Podaj wydawce ;\n";
				
			    cin>>s[i].wydawca;
			    cout<<"Podaj ilosc pakietow w magazynie :\n";
			    
				cin>>s[i].pakiety;
			}
		
			ofstream plik;
			plik.open(argv[1]);
			for(int i=0;i<roz;++i)
			{
				plik<<s[i].numer<<endl;
				plik<<s[i].nazwa<<endl;
				plik<<s[i].rodzaj<<endl;
				plik<<s[i].rok<<endl;
				plik<<s[i].cena<<endl;
				plik<<s[i].cena2<<endl;
				plik<<s[i].vat<<endl;
				plik<<s[i].wydawca<<endl;
				plik<<s[i].pakiety<<endl;
				plik<<"\n\n";
			}
			plik.close();
			delete [] s;
			break;
		}
		case 3:
		{
			cout<<"Programy w bazie :\n\n";
						
			int n = rozmiar(argv[1])-1;
			Program *s = new Program [n];
			zpliku(argv[1],s,n);
			wypisz(s,n);
			
			delete [] s;
			break;
		}
		case 4:
		{
			double szukana_cena;
			cout<<"Podaj cene jaka Cie interesuje \n";
			cin>>szukana_cena;
		
			int n = rozmiar(argv[1])-1;
			Program *s = new Program [n];
			zpliku(argv[1],s,n);
			
			szukaj_po_cenie(s,n,szukana_cena);
			
			
			delete [] s;
			break;
		}
		case 5:
		{
		
			int n = rozmiar(argv[1])-1;
			Program *s = new Program [n];
			zpliku(argv[1],s,n);
		
			int ktory;
			cout<<"Ktory program 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].nazwa<<endl;
				plik<<s[i].rodzaj<<endl;
				plik<<s[i].rok<<endl;
				plik<<s[i].cena<<endl;
				plik<<s[i].cena2<<endl;
				plik<<s[i].vat<<endl;
				plik<<s[i].wydawca<<endl;
				plik<<s[i].pakiety<<endl;
				plik<<"\n\n";
			}
			plik.close();
			
			delete [] s;
			break;
		}
		case 6:
		{
			cout<<"Programy z bazy posortowane po cenie sprzedazy \n";
			int n = rozmiar(argv[1])-1;
			Program *s = new Program [n];
			zpliku(argv[1],s,n);
			sort(s,n);
			wypisz(s,n);
			
			delete [] s;
			break;
		}
		case 7:
		{
			cout<<"Programy z bazy posortowane po nazwie \n";
			int n = rozmiar(argv[1])-1;
			Program *s = new Program [n];
			zpliku(argv[1],s,n);
			sort2(s,n);
			wypisz(s,n);
			
			delete [] s;
			break;
		
		}
		case 8:
		{
			char nazwa[20];
			cout<<"Podaj nazwe jaka bedzie miala kopia bazy \n";
			cin>>nazwa;
			int n = rozmiar(argv[1])-1;
			Program *s = new Program [n];
			zpliku(argv[1],s,n);
			
			ofstream plik;
			plik.open(nazwa);
			for(int i=0;i<n;++i)
			{
				plik<<s[i].numer<<endl;
				plik<<s[i].nazwa<<endl;
				plik<<s[i].rodzaj<<endl;
				plik<<s[i].rok<<endl;
				plik<<s[i].cena<<endl;
				plik<<s[i].cena2<<endl;
				plik<<s[i].vat<<endl;
				plik<<s[i].wydawca<<endl;
				plik<<s[i].pakiety<<endl;
				plik<<"\n\n";
			}
			plik.close();
			
			
			delete [] s;
			break;
			
			
		}	
		case 0:
		{
			cout<<"Dziekuje! Dowidzenia. ;)\n";
		
			//break;
		}
	}
	}while(znak != 0);
	
	system("PAUSE");
	return 0;
}
0

czemu nie użyjesz wektorów zamiast się w to bawić??

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