Sa fie în C++, dau coroana
Răspunsuri la întrebare
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…)