#include #include #include #include "datum.h" using namespace std; /********************************************************************************/ /*Funktion initialsiert die Übergabeparameter */ /********************************************************************************/ void datum::initialisieren(short t, short m, short j) { tag = t; monat = m; jahr = j; }; /********************************************************************************/ /*Berechnung der Systemzeit */ /********************************************************************************/ void datum::akt_datum() { //Ersetzt das Datum durch das aktuelle Datum struct tm *t; time_t ltime; //Hole die Zeit in Sekunden seit dem 1.1.1970 time(<ime); //Konvertiere in die Struktur tm t = localtime(<ime); //Weise das aktuelle Datum zu initialisieren(t->tm_mday, t->tm_mon + 1, t->tm_year + 1900); }; /********************************************************************************/ /*Funktion gibt das Datum auf der Konsole aus */ /********************************************************************************/ void datum::ausgabe() { datum a; //Gibt das Datum mit Punkt getrennt aus cout << tag << "." << monat << "." << jahr; }; short datum::alter() { //Berechnung des Alters aus dem Datum //Falls das Datum neuer als das aktuelle ist, //wird ein negativer Wert zurückgegeben. datum a; //aktuelles Datum a.akt_datum(); if ((monat * 100 + tag) > (a.monat * 100 + a.tag)) return (a.jahr - jahr - 1); else return (a.jahr - jahr); }; /********************************************************************************/ /*Funktion berechnet die Tage seit dem 1.1.1970 bis zu einem definierbarem Datum*/ /********************************************************************************/ void datum::ermittle_tage() { int tag = 1, monat, jahr, summe_tage = 0; int wochentage = 7, int_quotient = 0; double differenz = 0.0, double_quotient; datum ein_datum, neues_datum; /*Initialisiere das Objekt ein_datum neu*/ ein_datum.initialisieren(1, 1, 1970); cout << "\n\nNeues Datum eingeben: "; cout << "\nTag: "; cin >> tag; cout << "Monat: "; cin >> monat; cout << "Jahr: "; cin >> jahr; /*Initialisiere ein neues Opbjekt neues_datum mit einem def. Datum*/ neues_datum.initialisieren(tag, monat, jahr); /*Addition der Tage der vollen Jahre*/ while (ein_datum.jahr != neues_datum.jahr && (neues_datum.jahr - ein_datum.jahr) >0) { if (ein_datum.monat == 1) { summe_tage += 31; ein_datum.monat ++; } else if (ein_datum.monat == 2) { /*Abfrage ob Schaltjahr vorliegt*/ if (!(ein_datum.jahr%4) && (ein_datum.jahr%100) || (!ein_datum.jahr%400)) { summe_tage += 29; } else { summe_tage += 28; } ein_datum.monat ++; } else if (ein_datum.monat == 3) { summe_tage += 31; ein_datum.monat ++; } else if (ein_datum.monat == 4) { summe_tage += 30; ein_datum.monat ++; } else if (ein_datum.monat == 5) { summe_tage += 31; ein_datum.monat ++; } else if (ein_datum.monat == 6) { summe_tage += 30; ein_datum.monat ++; } else if (ein_datum.monat == 7) { summe_tage += 31; ein_datum.monat ++; } else if (ein_datum.monat == 8) { summe_tage += 31; ein_datum.monat ++; } else if (ein_datum.monat == 9) { summe_tage += 30; ein_datum.monat ++; } else if (ein_datum.monat == 10) { summe_tage += 31; ein_datum.monat ++; } else if (ein_datum.monat == 11) { summe_tage += 30; ein_datum.monat ++; } else if (ein_datum.monat == 12) { summe_tage += 31; ein_datum.jahr ++; ein_datum.monat = 1; } } for (ein_datum.monat = 1; ein_datum.monat <= neues_datum.monat; ein_datum.monat ++) { if (ein_datum.monat == 2) { summe_tage += 31; } else if (ein_datum.monat == 3) { /*Abfrage ob Schaltjahr vorliegt*/ if (!(ein_datum.jahr%4) && (ein_datum.jahr%100) || (!ein_datum.jahr%400)) { summe_tage += 29; } else { summe_tage += 28; } } else if (ein_datum.monat == 4) { summe_tage += 31; } else if (ein_datum.monat == 5) { summe_tage += 30; } else if (ein_datum.monat == 6) { summe_tage += 31; } else if (ein_datum.monat == 7) { summe_tage += 30; } else if (ein_datum.monat == 8) { summe_tage += 31; } else if (ein_datum.monat == 9) { summe_tage += 31; } else if (ein_datum.monat == 10) { summe_tage += 30; } else if (ein_datum.monat == 11) { summe_tage += 31; } else if (ein_datum.monat == 12) { summe_tage += 30; } else if (ein_datum.monat == 13) { summe_tage += 31; } } if (neues_datum.tag > ein_datum.tag) { summe_tage += (neues_datum.tag - ein_datum.tag); } /*Ausgabe der Zeitdifferenz in Tagen*/ cout << "\nZeitdifferenz vom "; ein_datum.initialisieren(1, 1, 1970); ein_datum.ausgabe(); cout << " bis zum "; neues_datum.ausgabe(); cout << " \nsind: " << summe_tage << " Tage \n\n"; /*Berechnung Tag des Datums*/ double_quotient = (double) summe_tage / wochentage; //Typumwandlung in double int_quotient = summe_tage / wochentage; differenz = (double_quotient - int_quotient) * wochentage; /*Der 1.1.1970 ist ein Donnerstag*/ cout << "Differenz" << differenz; if (differenz == 0) { cout << "Der "; neues_datum.ausgabe(); cout <<" ist ein Donnerstag"; } else if (differenz == 1) { cout << "Der "; neues_datum.ausgabe(); cout <<" ist ein Freitag"; } else if (differenz == 2) { cout << "Der "; neues_datum.ausgabe(); cout <<" ist ein Samstag"; } else if (differenz == 3) { cout << "Der "; neues_datum.ausgabe(); cout <<"ist ein Sonntag"; } else if (differenz == 4) { cout << "Der "; neues_datum.ausgabe(); cout <<"ist ein Montag"; } else if (differenz == 5) { cout << "Der "; neues_datum.ausgabe(); cout <<"ist ein Dienstag"; } else if (differenz == 6) { cout << "Der "; neues_datum.ausgabe(); cout <<"ist ein Mittwoch"; } }; int main(int argc, char *argv[]) { /*Erzeugung der Objekte...*/ datum ein_datum, akt_datum, neues_datum, differenz; /*Setze ein_datum auf den 9.9.1996*/ ein_datum.initialisieren(9, 9, 1996); /*Setze aktuelles Datum auf das aktuelle Datum*/ akt_datum.akt_datum(); cout <<"\nDas am "; /*Ausgabe des aktuellen Datums auf der Konsole*/ ein_datum.ausgabe(); cout <<" erzeugte Objekt \nhat am "; akt_datum.ausgabe(); cout <<" ein Alter von " << ein_datum.alter(); cout << " Jahren.\n"; /*Ermittlung der Differenz zwischen zwei Daten in Tagen*/ differenz.ermittle_tage(); //differenz.ermittle.tag(); system("PAUSE"); return EXIT_SUCCESS; }