Buna ziua, se pricepe cineva sa faca aplicatia aceasta? Nu prea ma pricep :) Ofer 84 puncte
Răspunsuri la întrebare
#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
}
Incearca sa copiezi de aici:
https://pastebin.com/JYMgdEPR