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...