1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
// Kapitel 5 - Programm 11 - DATUM.CPP
// Diese Datei enthält die Implementation der Klasse Datum.
#include <stdio.h> // Prototyp für sprintf
#include <time.h> // Prototypen für das aktuelle Datum
#include "datum.h"
char Datum::Format; // Definition des statischen Datenelements
char Datum::AusStrom[25]; // Definition der statischen Zeichenkette
// Konstruktor - Setze das Datum auf das aktuelle Datum und das Format
// auf 1
Datum::Datum(void)
{
time_t ZeitDatum;
struct tm *AktuellesDatum;
ZeitDatum = time(NULL); // Systemaufruf
AktuellesDatum = localtime(&ZeitDatum); // Systemaufruf
Monat = AktuellesDatum->tm_mon + 1;
Tag = AktuellesDatum->tm_mday;
Jahr = AktuellesDatum->tm_year + 1900;
Format = 1;
}
// Setze das Datum auf diese Parameter
// Rückgabewert = 0 ---> Alle Daten ok
// Rückgabewert = 1 ---> Etwas außerhalb des Erlaubten
int Datum::SetzeDatum(int EinMonat, int EinTag, int EinJahr)
{
int Temp = 0;
int MaxTage;
// Die Einschränkung beim Jahr ist willkürlich
if (EinJahr < 1500) // Sicherstellen, daß das Jahr zwischen
{ Jahr = 1500; // 1500 und 2200 liegt
Temp = 1;
}
else
{
if (EinJahr > 2200)
{
Jahr = 2200;
Temp = 1;
}
else
{
Jahr = EinJahr;
}
}
if(EinMonat < 1) // Sicherstellen, daß das Monat zwischen
{ // 1 und 12 liegt
Monat = Temp = 1;
}
else
{
if (EinMonat > 12)
{
Monat = 12;
Temp = 1;
}
else
{
Monat = EinMonat;
}
}
MaxTage = TageImMonat();
if (EinTag < 1) // Sicherstellen, daß der Tag zwischen
{ // 1 und MaxTage liegt
Tag = Temp = 1;
}
else
{
if (EinTag > MaxTage)
{
Tag = MaxTage;
Temp = 1;
}
else
{
Tag = EinTag;
}
}
return Temp;
}
static char *MonatsName[13] = {" ", "Jan", "Feb",
"Mar", "Apr", "Mai", "Jun", "Jul", "Aug",
"Sep", "Okt", "Nov", "Dez"};
// Gib Jan Feb Mar Apr etc. zurück
char *Datum::HoleMonatsName(void)
{
return MonatsName[Monat];
}
// Gib eine ASCII-Z Zeichenfolge mit dem gespeicherten Fromat zurück
// Format = 1 Aug 29, 1991
// Format = 2 29.8.91
// Format = 3 29.8.1991
// Format = 4 29 Aug 1991 Militärsiche Zeit
// Format = ? Alles andere wird als Format 1 interpretiert
char *Datum::HoleFormatiertesDatum(void)
{
switch (Format)
{ // Diese Ausgabe nimmt an, dass das Jahr
// zwischen 1970 und 2069 liegt
case 2 : sprintf(AusStrom, "%02d.%02d.%02d",
Tag, Monat, Jahr - 1970);
break;
case 3 : sprintf(AusStrom, "%02d.%02d.%04d",
Tag, Monat, Jahr);
break;
case 4 : sprintf(AusStrom, "%d %s %04d",
Tag, MonatsName[Monat], Jahr);
break;
case 1 : // Weiter zu default
default : sprintf(AusStrom, "%s %d, %04d",
MonatsName[Monat], Tag, Jahr);
break;
}
return AusStrom;
}
int Tage[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// Da dies im privaten Teil der header-Datei deklariert wurde
// kann es nur innerhalb der Klasse verwendet werden.
// Es ist vor der Außenwelt versteckt.
int Datum::TageImMonat(void)
{
if (Monat != 2)
return Tage[Monat];
if (Jahr % 4) // Kein Schaltjahr
return 28;
if (Jahr % 100) // Schaltjahr
return 29;
if (Jahr % 400) // Kein Schaltjahr
return 28;
return 29; // Schaltjahr
}
|
Copyright © 1997, 1998, 2001-2005 Heinz Tschabitscher - Letzte Änderung 13. September 2005
Heinz Tschabitscher - cpp@ladedu.com | Datenschutz | Impressum - Kommentare, Kritik, Anregungen, Fragen?