Informatică, întrebare adresată de larisaciortan23, 8 ani în urmă

Sa fie în C++, dau coroana ​

Anexe:

Răspunsuri la întrebare

Răspuns de VxF
1

Răspuns:

#include <iostream>

#include <iomanip>

#include <fstream>

#include <vector>

#include <functional>

#define FISIER_DATE "farmacie.txt"

struct medicament {

   std::string denumire;

   float cantitate;

   float pret;

   std::string expira;

};

std::vector<medicament> stoc;

void afisare()

{

   std::sort(stoc.begin(), stoc.end(), [](const medicament &a, const medicament &b) -> bool { return a.pret > b.pret; });

   std::cout << std::left << std::setw(50) << "Denumire" << " | " << std::right << std::setw(10) << "Cantitate" << " | " << std::fixed << std::setw(7) << "Pret" << " | " << "Expiră" << std::endl;

   for (int i = 0; i < stoc.size(); i++) {

       std::cout << std::left << std::setw(50) << stoc[i].denumire << " | " << std::right << std::fixed << std::setw(10) << std::setprecision(2) << stoc[i].cantitate << " | " << std::fixed << std::setw(7) << std::setprecision(2) << stoc[i].pret << " | " << stoc[i].expira << std::endl;

   }

}

void stergere()

{

   // TODO

}

void aprovizionare()

{

   std::string denumire;

   std::cout << "Denumire: ";

   std::cin >> denumire;

   int gasit = -1;

   for (int i = 0; i < stoc.size(); i++) {

       if (stoc[i].denumire == denumire) {

           gasit = i;

           break;

       }

   }

   if (gasit == -1) {

       medicament nou;

       std::cout << "Medicament necunoscut, înregistrăm toate detaliile" << std::endl;

       nou.denumire = denumire;

       std::cout << "Cantitate: ";

       std::cin >> nou.cantitate;

       std::cout << "Preț: ";

       std::cin >> nou.pret;

       std::cout << "Expiră: ";

       std::cin >> nou.expira;

       stoc.push_back(nou);

   } else {

       float cantitate;

       std::cout << "Medicament cunoscut, modificăm cantitatea pe stoc" << std::endl;

       std::cout << "Cantitate achiziționată: ";

       std::cin >> cantitate;

       stoc[gasit].cantitate += cantitate;

   }

}

void vanzare()

{

   std::string denumire;

   std::cout << "Denumire: ";

   std::cin >> denumire;

   int gasit = -1;

   for (int i = 0; i < stoc.size(); i++) {

       if (stoc[i].denumire == denumire) {

           gasit = i;

           break;

       }

   }

       

   if (gasit == -1) {

       std::cout << "EROARE: medicament necunoscut" << std::endl;

       return;

   }

   float cantitate;

   std::cout << "Cantitate: ";

   std::cin >> cantitate;

   if (stoc[gasit].cantitate < cantitate) {

       std::cout << "EROARE: stoc insuficient" << std::endl;

       return;

   }

   stoc[gasit].cantitate -= cantitate;

}

struct comanda {

   std::string denumire;

   std::function<void(void)> functie;

};

std::vector<comanda> listaComenzi = {

   {denumire: "Afișarea medicamentelor, în ordinea descrescătoare al prețului", functie: afisare},

   {denumire: "Ștergerea medicamentelor care expiră până la sfârșitul lunii curente", functie: stergere},

   {denumire: "Aprovizionare cu un medicament", functie: aprovizionare},

   {denumire: "Operația de vânzare", functie: vanzare},

   {denumire: "Părăsire aplicație"},

};

void incarcare()

{

   std::ifstream fisier(FISIER_DATE);

   int bucati = 0;

   if (fisier.is_open()) {

       fisier >> bucati;

       fisier.get();

       stoc.reserve(bucati);

       for (int i = 0; i < bucati; i++) {

           medicament nou;

           std::getline(fisier, nou.denumire, '\t');

           fisier >> nou.cantitate >> nou.pret >> nou.expira;

           fisier.get();

           stoc.push_back(nou);

       }

       fisier.close();

   }

       

}

       

void salvare()

{      

   std::ofstream fisier(FISIER_DATE);

   if (fisier.is_open()) {

       fisier << stoc.size() << std::endl;

       for (int i = 0; i < stoc.size(); i++) {

           fisier << stoc[i].denumire << "\t" << stoc[i].cantitate << "\t" << stoc[i].pret << "\t" << stoc[i].expira << std::endl;

       }

       fisier.close();

   }

}

void meniu()

{

   int alegere;

   while (true) {

       for (int i = 0; i < listaComenzi.size(); i++) {

           std::cout << i + 1 << ". " << listaComenzi[i].denumire << std::endl;

       }

       std::cout << "Număr comandă: ";

       

       std::cin >> alegere;

       

       if (alegere > 0 && alegere <= listaComenzi.size()) {

           if (! listaComenzi[alegere - 1].functie) {

               break;

           }

           std::cout << std::endl << listaComenzi[alegere - 1].denumire << std::endl;

           std::cout << std::string(listaComenzi[alegere - 1].denumire.length(), '=') << std::endl;

           listaComenzi[alegere - 1].functie();

       } else {

           std::cout << "EROARE: alegere invalidă" << std::endl << std::endl;

       }

   }

}

   

int main()

{  

   incarcare();

   meniu();

   salvare();

}

Explicație:

Funcţia de ștergere rămâne de implementat. Îmi pare rău, dar veci n-am avut treabă cu dată în C++. (Eventual trișează un pic: în loc să afli luna curentă prin funcţii, solicită ca input de la utilizator…)

Alte întrebări interesante