Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania bez odpowiedzi
Viewing all articles
Browse latest Browse all 22036

Zagnieżdżone pętle - wyświetlanie danych z kontenerów

$
0
0

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


Viewing all articles
Browse latest Browse all 22036

Trending Articles