Scrieti PATRU clase care modeleaza un magazin online, cu compunere pe mai multe niveluri:
- Produs - nume (fara spatii), pret , stoc :
- constructor(nume, pret, stoc); getNume(); getPret(); getStoc(); scadeStoc(int cant) - daca stoc>=cant, scade si returneaza adevarat, altfel returneaza fals
- Cos - un cos de cumparaturi, memoreaza intern perechi (idProdus, cantitate):
- constructor fara parametri
- adaugaLinie(idProdus, cantitate) - adauga o linie noua in cos
- linii() - returneaza colectia interna de perechi (idProdus, cantitate) - folosita doar de Magazin, nu de programul de test direct
- goleste() - elimina toate liniile
- Client - nume, si un Cos PROPRIU (compunere 1-la-1, nu colectie):
- constructor(nume); getNume(); getCos() - returneaza obiectul Cos memorat intern
- Magazin - orchestreaza produsele si clientii; TOATE comenzile programului de test trec doar prin Magazin (nu direct prin Cos/Produs):
- constructor fara parametri
- adaugaProdus(nume, pret, stoc) - returneaza id-ul produsului
- adaugaClient(nume) - returneaza id-ul clientului
- adaugaInCos(idClient, idProdus, cantitate) - daca id-urile sunt valide SI stocul curent al produsului este >= cantitate, adauga linia in cosul clientului si returneaza adevarat (NU scade stocul acum - doar verifica ca ar fi posibil); altfel returneaza fals
- totalCos(idClient) - returneaza suma (pret*cantitate) pentru toate liniile din cosul clientului
- finalizeazaComanda(idClient) - RE-VERIFICA, la momentul finalizarii, ca fiecare produs din cos are inca stoc suficient (poate sa nu mai aiba, daca alt client a golit stocul intre timp); daca TOATE produsele au stoc suficient: scade efectiv stocul pentru fiecare, goleste cosul si returneaza adevarat; daca macar UN produs nu mai are stoc suficient: NU modifica nimic (nici stocurile, nici cosul) si returneaza fals
- stocProdus(idProdus) - returneaza stocul curent al produsului
- Date de intrare
- Codul vostru este integrat intr-un program de test care citeste comenzi si apeleaza metodele voastre.
- Date de iesire
- Fiecare comanda produce o linie de output.
- Restrictii
- Cel mult 20 produse, 20 clienti, 20 linii per cos.
Exemple
Exemplul 1
Intrare
5 ADDPRODUS Laptop 1000 5 ADDCLIENT Popescu ADDCOS 0 0 2 TOTALCOS 0 STOC 0
Iesire
0 0 1 2000 5

