Sunteți pe pagina 1din 4

#include<iostream>

#include<string>
#include<fstream>
using namespace std;

class Eveniment {
private:
int nrPers;
string locatie;
float pretBilet;

public:
//metode accesor
int getNrpers() {
return this->nrPers;
}

string getLocatie() {
return this->locatie;
}

//set impreuna cu validarea input-ului


void setNrPers(int nrPersNou) {
//se actualizeaza nr de pers DOAR DACA primeste o valoare > 0
if (nrPersNou > 0)
this->nrPers = nrPersNou;
}

float getPretBilet() {
return this->pretBilet;
}

Eveniment() {
this->nrPers = 0;
this->locatie = "FARA LOCATIE";
this->pretBilet = 0;
}
Eveniment(int nrPers, string locatie, float pretBilet) {
this->nrPers = nrPers;
this->locatie = locatie;
this->pretBilet = pretBilet;
}

Eveniment(const Eveniment& e) {
this->nrPers = e.nrPers;
this->locatie = e.locatie;
this->pretBilet = e.pretBilet;
}

Eveniment& operator=(const Eveniment& e) {


this->nrPers = e.nrPers;
this->locatie = e.locatie;
this->pretBilet = e.pretBilet;
return *this;
}
//afisarea fisier text; functie pentru scrierea unui eveniment text
//se foloseste obj OFSTREAM
friend ofstream& operator<<(ofstream& fOut, const Eveniment& e) {
fOut << "\n" << e.nrPers;
fOut << "\n" << e.locatie;
fOut << "\n" << e.pretBilet;
return fOut;
}
//functie pentru citire a unui eveniment dintr un fisier deoarece avem
ifstream
//fara const la citire; la citire se modifica e in functie de ce e in
fisier=>fara const
friend ifstream& operator>>(ifstream& fIn, Eveniment & e) {
fIn >> e.nrPers;
fIn >> e.locatie;
fIn >> e.pretBilet;
return fIn;
}
//functie pt scrierea unui eveniment la consola
//ostream-> out stream(consola)
//la afisare nu se modifica e-ul, el se foloseste pt a fi afisat
friend ostream& operator<<(ostream& out, const Eveniment& e) {
out << "\nNr pers: " << e.nrPers;
out << "\nLocatie ev: " << e.locatie;
out << "\nPret bilet: " << e.pretBilet;
return out;
}
};

int main() {
//DECLARARE FISIER IN CARE SE VA SCRIE
//ofstream-> out file stream
ofstream g("evenimente.txt");

Eveniment e1(10, "locatie1", 12.5);


Eveniment e2(20, "locatie2", 25.5);
//declarare vector alocat static cu maxim 10 obiecte de tip Eveniment
Eveniment ve[10];
//incarcarea vectorului pe primele 2 pozitii
ve[0] = e1;
ve[1] = e2;
//afisare evenimente din vector la consola
//cout << ve[0];
for (int i = 0; i < 2; i++)
cout << ve[i];
cout << "\n**********(1)*************";

//scriere vector evenimente in fisier


int nrEvenimente = 2;
g << nrEvenimente;
for (int i = 0; i < 2; i++)
g << ve[i];

//citire vector evenimente din fisier text


int nrE;
//ifstream-> input file stream
ifstream f("evenimente2.txt");
//citire nr evenimente din fisier
f >> nrE;
//declarare vector alocat dinamic
Eveniment *vectorEvenimente;
//alocare zona de memorie in functie de nrE citit din fisier
vectorEvenimente = new Eveniment[nrE];
//trebuie citite elem din fisier si bagate in vector
for (int i = 0; i < nrE; i++)
f >> vectorEvenimente[i]; //se preia din f si se introduce in vector pe
pozitia i

//afisare vector cu elemente eveniment preluate din fisier


//verificare daca s a citit corect din fisierb
cout << "\nAfisare vector evenimente citit din fisier text";
cout << "\nNr evenimente: " << nrE;
for (int i = 0; i < nrE; i++)
cout << vectorEvenimente[i];

//tehnici de filtrare
//avem un vector de evenimente si vreau sa generez diverse rapoarte
//1.sa se genereze un fisier care contine numele locatiei acelor evenimente
cu minim 20 persoane
Eveniment v2[100]; //static (declarare si alocare de maxim de 100 pozitii)
Eveniment* v3; //vector dinamic
int nr = 6; //avem 6 evenimente
v3 = new Eveniment[nr];
Eveniment ee1(30, "locatie3", 14.5);
Eveniment ee2(100, "locatie4", 20.5);
Eveniment ee3(50, "locatie5", 21.5);
Eveniment ee4(40, "locatie6", 101.5);
Eveniment ee5(30, "locatie7", 25.5);
Eveniment ee6(15, "locatie8", 14.5);
v3[0] = ee1;
v3[1] = ee2;
v3[2] = ee3;
v3[3] = ee4;
v3[4] = ee5;
v3[5] = ee6;

//1.sa se genereze un fisier care contine numele locatiei acelor evenimente


cu minim 20 persoane
ofstream g2("Raport1.txt");
g2 << "\nLista locatiilor cu minim 20 de persoane este: ";
for (int i = 0; i < nr; i++) {
if (v3[i].getNrpers() >= 20)
g2 << v3[i].getLocatie() << endl;
}

//2.Sa se genereze raport cu nr de evenimente care au un pret sub 30 lei.


ofstream g3("Raport2.txt");
g3 << "\nNr de evenimente cu un pret sub 30 de lei este:";
int ct = 0; //ct= contor care mi spune cate sunt bune
for (int i = 0; i < nr; i++) {
if (v3[i].getPretBilet() < 30)
ct++; //ct = ct+1, imi aduna 1 cate 1 care sunt bune
}
g3 << ct;

//NU UIT: la sfarsit sa inchid toate fisierele folosite


g.close();
f.close();
g2.close();
g3.close();
}

S-ar putea să vă placă și