Publicare: 30.10.2024
Deadline: 13.11.2024, ora 23:59
Aspecte generale:
Structura temei poate fi modificată (dar trebuie să păstreze structura de bază), iar studenții pot adăuga sau modifica clase și funcționalități după cum consideră necesar, inclusiv introducerea unor clase suplimentare, atâta timp cât respectă cerințele de bază ale temei.
Locația de încărcare, unde veți găsi și structura de bază a temei, este specificată la finalul paginii, la punctul 5.
În cadrul acestei teme, utilizarea claselor din STL (Standard Template Library) nu este permisă. Prin excluderea STL, obiectivul este să încurajăm implementarea și înțelegerea structurilor de date și a algoritmilor de la zero, fără a folosi soluții preconstruite. Aceasta permite o mai bună aprofundare a principiilor fundamentale ale POO și ale structurilor de date, de la scrierea propriilor containere până la realizarea algoritmilor de manipulare a acestora.
Tema: Gestionarea Datelor unui Magazin
Această temă are scopul de a dezvolta un program pentru gestionarea datelor unui magazin, folosind concepte de programare orientată pe obiecte (OOP) și lucrul cu fișiere text pentru citirea și scrierea datelor. Programul primește două fișiere de input:
produse.txt – Conține lista de produse disponibile în magazin, fiecare având denumire, preț și cantitatea în stoc.
clienti.txt – Conține informațiile despre clienți și comenzile acestora. Fiecare client are o listă de comenzi, iar în fiecare comandă se specifică produsele și cantitățile comandate.
Funcționalitățile Programului
Programul va citi aceste fișiere de input, va procesa datele și va genera două fișiere de output:
output_comenzi.txt – Conține detalii despre comenzile fiecărui client, inclusiv:
ID-ul și numele clientului
Data comenzii
Produsele comandate (denumire, preț unitar și cost total pe produs)
Totalul comenzii pentru fiecare client
output_stoc_ramas.txt – Afișează produsele disponibile și stocul rămas după procesarea tuturor comenzilor, alături de prețul fiecărui produs. Acest fișier servește ca un inventar actualizat, indicând stocurile rămase.
Rulare cu parametri în linia de comandă
Programul trebuie să fie rulat cu parametri în linia de comandă, unde `argv[1]` este `produse.txt` și `argv[2]` este `clienti.txt`.
Exemplu de rulare:
```bash
./program produse.txt clienti.txt
Rulare în Code::Blocks
Deschideți proiectul în Code::Blocks și setați main.cpp (sau fișierul care conține funcția main) ca fișier de lansare.
Setați argumentele de linie de comandă:
Mergeți la Project > Set Program's Arguments.
În fereastra deschisă, introduceți produse.txt clienti.txt.
Apăsați OK pentru a salva.
Compilați și rulați programul apăsând Build and Run (F9).
Programul va rula acum cu produse.txt și clienti.txt ca argumente.
Rulare în Dev-C++
Deschideți proiectul în Dev-C++.
Setați argumentele de linie de comandă:
Mergeți la Execute > Parameters.
În câmpul Parameters, introduceți produse.txt clienti.txt.
Apăsați OK pentru a salva.
Compilați și rulați programul apăsând Run (F10).
Programul va rula acum cu produse.txt și clienti.txt ca argumente, exact ca atunci când este rulat din terminal.
Rulare în Visual Studio
Urmăriți tutorialul de aici .
Notă: Asigurați-vă că fișierele produse.txt și clienti.txt se află în același director ca executabilul, sau specificați calea completă către fișiere dacă sunt localizate în altă parte.
Scopul Educațional al Temei
Această temă dezvoltă abilități precum:
Lucrul cu fișiere – Citirea și scrierea datelor din și în fișiere text.
Programare Orientată pe Obiecte – Folosirea claselor pentru a organiza și gestiona datele într-o structură modulară și ușor de extins.
Agregare – Crearea relațiilor între clase prin intermediul compoziției, unde clasele precum `Client` și `Comanda` utilizează instanțe de `Produs` pentru a modela comenzile.
Cerințe și Reguli pentru Încărcarea Temei
Încărcarea temei se va face pe GitHub, iar repository-ul va conține fișierele de bază necesare pentru începerea temei.
Testarea: Vor exista 6 teste în folderul `teste` pentru a verifica funcționalitatea completă a temei. Aceste teste se vor rula automat la încărcarea temei pentru a valida corectitudinea implementării.
Restricții: Modificarea fișierelor din folderul `teste` și a fișierului `Makefile` este interzisă. Aceste fișiere sunt esențiale pentru verificarea corectă și consistentă a soluției și trebuie să rămână neschimbate.
Această temă oferă un cadru practic de aplicare a POO în gestionarea unui sistem de magazin, exersând fluxul de date și logica de gestionare a comenzilor și inventarului.
Structura clase de bază care sunt oferite
1.1 Fișierul stoc.txt
3
Laptop 2999.99 15
Telefon 1499.49 30
Mouse 99.99 50
Explicație:
Linia 1: `3` – Reprezintă numărul total de produse disponibile în stoc. Acest număr este important pentru a aloca corect spațiu în memorie pentru produsele din inventar.
Linia 2 și următoarele: Fiecare linie conține informații despre un produs specific. Fiecare linie este compusă din următoarele elemente:
Denumirea produsului (de exemplu, `Laptop`) – un șir de caractere care identifică produsul.
Prețul (de exemplu, `2999.99`) – un număr în virgulă mobilă care reprezintă costul produsului.
Cantitatea (de exemplu, `15`) – un număr întreg care indică stocul disponibil pentru acel produs.
1.2 Fișierul comenzi.txt
2
Ion Popescu
15 10 2023 2
Laptop 1
Mouse 2
Maria Ionescu
18 10 2023 1
Telefon 1
Explicație:
Linia 1: `2` – Reprezintă numărul total de clienți sau comenzi (în funcție de context).
Linia 2: `Ion Popescu` – Numele clientului care a plasat comanda.
Linia 3 și următoarele: Fiecare grup de linii de aici încolo reprezintă o comandă.
Exemplu de comandă:
Prima linie a comenzii: `15 10 2023 2` – Conține data comenzii (`15 octombrie 2023`) și numărul de produse din comandă (`2`).
Liniile următoare: Fiecare linie include numele produsului (de exemplu, `Laptop`) și cantitatea comandată (de exemplu, `1`).
2. Fisiere de output
2.1 Fișierul output_stoc_ramas.txt
Stoc ramas
0. Laptop: 14, Pret: 2999.99
1. Telefon: 29, Pret: 1499.49
2. Mouse: 48, Pret: 99.99
Explicație:
Acest fișier este generat de program după ce comenzile au fost procesate și stocurile actualizate. Fiecare linie conține informații despre un produs din stocul rămas, cu următoarele detalii:
Numărul produsului (0, 1, 2) – folosit pentru referință.
Denumirea produsului (de exemplu, `Laptop`).
Cantitatea rămasă în stoc (de exemplu, `14`).
Prețul produsului (de exemplu, `2999.99`).
2.2 Fișierul output_comenzi.txt
Nume: Ion Popescu
Comanda ID: 0
Data comenzii: 15/10/2023
Produse comandate:
1 X Laptop (2999.99)
2 X Mouse (99.99)
Total comanda: 3199.97 RON
Nume: Maria Ionescu
Comanda ID: 1
Data comenzii: 18/10/2023
Produse comandate:
1 X Telefon (1499.49)
Total comanda: 1499.49 RON
Explicație:
Nume: Numele complet al clientului.
Comanda ID: Identificatorul unic al comenzii, specific fiecărei tranzacții.
Data comenzii: Data la care a fost plasată comanda.
Produse comandate: Titlu care introduce lista produselor achiziționate de client.
Linie produs: Fiecare produs din comandă include:
Cantitatea (de exemplu, `1` sau `2`),
Denumirea produsului (de exemplu, `Laptop` sau `Mouse`),
Prețul unitar (de exemplu, `2999.99` RON).
Total comanda: Suma totală de plată pentru comanda respectivă.
Acest format asigură claritatea și detalierea fiecărei comenzi plasate de clienți, oferind informații esențiale despre produsele achiziționate și suma finală.
3. Cerințe pentru Temă
Citirea și Stocarea Datelor
Implementați funcționalități pentru a citi informațiile despre produse și clienți din fișierele `produse.txt` și `clienti.txt` și stocați-le folosind clase.
Procesarea Comenzilor
Programați sistemul pentru a verifica stocurile și a actualiza cantitățile rămase după ce fiecare comandă este procesată.
Generarea Fișierelor de Output
Programul trebuie să genereze două fișiere de output:
Respectarea Structurii de Bază
Păstrați structura de bază a proiectului. Modificarea claselor și adăugarea altora este permisă doar dacă cerințele de bază sunt respectate.
Organizarea Codului
Organizați codul în mai multe fișiere (`.h` și `.cpp`) pentru fiecare clasă, asigurându-vă că programul este modular și ușor de citit.
Restricții
Este interzisă modificarea fișierelor din folderul `teste` și a fișierului `Makefile`. Acestea sunt folosite pentru verificarea automată a corectitudinii programului.
4. Punctaj
Dacă programul nu compilează sau nu trece niciun test, nota va fi 0.
Pentru a considera testul 0 trecut, trebuie să aveți implementate corect clasele din structura oferită.
Test 0 → 3 puncte
Test 1 → 1 punct
Test 2 → 1 punct
Test 3 → 1 punct
Test 4 → 1 punct
Test 5 → 1 punct
README → 2 puncte
Pentru a obține punctajul maxim, programul trebuie să treacă toate cele 6 teste de verificare și să conțină un fișier README complet.
Cerințe pentru README
În fișierul README.md, includeți următoarele informații:
Numele și grupa.
Sistemul de operare și IDE-ul utilizat.
Descrierea temei și o explicație a funcționalității programului.
Explicația funcției `int main`: de ce este structurat astfel și cum funcționează.
5. Încărcare temă
Link-ul pentru încărcarea temei poate fi accesat aici.
După ce dați accept, se va crea un repository care conține template-ul necesar pentru verificarea și corectarea temei.
Trebuie să porniți de la structura dată și să nu ștergeți fișierele existente.
Pentru a edita și lucra local, folosiți comanda `git clone`.
Tutorial
Dați click pe butonul
Code și apoi pe
SSH și copiați link-ul (trebuie să aveți inclusă cheia de SSH de pe calculatorul dvs. în contul de GitHub; vezi tutorialul din
02).
Deschideți Git Bash în folderul de pe computer unde doriți să lucrați la tema.
Introduceți comanda `git clone [link copiat anterior]`.
Se va genera un folder cu fișierele din repository și vă puteți apuca să lucrați și să le editați.
Testarea și verificarea temei