Proiect structuri de date 2006 - 2007
Grupa:
Nume:
Prenume:
Număr temă:
1
Titlu temă:
Angajati
1. Ipoteze de lucru
Am plecat de la ipoteza ca avem o companie care este in plina dezvoltare. Asadar
operatia cea mai frecventa care se va efectua va fi aceea de adaugare de noi angajati. De
asemenea vor avea o foarte mare frecventa operatiile de stergere a unui angajat si modificare a
profilului unui salariat (acesta putand trece de la un departament la altul foarte des, sau se pot
opera modificari salariale). Operatiile de adaugare/ modificare/ stergere departament au o
frecventa medie, la inceput, dupa care frecventa lor va fi foarte mica sau nula.
2. Descrierea structurii de date folosite
Din descrierea problemei si din ipotezele stabilite se observa ca operatia cea mai
frecventa este adaugarea de noi angajati. In concluzie la adaugarea unui nou angajat va trebui sa
executam urmatoarele operatii:
� Asigurarea unicitatii marcii angajatului, prin verificarea marcilor tuturor celorlati angajati
� Gasirea departamentului in care va urma sa lucreze angajatul respectiv
� Adaugarea angajatului in baza de date, in functie de marca sa, pentru o regasire usoara
ulterioara
In aceste conditii, pentru a reduce volumul de date si timpul de calcul am ales arborele
binar de cautare pentru memorarea angajatilor, unde cheia de sortare este marca angajatului.
Aceasta alegere asigura o verificare rapida a unicitatii marcii angajatului in baza de date, dar
totodata si o adaugare rapida a unui nou angajat, in functie de marca sa. Pentru memorarea
datelor privitoare la departamente am ales lista simplu inlantuita, deoarece numarul
departamentelor este mic, si in acest fel regasirea unui departament in lista nu este greoaie.
Nodul structurii departament va avea de asemenea un camp care va memora un pointer la
radacina arborelui binar de cautare, unde sunt memorati angajatii departamentului respectiv.
Asadar vor fi atatia arbori binari de cautare, cate departamente avem in firma. In plus vom avea
un departament „fictiv”, cu codul 0, care va fi parintele tuturor celorlalte departamente, iar
arborele binar corespunzator va memora acei angajati care nu au fost repartizati unui
departament inca. Modificarea datelor unui angajat consta de fapt intr-o cautare si o actualizare,
beneficiind astfel de avantajele arborelui binar de cautare.
In structura DateProiect vom tine un pointer catre primul departament din lista de
departamente, si in acelasi timp si o variabila care va memora numarul de departamente. Acesta
ne va ajuta la salvarea/incarcarea datelor in/din fisier.
3. Structură de date alternativă (ipoteze + descriere)
In ipoteza in care avem o campanie mai mica, cu un numar stabil si mic de departamente si
de angajati, care nu planuieste sa se dezvolte in urmatoarea perioada, operatiile cele mai
frecvente ar fi modificarea datelor unui angajat, si in acelasi timp diferite rapoarte cum ar fi
FisaDepartament sau TopAngajati. In acest caz departamentele ar putea fi memorate intr-un
vector alocat dinamic. Numarul departamentelor fiind mic si stabil, cautarea si modificarea nu
sunt dificile, iar adaugarea si stergerea, desi sunt putin mai complicate, se efectueaza la intervale
rare. In cazul angajatilor, datele despre acestea ar putea fi memorate intr-o lista circulara, sortata
in functie de marca angajatului. Numarul angajatilor fiind mic, regasirea nu este didicila si nici
consumatoare de multe resurse. Alegerea listei circulare ar constitui un avantaj pentru
TopAngajati. Putem construi o lista temporara, prin simpla concatenare a listelor
departamentelor, fara a fi necesara parcurgerea acestora, si apoi sortarea listei temporare. Ca si
in cazul implementat, componenta 0 a vectorului de departamente ar urma sa aiba codul
departamentului 0, si ar urma sa contina angajatii nerepartizati inca unui departament.