Lucrare practică 5

Obiective:

    • utilizarea structurilor de date din Python (liste, tupluri, seturi, dicționare);
    • aplicarea conceptelor în prelucrarea datelor persistente din fișiere text, CSV și JSON;
    • observarea diferențelor de mutabilitate/imutabilitate între tipuri de date;
    • operații eficiente de transformare și filtrare (inclusiv comprehensiuni);
    • gestionarea erorilor prin blocuri try, except, else, finally în scopul creșterii robusteții aplicației.

Sarcina de lucru:

La dispoziție sunt 4 variante; cadrul didactic responsabil de orele practice împarte variantele.

Varianta 1 — Mini-catalog studenți

Să se elaboreze un program pentru gestionarea unui mini-catalog de studenți, care:

    • citește din students.csv (coloane: nume, note, unde note este o listă separată prin spații/virgule);
    • consideră că fiecare student are 5 note (evaluarea 1, evaluarea 2, activitatea curentă, lucrul individual, examenul final);
    • calculează nota finală astfel: media trunchiată a primelor 4 note reprezintă 60% din nota finală, iar nota de la examen reprezintă 40%;
    • verifică admisibilitatea la examen: dacă cel puțin una dintre primele 4 note este < 5, studentul nu este admis, iar nota finală devine acea notă sub 5;
    • generează Top 3 după medie (descrescător);
    • grupează studenții pe intervale: >= 9 (excelent), 8–8.99, 7–7.99, < 7 și salvează sumarul în rezultate.json;
    • afișează în consolă un tabel text cu nume, medie și grupa de performanță;
    • extinde programul prin utilizarea blocurilor try, except, else, finally pentru tratarea erorilor de fișier (ex. lipsă, format greșit), conversie numerică sau date incomplete.
Fișiere: intrare students.csv; ieșire rezultate.json.

Varianta 2 — Biblioteca (cărți & autori)

Să se elaboreze un program pentru administrarea unei colecții de cărți, care:

    • importă din carti.csv (coloane: titlu, autor, an, gen);
    • construiește structuri: setul genurilor unice; dicționar autor → listă_cărți; dicționar gen → număr_cărți;
    • produce o listă filtrată cu cărțile dintr-un interval de ani și o salvează în filtru.json;
    • generează un top autori după numărul de titluri, salvat în top_autori.csv (ordonat descrescător);
    • afișează statistici (total cărți, genuri distincte, autorul cu cele mai multe titluri);
    • extinde programul prin tratarea erorilor de fișier și validarea datelor (ani lipsă, câmpuri necompletate) folosind blocuri try, except, else, finally.
Fișiere: intrare carti.csv; ieșiri filtru.json, top_autori.csv.

Varianta 3 — Agenda de contacte (JSON ↔ CSV)

Să se elaboreze un program pentru gestionarea unei agende de contacte, care:

    • încarcă agenda din agenda.json (listă de obiecte cu câmpuri: nume, telefon, email);
    • validează contactele: elimină duplicatele după email (ordine stabilă); filtrează emailurile invalide; normalizează telefon (doar cifre și semnul + inițial, dacă există);
    • permite căutare după prefix de nume și după domeniul de email (ex. @org.com);
    • exportă: CSV agenda_curata.csv (coloane: nume, email, telefon) și JSON agenda_domenii.json — dicționar domeniu → listă_contacte (doar nume, email);
    • afișează în consolă: total contacte inițiale; câte au fost eliminate (duplicate/invalid); primele 5 contacte (ordonate alfabetic după nume);
    • extinde programul cu tratări de excepții pentru erori de fișier, parsare JSON sau validare de date, folosind blocurile try, except, else, finally.
Fișiere: intrare agenda.json; ieșiri agenda_curata.csv, agenda_domenii.json.

Varianta 4 — Vânzări & stoc (CSV → CSV + JSON)

Să se elaboreze un program pentru agregarea vânzărilor și a stocurilor, care:

    • citește vanzari.csv (coloane: produs, cantitate, pret) și stoc.csv (coloane: produs, stoc_minim, stoc_curent);
    • calculează totalul pe produs = sumă cantitate * pret (atenție la conversii);
    • produce Top produse după total, salvat în top_vanzari.csv și top_vanzari.json (ordonat descrescător);
    • identifică produsele cu stoc sub minim folosind un set de produse și salvează lista în alerte_stoc.json;
    • afișează în consolă un raport cu primele 5 produse după total și numărul de alerte de stoc;
    • extinde programul cu tratarea erorilor de fișiere lipsă, linii invalide, produse fără stoc corespunzător, folosind blocuri try, except, else, finally pentru raportarea controlată a excepțiilor.
Tratați linii invalide și produse lipsă într-unul din fișiere; ignorați rândurile eronate și raportați câte au fost omise.

Evaluarea rezultatelor efectuării lucrării practice:

Pontaj:

    • Nota 5 pentru aplicație simplă conform variantei, minim 2 puncte realizate;
    • +1 pentru prezentarea diagramei de fluxuri;
    • +1 pentru realizarea operațiilor de calcul sau procesare date conform variantei asupra datelor citite;
    • +1 pentru integrarea corectă a blocurilor try, except, else, finally;
    • +2 pentru răspunsuri corecte la întrebările cadrului didactic.

Penalități:

    • −1 pentru fiecare săptămână de întârziere;
    • −1 pentru absență la ora practică în care a fost înmânată sarcina;
    • −2 pentru nerespectarea codului de etică a studentului la ore.