Scrieti CINCI clase care modeleaza catalogul unei scoli, organizate ierarhic (fiecare clasa 'contine' obiecte din clasa anterioara):
- Nota - o nota la o materie: materie (fara spatii), valoare (intreg 1-10).
- constructor(materie, valoare); getMaterie(); getValoare()
- Profesor - nume (fara spatii), materie predata.
- constructor(nume, materie); getNume(); getMaterie()
- Elev - nume, id , si o colectie interna de obiecte Nota.
- constructor(nume, id)
- getNume(), getId()
- adaugaNota(materie, valoare) - adauga o Nota DOAR daca 1<=valoare<=10; returneaza adevarat/fals
- mediaGenerala() - media tuturor notelor (0 daca elevul nu are nicio nota)
- mediaLaMaterie(materie) - media notelor doar la materia data (-1 daca elevul nu are nicio nota la acea materie)
- Clasa - nume (ex. 9A), si o colectie interna de obiecte Elev (NU doar id-uri - obiectele Elev efective).
- constructor(nume)
- getNume()
- adaugaElev(Elev e) - adauga elevul in colectia interna
- gasesteElev(id) - returneaza elevul cu acel id (presupus ca exista)
- mediaClasei() - media generala a TUTUROR elevilor din clasa (0 daca nu are elevi)
- elevulCuMediaMaxima() - returneaza numele elevului cu cea mai mare mediaGenerala() (in caz de egalitate, primul adaugat); "-" daca nu are elevi
- numarElevi()
- CatalogScolar - orchestreaza mai multe obiecte Clasa si Profesor.
- constructor fara parametri
- adaugaClasa(nume) - creeaza o Clasa noua si returneaza id-ul ei (0,1,2,...)
- adaugaProfesor(nume, materie) - adauga un Profesor in colectia interna
- numarProfesoriLaMaterie(materie) - cati profesori predau acea materie
- adaugaElevInClasa(idClasa, nume, idElev) - creeaza un Elev si il adauga in Clasa cu id-ul idClasa (delegare catre Clasa.adaugaElev)
- adaugaNotaElev(idClasa, idElev, materie, valoare) - gaseste elevul (prin Clasa.gasesteElev) si ii adauga o nota (delegare catre Elev.adaugaNota); returneaza rezultatul lui adaugaNota
- mediaElev(idClasa, idElev) - media generala a elevului cu id-ul idElev din clasa idClasa (delegare prin Clasa.gasesteElev catre Elev.mediaGenerala)
- mediaElevLaMaterie(idClasa, idElev, materie) - media elevului la o materie data (delegare similara catre Elev.mediaLaMaterie)
- mediaClasa(idClasa) - delegare catre Clasa.mediaClasei
- topElevClasa(idClasa) - delegare catre Clasa.elevulCuMediaMaxima
- clasaCuMediaMaxima() - returneaza numele clasei (dintre toate clasele adaugate) cu cea mai mare mediaClasei(); "-" daca nu exista nicio clasa
- 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 de clase, 50 de elevi per clasa, 50 de note per elev intr-un test.
Exemple
Exemplul 1
Intrare
8 ADDCLASA 9A ADDELEV 0 Popescu 1 ADDELEV 0 Ionescu 2 NOTA 0 1 Matematica 8 NOTA 0 1 Matematica 10 NOTA 0 2 Romana 6 MEDIAELEV 0 1 MEDIAELEV 0 2
Iesire
0 OK OK 1 1 1 9.00 6.00

