Program służy jako baza danych sieci sklepów z zabawkami, o podanym pliku nagłówkowym. Baza danych jest reprezentowana przez kontener (od zera zaimplementowany) składa się z obiektów Chain, która posiada kontener (wektor/STL) obiektów Shop, a te posiadają kontener (wektor/STL) obiektów Toy - jak niżej:
class Toy { public: string name; double price; int amount; Toy(string name, double price, int amount); ~Toy() {} friend ostream& operator<<(ostream& out, const Toy& toy); friend istream& operator>>(istream& in, Toy& toy); }; class Shop { public: string address; vector<Toy> Toys; public: Shop(string address); Shop() {} ~Shop() {} void addToys(); void addToysExtended(string name, double price, int amount); void deleteToy(string name); string getAddress(); friend ostream& operator<<(ostream& out, const Shop& shop); friend istream& operator>>(istream& in, Shop& shop); }; class Chain { private: string trademark; unsigned short amount; public: vector<Shop> Shops; Chain(string trademark); Chain() {}; ~Chain() {} void addShop(); void addShopExtended(string address); string getTrademark(); friend ostream& operator<<(ostream& out, const Chain& chain); friend istream& operator>>(ostream& in, Chain& chain); }; void displayMenu(); void pressKey(); void clearScreen();
W funkcji głównej main() mam za zadanie wyświetlić zabawki sklepu z danej sieci. Stale próbuję napisać własny sposób wyświetlenia kolejnych zabawek, jednak algorytm działa poprawie tylko dla pierwszego przelotu tzn. dla pierwszej sieci i pierwszego sklepu, próba wyświetlenia zawartości dalszych sieci->sklepów kończy się fiaskiem, bo nic nie wyświetla. Tak wyglądają moje zapiski:
string trademark; cout << "Chain's name: "; cin.ignore(USHRT_MAX, '\n'); getline(cin, trademark); for (it = database.begin(); it != database.end(); it++) { if (trademark == (*it).getTrademark() && (*it).Shops.size() != 0) { string address; cout << "Address: "; getline(cin, address); for (unsigned short i = 0; i < (*it).Shops.size(); i++) { if (address == (*it).Shops[i].address && (*it).Shops[i].Toys.size() != 0) { for (unsigned short j = 0; j < (*it).Shops[i].Toys.size(); j++) cout << (*it).Shops[i].Toys[j] << endl; break; } if (address == (*it).Shops[i].address && (*it).Shops[i].Toys.size() == 0) cout << "No toys."<< endl; break; } } if (trademark == (*it).getTrademark() && (*it).Shops.size() == 0) { cout << "No shops."<< endl; break; } }
Oddzielne funkcje wyświetlające sieci lub sieci ze sklepami napisałem w porządku, jednak z wyświetlaniem zabawek mam problem, stąd proszę o pomoc...