#include "DT.h" namespace Date_and_Time { class Manage { Date_Time* pfirst; void display(const int&, Date_Time*&) const; void sort(Date_Time*); public: Manage(); ~Manage(); bool Loop(); }; } int main() { Date_and_Time::Manage m; while ( m.Loop() ); return 0; } Date_and_Time::Manage::Manage() : pfirst(NULL) { } Date_and_Time::Manage::~Manage() { Date_Time* ptemp; while ( pfirst ) { ptemp = pfirst->pnext; delete pfirst; pfirst = ptemp; } } bool Date_and_Time::Manage::Loop() { char ch; cout << "\nInserisci oggetto:\n"; cout << " 1 = Date\n"; cout << " 2 = Time\n"; cout << " 3 = Date_Time\n"; cout << " else EXIT"; cout << " ? "; cin >> ch; int id = ch-48; if ( id < 1 || id > 3 ) return false; Date_Time* pnew; int add; try { switch (id) { case 1 : cout << "Inserisci giorno, mese, anno :\n\t"; break; case 2 : cout << "Inserisci ore, minuti, secondi :\n\t"; break; default : cout << "Inserisci giorno, mese, anno, " << "ore, minuti, secondi :\n\t"; } pnew = new Date_Time(id); if ( id == 1 ) cout << "\nSomma a oggetto giorni : "; else cout << "\nSomma a oggetto secondi : "; cin >> add; if ( cin.rdstate() > 0 ) { delete pnew; throw Error(-1000000000); } if ( add < 0 ) { delete pnew; throw Error(add); } } catch (Error e) { cout << e.msg; return true; } *pnew += add; cout << "Risultato: "; pnew->write(); sort(pnew); Date_Time* pcurr = pfirst; cout << "\nLista oggetti:\n"; display(1,pcurr); display(2,pcurr); display(3,pcurr); return true; } void Date_and_Time::Manage::sort(Date_Time* pnew) { Date_Time* pprev = NULL; Date_Time* pcurr = pfirst; while ( pcurr && *pcurr < *pnew ) { pprev = pcurr; pcurr = pcurr->pnext; } if ( pprev == NULL ) pfirst = pnew; else pprev->pnext = pnew; pnew->pnext = pcurr; } void Date_and_Time::Manage::display(const int& id, Date_Time*& pcurr) const { switch( id ) { case 1 : cout << "Date : "; break; case 2 : cout << "Time : "; break; default: cout << "Date_Time : "; } bool bf = true; while ( pcurr && pcurr->ident == id ) { if ( bf ) bf = false; else cout << " "; pcurr->write(); pcurr = pcurr->pnext; } if ( bf ) cout << " (nessuno)\n"; }