Skip to content

TLuca-coder210/Project_POO

Repository files navigation

Sistem Bancar Multi-Threaded

Acest proiect este o aplicație de consolă dezvoltată în C++ care simulează arhitectura și operațiunile de bază ale unei bănci, punând în practică conceptele fundamentale de Programare Orientată pe Obiecte. Aplicația permite gestionarea utilizatorilor și a conturilor asociate (curente cu opțiune de overdraft și de economii cu dobândă), facilitând depuneri și transferuri financiare multi-valută. Pentru a demonstra funcționalități avansate, sistemul integrează fire de execuție (threads) ce rulează în fundal pentru actualizarea cursurilor valutare, precum și un modul de audit care folosește excepții personalizate pentru a identifica și bloca automat tentativele de fraudă prin transferuri circulare.

Folosiți template-ul corespunzător grupei voastre!

Laborant Link template
Dragoș B https://github.com/Ionnier/oop-template
Tiberiu M https://github.com/MaximTiberiu/oop-template
Marius MC https://github.com/mcmarius/oop-template

Instrucțiuni de compilare

Proiectul este configurat cu CMake.

Instrucțiuni pentru terminal:

  1. Pasul de configurare
cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug
# sau ./scripts/cmake.sh configure

Sau pe Windows cu GCC:

cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -G Ninja
# sau ./scripts/cmake.sh configure -g Ninja

La acest pas putem cere să generăm fișiere de proiect pentru diverse medii de lucru.

Cerințe obligatorii

Nerespectarea duce la nepunctarea proiectului

  • programul va fi scris în C++
  • programul va avea un meniu interactiv (doar pentru ilustrarea funcționalității)
  • programul nu are erori de compilare
  • fară variabile globale
  • datele membre private(sau protected)
  • GitHub Actions trecute
  • commit-uri pe Git adecvate si punctuale
  • folosirea a funcționalităților limbajului fără sens
  • folosirea a funcționlităților limbajului cu scopul de a încălca "legal" o altă regulă
    • folosirea excesivă a claselor friend
    • folosirea excesviă a elementelor statice
  • lipsa separarea implementarii de definitie

Cerințe

  • pentru fiecare cerință (sau subcerință) neîndeplinită se scade 1 punct
  • definirea a minim 2-3 ieararhii de clase care sa interactioneze in cadrul temei alese (fie prin compunere, agregare sau doar sa apeleze metodele celeilalte intr-un mod logic)
    • minim o clasa cu:
      • constructori de inițializare *
      • constructor supraîncărcat *
      • constructori de copiere *
      • operator= de copiere *
      • destructor *
      • operator<< pentru afișare (std::ostream) *
      • operator>> pentru citire (std::istream) *
      • alt operator supraîncărcat ca funcție membră *
      • alt operator supraîncărcat ca funcție non-membră * - nu neaparat ca friend
    • in derivate
      • implementarea funcționalităților alese prin upcast și downcast
        • aceasta va fi făcută prin 2-3 metode specifice temei alese
        • funcțiile pentru citire / afișare sau destructorul nu sunt incluse deși o să trebuiască să le implementați
      • apelarea constructorului din clasa de bază din constructori din derivate
      • suprascris cc/op= pentru copieri/atribuiri corecte
      • destructor virtual
    • pentru celelalte clase se va definii doar ce e nevoie
    • minim o ierarhie mai dezvoltata (cu 2-3 clase dintr-o clasa de baza)
    • ierarhie de clasa se considera si daca exista doar o clasa de bază însă care nu moștenește dintr-o clasă din altă ierarhie
  • cât mai multe const *
  • funcții și atribute static (în clase) *
    • 1+ atribute statice non-triviale
    • 1+ funcții statice non-triviale
  • excepții *
    • porniți de la std::exception
    • ilustrați propagarea excepțiilor
    • ilustrati upcasting-ul în blocurile catch
    • minim folosit într-un loc în care tratarea erorilor în modurile clasice este mai dificilă
  • folosirea unei clase abstracte *
  • clase template
    • crearea unei clase template *
    • 2 instanțieri ale acestei clase
  • STL *
    • utilizarea a două structuri (containere) diferite (vector, list sau orice alt container care e mai mult sau mai putin un array)
    • utilizarea a unui algoritm cu funcție lambda (de exemplu, sort, transform)
  • Design Patterns *
  • utilizarea a două șabloane de proiectare

Observații

  • Pot exista depunctări până la 2p pentru diferite aspecte precum:

    • memory leak-uri
    • nefolosirea destructorului virtual la nevoie
    • abuzarea de diferite concepte (toate funcțiile declarate virtual)
    • apelarea de funcții virtual în constructori
  • În general, acestea sunt prezente în CppCoreGuideline, dar nu e nevoie să parcurgeți documentul, doar să scrieți codul suficient de organizat

  • folderele build/ și install_dir/ sunt adăugate în fișierul .gitignore deoarece conțin fișiere generate și nu ne ajută să le versionăm.

About

Multi-threaded banking system

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Generated from Ionnier/oop-template