Sei sulla pagina 1di 5

#include <iostream>

#include <fstream>
#include <string>

using namespace std;

class InterfataCalendar {
public:
virtual bool inTimpulSerii() = 0;
};
class IntrareCalendar {
char dataCalendar[20];
int ora;
int minute;
int secunde;
public:
IntrareCalendar() {
strcpy(this->dataCalendar, "01/01/2017");
this->ora = 12;
this->minute = 0;
this->secunde = 0;
}

IntrareCalendar(char dataCalendar[20],int ora,int minute) {


strcpy(this->dataCalendar, dataCalendar);
this->ora = ora;
this->minute = minute;
this->secunde = 0;
}

IntrareCalendar(IntrareCalendar &ic) {
strcpy(this->dataCalendar, ic.dataCalendar);
this->ora = ic.ora;
this->minute = ic.minute;
this->secunde = ic.secunde;
}

IntrareCalendar& operator =(const IntrareCalendar &ic) {


strcpy(this->dataCalendar, ic.dataCalendar);
this->ora = ic.ora;
this->minute = ic.minute;
this->secunde = ic.secunde;
return *this;
}

friend istream& operator >>(istream& in, IntrareCalendar &ic) {


cout << "Introduceti data sub forma (DD/MM/YYYY): ";
in >> ic.dataCalendar;
cout << "Introduceti ora: ";
in >> ic.ora;
cout << "Introduceti numarul de minute: ";
in >> ic.minute;
cout << "Introduceti numarul de secunde: ";
in >> ic.secunde;

return in;

}
friend ostream& operator <<(ostream& out, IntrareCalendar ic) {
out << "Data: " << ic.dataCalendar << endl;
out << "Ora: " << ic.ora <<":"<<ic.minute<<":"<<ic.secunde<<
endl<<endl;

return out;
}

void setData(char data[20]) {


strcpy(this->dataCalendar, data);
}

IntrareCalendar operator ++(int) {


IntrareCalendar t = *this;
if (t.ora == 23 && t.minute == 59) {
t.ora = 0;
t.minute = 0;
}
if (t.ora != 23 && t.minute == 59) {
t.ora = t.ora + 1;
t.minute = 0;
}
if (t.ora != 23 && t.minute < 59) {
t.minute = t.minute+1;
}

*this = t;
return t;
}

int getMinute() {
return this->minute;
}
int getOra() {
return this->ora;
}int getSecunde() {
return this->secunde;
}
};

class Eveniment:public InterfataCalendar {


protected:
const int id = 0;
IntrareCalendar data;
char* detalii;
static int nrintrari;
public:
Eveniment() :id(++nrintrari) {
this->data = IntrareCalendar();
this->detalii = new char[strlen("No Details Available")+1];
strcpy(this->detalii, "No Details Available");
}

Eveniment(int id,IntrareCalendar data) :id(id) {


this->data = data;
this->detalii = new char[strlen("No Details Available") + 1];
strcpy(this->detalii, "No Details Available");
nrintrari++;
}

Eveniment(int id, IntrareCalendar data , char* detalii) :id(id) {


this->data = data;
this->detalii = new char[strlen(detalii) + 1];
strcpy(this->detalii, detalii);
nrintrari++;
}

void setDetalii(char* detalii) {


delete this->detalii;
this->detalii = new char[strlen(detalii) + 1];
strcpy(this->detalii, detalii);
}

Eveniment operator +=(int n) {


for (int i = 0; i < n * 60; i++) {
this->data++;
}
return *this;
}

bool inTimpulSerii() {
if (this->data.getOra() > 17 && this->data.getOra() <= 23)
return true;
else throw new exception;
}

friend istream &operator >> (istream &in, Eveniment &e) {


char buffer[50];
in >> e.data;
cout << "Intruduceti detalii: ";
in >> buffer;
delete e.detalii;
e.detalii = new char[strlen(buffer) + 1];
strcpy(e.detalii, buffer);
return in;
}

friend ostream& operator << (ostream &out, Eveniment e) {


out << "ID: " << e.id<<endl;
out << "Data: " << e.data << endl;
out << "Details: " << e.detalii << endl;

return out;
}
static void salvareFisier(Eveniment* *agenda, int nrEvenimente,char*
filename, char* current) {
ofstream file;
file.open(filename, ios::app | ios::out);
if (!file.is_open())
cout << "Fisierul nu s-a deschis";
else {
file << endl << endl << current << ":" << endl;
for (int i = 0; i < nrEvenimente; i++) {
file << "Evenimentul " << i + 1 << ":" << endl;
file << *agenda[i] << endl;
}
file.close();
cout << "Datele au fost salvate" << endl;
}

operator int() {
int n;
n = 60 * this->data.getOra() + this->data.getMinute();
return n;
}
static int total() {
return nrintrari;
};
};

int Eveniment::nrintrari = 0;

class Aniversare : public Eveniment {


string nume;
public:
Aniversare(int id, IntrareCalendar data,char* detalii,string nume) {
this->data = data;
this->detalii = new char[strlen(detalii) + 1];
strcpy(this->detalii, detalii);
nrintrari++;
this->nume = nume;
}

};

void main() {
IntrareCalendar m1;
IntrareCalendar m2("23/01/2017",20, 30);
IntrareCalendar m3 = m2;
//cin >> m1;
cout << m1 << m2 << m3;
m2.setData("23/01/2017");
m3 = m1; cout << m3;
m3++;

IntrareCalendar m4 = m2++;
cout << m2 << m3 << m4;

Eveniment e1(1, m2);


Eveniment e2(2, m4, "Examen POO");
e1.setDetalii("Pregatire Examen");
e1 += 2;
cout << e1;
//cin >> e1;
// int totalMinute = (int)e1;
cout << "Total evenimente:" << Eveniment::total() << endl;

Eveniment* *agenda;
int nrEvenimente;
cout << "Nr de evenimente: ";
cin >> nrEvenimente;
agenda = new Eveniment*[nrEvenimente];
for (int i = 0; i < nrEvenimente; i++) {
cout << "Evenimentul nr. " << i + 1 << ": " << endl;
cin >> e2;
agenda[i] = new Eveniment(e2);
}

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


cout << "Evenimentul nr. " << i + 1 << ": ";
cout << *agenda[i] << endl;
}

try{if (e1.inTimpulSerii()) cout << "dadada"; }


catch (...) {
cout << "nu este seara";
}

InterfataCalendar* *ifc;
ifc = new InterfataCalendar*[3];
ifc[0] = new Aniversare(3, m3, "Ziua mea", "Claudiu");
ifc[1] = new Eveniment(e1);
ifc[2] = new Aniversare(5, m2, "asdasdadasasd", "Vasile");

delete ifc;

Eveniment::salvareFisier(agenda, nrEvenimente, "agenda.txt", "23.01.2017");


}

Potrebbero piacerti anche