Kapitel 6 - Programm 16 - ZEIT.CPP

zurück…

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
    // Kapitel 6 - Programm 16 - ZEIT.CPP

#include <stdio.h>      // Für die Funktion sprintf
#include <time.h>       // Für die Funktionen time & localtime
#include "zeit.h"       // Für den Kopf der Klasse

char Tageszeit::Format;  // Definition des statischen Elementes
char Tageszeit::AusZeichenkette[25];  // Definition der Zeichenkette

// Konstruktor - Setze aktuelle Zeit und
//               Format auf 1
Tageszeit::Tageszeit(void)
{
    time_t ZeitDatum;
    struct tm *AktuelleZeit;

    ZeitDatum       = time(NULL);
    AktuelleZeit    = localtime(&ZeitDatum);
    Stunde          = AktuelleZeit->tm_hour;
    Minute          = AktuelleZeit->tm_min;
    Sekunde         = AktuelleZeit->tm_sec;

    Format          = 1;
}

// Setze die Zeit auf Eingabewerte
//  Rückgabe = 0 ---> Daten sind ok
//  Rückgabe = 1 ---> Etwas außerhalb des Limits
int Tageszeit::SetzeZeit(void)     {return SetzeZeit(0, 0, 0); }
int Tageszeit::SetzeZeit(int H)    {return SetzeZeit(H, 0, 0); }
int Tageszeit::SetzeZeit(int H, int M) {return SetzeZeit(H, M, 0); }
int Tageszeit::SetzeZeit(int EinStunde, int EinMinute, int EinSekunde)
{
    int Fehler = 0;

    if (EinStunde < 0)
    {
        EinStunde = 0;
        Fehler = 1;
    }
    else if (EinStunde > 59)
    {
        EinStunde = 59;
        Fehler = 1;
    }
    Stunde = EinStunde;

    if (EinMinute < 0)
    {
        EinMinute = 0;
        Fehler = 1;
    }
    else if (EinMinute > 59)
    {
        EinMinute = 59;
        Fehler = 1;
    }
    Minute = EinMinute;

    if (EinSekunde < 0)
    {
        EinSekunde = 0;
        Fehler = 1;
    }
    else if (EinSekunde > 59)
    {
        EinSekunde = 59;
        Fehler = 1;
    }
    Sekunde = EinSekunde;

    return Fehler;
}

// Gib eine ASCII-Z Zeichenkette gemäß Ausgabeformat zurück
//  Format = 1    13:23:12
//  Format = 2    13:23
//  Format = 3     1:23 PM
char *Tageszeit::HoleFormatierteZeit(void)
{
    switch (Format)
    {
        case 2  : sprintf(AusZeichenkette, "%2d:%02d", Stunde, Minute);
                  break;

        case 3  : if (Stunde == 0)
                      sprintf(AusZeichenkette, "12:%02d AM", Minute);
                  else if (Stunde < 12)
                      sprintf(AusZeichenkette, "%2d:%02d AM", Stunde, Minute);
                  else if (Stunde == 12)
                      sprintf(AusZeichenkette, "12:%02d PM", Minute);
                  else
                      sprintf(AusZeichenkette, "%2d:%02d PM",
                              Stunde - 12, Minute);
                  break;

        case 1  : // weiter zum Standard, Standardausgabe ist also immer 1
        default : sprintf(AusZeichenkette, "%2d:%02d:%02d",
                          Stunde, Minute, Sekunde);
                  break;
    }

    return AusZeichenkette;
}

zurück…