Witam jako nowicjusz na forum. Piszę program na zaliczenie służący do podstawowej obsługi sklepu. Zatrzymałem się na obsłudze sprzedaży w momencie dodawania do paragonu pozycji. Na tę chwilę funkcja wygląda tak:
void Kasa::sprzedaz(Kasa & obiekt, Magazyn & obiekt2){
string nazwa;
Towar * towar;
vector <Towar> paragon;
paragon.clear();
if(obiekt.stan_kasy == 0){
obiekt.zasilek_kasowy();
cout<<"Wplacono zasilek kasowy - stan kasy 300.00 zl"<<endl;
}
while(true){
system("cls");
cout << "|-----------------KASA - SPRZEDAZ-----------------|" << endl;
cout << "| 1. DODAJ POZYCJE DO PARAGONU |" << endl;
cout << "| 2. USUN OSTATNIA POZYCJE Z PARAGONU |" << endl;
cout << "| 3. ZAPLAC |" << endl;
cout << "|-------------------------------------------------|" << endl;
cout<<"\nPARAGON:"<<endl;
if(paragon.empty() == false){
for(int i = 0; i < paragon.size(); i++){
cout<<paragon[i].nazwa_tow<<" "<<"Ilosc: "<<paragon[i].ilosc<<endl;
}
}
else cout<<"Brak pozycji na paragonie"<<endl;
cin<<akcja;
switch(akcja){
case 1://DODAJ POZYCJE DO PARAGONU
{
obiekt2.wyswietl_magazyn();
cout<<"Wprowadz nazwe towaru dodawanego do paragonu"<<endl;
cin>>nazwa;
nazwa = male_litery(nazwa);
if(obiekt2.czy_jest_w_magazynie(nazwa)==true){//sprawdz czy jest w magazynie
for(int i = 0; i < magazyn.size(); i++){//jezeli jest
if(magazyn[i].nazwa == nazwa){
towar = magazyn[i];//ustaw wskaznik towar na tej pozycji
break;
}
}
cout<<"Wprowadz ilosc"<<endl;
cin>>ile;
if(towar->ilosc >= ile){ //sprawdz czy jest wystarczajaca ilosc towaru na stanie
//TUTAJ SIĘ ZATRZYMAŁEM
}
else cout<<"Brak wystarczajacej ilosci towaru na stanie"<<endl:
};
else cout<<"Brak towaru o takiej nazwie"<<endl;
system("pause");
}
case 2:
{
}
case 3:
{
}
}
}
}
Jak rozwiązać problem z wieloma pozycjami na paragonie? W wymaganiach projektu jest zawarta m.in agregacja więc to chyba najlepszy punkt do jej wykorzystania by obiekt klasy Paragon zawierał pozycje które są obiektami klasy Towar. No I w sumie to na tyle, bo nie mam żadnego sensownego pomysłu co dalej. Funkcja sprzedaż najpierw zbiera informacje o przyszłym paragonie, pozycje przechowuje w tymczasowym wektorze, a po zapłaceniu tworzy obiekt klasy Paragon i wrzuca go do wektora w obiekcie klasy Baza_dokumentow. Podobnie zamierzałem zrobić z Fakturą która będzie wystawiana na podstawie Paragonu. Nie przemyślałem że okaże się to w tym miejscu takie skomplikowane dla mnie i trochę tak jakbym się porwał z motyką na słońce. Jakieś pomysły?
Definicja dokumentow:
class Baza_Dokumentow{
class Dokument{
public:
virtual void dodaj_dokument()=0;
};
//----------------------------
//KLASA ZAGNIEZDZONA PARAGON
class Paragon :public Baza_Dokumentow::Dokument{
int nr_paragonu;
string data;
int wartosc;
vector <Towar> pozycje;
Paragon();
~Paragon();
public:
virtual void dodaj_dokument();
};
//----------------------------
//KLASA ZAGNIEZDZONA FAKTURA
class Faktura :public Baza_Dokumentow::Dokument{
};
//----------------------------
};
definicja Towaru
class Towar {
friend class Magazyn;
friend class Kasa;
string nazwa_tow;
int ilosc;
int indeks_tow;
float cena_tow;
public:
Towar(const string, int, const int, float);
~Towar();
};