#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include <cstdlib>
using namespace std;
class produkt
{
//friend class warzywo; // deklaracja przyjaŸni, aby mo¿liwy by³ dostêp do pó³ privat w nowej klasie pochodnej
protected: // zaprzyjaŸnienie zamienione na rozwi¹zanie z polami protected
int lp;
string name; // nazwa produktu
double count; // liczba produktów
string unit; // jednostka miary
double prize; // cena netto 1 sztuki
double vat; // wartoϾ podatku VAT
public:
produkt(); // konstruktor
produkt(int Nlp, string Nname, double Ncount, string Nunit, double Nprize, double Nvat); // konstruktor
void wypelnij(void);
void pokaz(void);
//virtual void wypelnij(void);
//virtual void pokaz(void);
produkt(produkt &l); // konstruktor kopiujacy
~produkt(); // destruktor
int pole_lp(void);
void pole_lp(int);
};
produkt::produkt(int Nlp, string Nname, double Ncount, string Nunit, double Nprize, double Nvat)
{
lp=Nlp;
name=Nname;
count=Ncount;
unit=Nunit;
prize=Nprize;
vat=Nvat;
}
produkt::produkt()
{
lp = 0;
}
produkt::produkt(produkt &l)
{
lp=l.lp;
name=l.name;
count=l.count;
unit=l.unit;
prize=l.prize;
vat=l.vat;
}
produkt::~produkt()
{
;
}
void produkt::wypelnij(void)
{
cout << "Podaj nazwe:\n";
cin >> name;
cout << "Podaj ilosc:\n";
cin >> count;
cout << "Podaj jednostke miary:\n";
cin >> unit;
cout << "Podaj cene:\n";
cin >> prize; // UWAGA obowi¹zuje notacja z kropk¹ .
cout << "Podaj stawke VAT:\n";
cin >> vat;
}
void produkt::pokaz(void)
{
cout << endl;
cout << lp << "\t";
cout << name << "\t";
cout << count << "\t";
cout << unit << "\t";
cout << prize << "\t";
cout << vat << endl;
}
int produkt::pole_lp(void)
{
return(lp);
}
void produkt::pole_lp(int x)
{
lp = x;
}
class wezel {
public:
wezel *nastepny;
produkt *zawartosc;
int indeks;
};
class baza {
wezel *pierwszy, *ostatni;
int licznik;
public:
baza();
~baza();
void dodaj(produkt *prod);
void wyswietl();
void usun(int idx);
void zapisz();
void wczytaj();
};
baza::baza() {
pierwszy = ostatni = NULL;
licznik = 0;
};
baza::~baza() {
wezel *p;
while(pierwszy)
{
p = pierwszy -> nastepny;
delete pierwszy;
pierwszy = p;
}
}
void baza::dodaj(produkt *prod) {
wezel *p = new wezel;
if(ostatni)
{
ostatni->nastepny = p;
p->zawartosc = prod;
}
p->nastepny = NULL;
ostatni = p;
if(!pierwszy)
{
pierwszy = ostatni;
}
licznik++;
};
void baza::usun(int idx) {
};
void baza::wyswietl() {
wezel *p = new wezel;
if(!pierwszy) cout << "Lista jest pusta." << endl;
else
{
p = pierwszy;
while(p)
{
p->zawartosc->pokaz();
p = p->nastepny;
}
cout << endl;
}
};
int main(void)
{
baza db1;
produkt *p1 = new produkt(5, "maslo", 10, "sztuk", 1.00, 0.07);
db1.dodaj(p1);
db1.wyswietl();
return 0;
}
Mam za zadanie napisać bazę danych na klasach(jak widać wyżej). Na samym początku walczę z problemem naruszenia pamięci. Chcę dodać nowy produkt i wyświetlić bazę wszystkich dodanych produktów. Jak na razie ni w ząb mi to wychodzi. Pewnie coś namieszałem ze wskaźnikami znając życie.
Później mam dodać jeszcze klasy pochodne do produktu, ale najpierw muszę pozbyć się pierwszego problemu. Gdzie robię błąd?