Programul este similar cu un shell cu niste comenzi, pentru a face management unei biblioteci. Entry point-ul este in fisierul main.cpp, care porneste un loop in care utizatorul trebuie sa introduca comenzi, care vor fi executate de program.
Clasa carte este similara un "struct", care are field-urile ISBN, Title, Authors, Genres, Price, Pages, Total și Available. Toate aceste field-uri sunt publice, acestea doar stocând niște date care nu modifică "state-ul" obiectului, nu avea sens sa folosim getters și setters.
Aceasta clasa are ca field-uri doar Display, GetJson, constructori si overload la operatorul de citire. Această clasă nu are un destructor, folosind doar obiecte care deja au destructori sau primitive.
Constructorul cu parametru nlohmann::json
și functia GetJson()
sunt folosite pentru parse-ul din și în json. Iar funcțiile Display și overload-ul la operatorul <<
sunt folosite pentru afisarea acestui obiect, funcția Display este folosita pentru output-ul în stdout deoarece acesta va afișa textul cu culori, folosindu-use de codurile ANSI, acestea fiind suportate pe majoritatea shell-urilor.
Clasa bibliotecă conține două liste de cărți, una pentru utilizator și una pentru bibliotecă, dar și dimensiunile acestora, aceasta are funcționalități de Read și Save pentru a citi și salva datele prezente în bibliotecă, acestea pot fi salvate in orice tip derivat din std::ostream
.
Pe lângă acestea, putem afișa, găsi, șterge, împrumuta și returna cărți, după orice criteriu, acesta fiind o funcție care primește datele despre o carte și returneaya un bool, marcând dacă acțiunea trebuie efectuată sau nu.
La fel ca și clasa carte, aceasta are overloaded operatorul <<
, și funcția Display, biblioteca fiind afișată cu culori in cazul in care stream-ul este stdout, iar fara în celelalte cazuri.
Nici această clasă nu are un destructor deoarece field-urile din aceasta sunt distruse automat de destructorii lor.
Clasa meniu este o clasă de tip singleton, adica cu o singură instanță posibilă. Aceasta conține funcția StartLoop()
. Care pornește loop-ul cu "shell"-ul, în care aplicația continuă să parseze input-ul de la utilizator, iar în cazul în care o comanda este introdusă, submeniul corespunzător este afișat sau comanda corespunzătoare este rulată, iar în caz contrariu un mesaj este afișat.
Toate datele din bibliotecă sunt salvate într-un fișier in format json, acesta fiind by default numit "db.json". Schimbările sunt salvate in momentul in care utilizatorul folosește comanda save
. Parsing-ul se face folosindu-ne de libraria nlohmann json
.
La pornirea aplicației, aceasta informează utilizatorul să "Scrie o comanda pentru a interactiona cu programul", si care sunt comenzile prezente si alias-urile lor.
Comenzile pe care le poate introduce utilizatorul sunt: add, delete/del, list, search, borrow, return, load, save/s, quit/q, help
. Fiecare dintre această comanda afișează un submeniu, din clasa meniu, excepție fiind add, list, load, save, quit și help
.
- add Apelează constructorul de la clasa Carte, fară parametrii, care face programul să citească o carte din stdin, pe care o adauga in lista cărților din clasa bibliotecă.
- delete Apelează un submeniu care lasă utilizatorul să șteargă o carte după index, isbn sau autor.
- list Afisează clasa bibliotecă, adică toate carțile din aceasta.
- search
Apelează un submeniu care îi permite utilizatorului să afișeze cărțiile care îndeplinesc o condiție. Acesta poate să caute după
index, isbn, autor, gen, pret, număr de pagini și disponibilitate
. - borrow Îi permite utilizatorului să împrumute o carte după ISBN-ul acesteia.
- return Îi permite utilizatorului să returneze o carte după ISBN-ul acesteia.
- load Reîncarcă datele din fișier.
- save Salvează datele în fișier.
- quit Iese din program.
- help Afișează mesajul de ajutor.
- clear Șterge output-ul terminalului daca îi este permis, funcționând pe unix based systems dar și Windows.