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;
}