Informatică, întrebare adresată de Andreilaw, 9 ani în urmă

Buna ziua, se pricepe cineva sa faca aplicatia aceasta? Nu prea ma pricep :) Ofer 84 puncte

Anexe:

JolieJulie: Nu se intelege nimic...
JolieJulie: Cam neclara poza

Răspunsuri la întrebare

Răspuns de CinevaFaraNume
1

#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

}


CinevaFaraNume: Am facut-o cu clase si alocare dinamica.
Andreilaw: Iti multumesc mult <3
CinevaFaraNume: In mare parte am testat aplicatia si pare sa mearga. Daca exista probleme te rog sa imi spui.
Andreilaw: Ok, o sa iti dau mesaj daca e ceva :)
Andreilaw: Problema e ca da erorile astea: https://imgur.com/a/n8wHCYx
CinevaFaraNume: Ce compilator folosesti?
CinevaFaraNume: Problema aia apare cand compilezi cod copiat.

Incearca sa copiezi de aici:
https://pastebin.com/JYMgdEPR
CinevaFaraNume: Sau scrie din nou liniile cu erori
Andreilaw: Mersi mult <3
Alte întrebări interesante