Răspuns :
#include <iostream>
#include <string>
#include <set>
#include <map>
using namespace std;
class Carte {
public:
Carte(int cod_identificare, string autor, string nume, int an_publicatie) : cod_identificare(cod_identificare), autor(autor), nume(nume), an_publicatie(an_publicatie) {};
~Carte() {};
int cod_identificare, an_publicatie;
string autor, nume;
string imprumutataDe = "-";
protected:
private:
};
class Persoana {
public:
Persoana(string nume) : nume(nume) {};
set<Carte*> cartiImprumutate = set<Carte*>();
string nume;
protected:
private:
};
string null_;
map<string, Persoana*> persoane = map<string, Persoana*>();
struct Biblioteca {
Carte* (*carti);
int numarCarti = 0;
} biblioteca;
void initializare(){
int marimeMaxima;
cout << "Numarul maxim de carti: "; cin >> marimeMaxima;getline(cin, null_);
biblioteca.carti = new Carte*[marimeMaxima];
}
void dealocare(){
for(int i = 0; i < biblioteca.numarCarti; i++){
delete biblioteca.carti[i];
}
delete biblioteca.carti;
for(map<string, Persoana*>::iterator it = persoane.begin(); it != persoane.end(); it++){
delete it->second;
}
}
void adaugareCarte(){
int cod, an_publicatie;
string autor, nume;
cout << "ID: "; cin >> cod;getline(cin, null_);
cout << "Autor: "; getline(cin, autor);
cout << "Titlu: "; getline(cin, nume);
cout << "An publicatie: "; cin >> an_publicatie; getline(cin, null_);
biblioteca.carti[biblioteca.numarCarti++] = new Carte(cod, autor, nume, an_publicatie);
}
void listare(){
for(int i = 0; i < biblioteca.numarCarti; i++){
cout << biblioteca.carti[i]->cod_identificare << ", \"" << biblioteca.carti[i]->nume << "\", " << biblioteca.carti[i]->autor << ", " << biblioteca.carti[i]->an_publicatie << '\n';
}
}
void eliminare(){
int id;
cout << "ID: "; cin >> id;getline(cin, null_);
int i;
for(i = 0; i < biblioteca.numarCarti; i++){
if(biblioteca.carti[i]->cod_identificare == id){
delete biblioteca.carti[i];
break;
}
}
for(i++; i < biblioteca.numarCarti; i++){
biblioteca.carti[i-1] = biblioteca.carti[i];
}
biblioteca.numarCarti--;
}
void imprumut(){
int id;
string nume;
cout << "ID: "; cin >> id;getline(cin, null_);
cout << "Nume: "; getline(cin, nume);
Carte* c = nullptr;
for(int i = 0; i < biblioteca.numarCarti; i++){
if(biblioteca.carti[i]->cod_identificare == id){
biblioteca.carti[i]->imprumutataDe = nume;
c = biblioteca.carti[i];
break;
}
}
if(c == nullptr)
return;
if(persoane[nume] == NULL){
persoane[nume] = new Persoana(nume);
}
persoane[nume]->cartiImprumutate.insert(c);
}
void informatii_carte(){
int id;
cout << "ID: "; cin >> id;getline(cin,null_);
for(int i = 0; i < biblioteca.numarCarti; i++){
if(biblioteca.carti[i]->cod_identificare == id){
Carte* c = biblioteca.carti[i];
cout << '"' << c->nume << "\", " << c->autor << ", " << c->an_publicatie;
if(c->imprumutataDe != "-"){
cout << ", imprumutata de " << c->imprumutataDe;
}
cout << '\n';
break;
}
}
}
void informatii_persoana(){
string nume;
cout << "Nume: "; getline(cin, nume);
Persoana *p = persoane[nume];
if(p == nullptr)
return;
for(set<Carte*>::iterator it = p->cartiImprumutate.begin(); it!=p->cartiImprumutate.end(); it++){
cout << (*it)->cod_identificare << ", \"" << (*it)->nume << "\", " << (*it)->autor << ", " << (*it)->an_publicatie << '\n';
}
}
#define A adaugareCarte
#define L listare
#define E eliminare
#define I imprumut
#define C informatii_carte
#define P informatii_persoana
int main(){
initializare(); // asta trebuie sa ramana aici
string apel;
cout << "Ce functie doriti sa apelati? (A/L/E/I/C/P): "; getline(cin, apel);
while(apel != "0"){
if(apel == "A")A();
else if(apel == "L")L();
else if(apel == "E")E();
else if(apel == "I")I();
else if(apel == "C")C();
else if(apel == "P")P();
else cout << "FUNCTIE NECUNOSCUTA\n";
cout << "Ce functie doriti sa apelati? (A/L/E/I/C/P) sau 0 pentru terminare: "; getline(cin, apel);
}
dealocare(); // si asta trebuie sa ramana aici
}
Vă mulțumim pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile oferite v-au fost de ajutor. Nu ezitați să ne contactați pentru orice întrebare sau dacă aveți nevoie de asistență suplimentară. Vă așteptăm cu drag data viitoare și nu uitați să ne adăugați la favorite!