C++ obiektowe Kalendarz

0

Mam taki rpoblem gdyz dostalem do zrobienia projekt na studia a po pierwsze nie umiem jeszcze dobrze projektowac a po drugie nie rozumiem w ogóle o co chodzi w tym projekcie co mam tu napisac Tresc zadania jest następujaca:

Napisać klasę przechowującą informację o dacie.
Klasa powinna mieć metode Kalendarz Kalendarz::dodajDni(int d) - zwracającą datę o d dni późniejszą.
Powinno być możliwe wypisywanie klasy na wyjście standardowe za pomocą operatora <<.
Napisać program demonstrujący użycie napisanej klasy.
Każdy program powinien być zaopatrzony w makefile.
Program powinien kompilować się bez ostrzeżeń na kompilatorze CC.
Programy pownne być pisane obiektowo - np. ograniczyć używanie globalnych funkcji i zmiennych - zamiast czego używać składowych klasy i metod klasy.

Prosilbym o jakakolwiek pomoc... Czy jakis przykladowy rpojekcik podobny do tego czy po prostu mniej wiecej o wyjasnienie o co chodzi w tym projekcie;/

0

Jeśli to pisał jakiś profesor, to winszuję :/
Ja rozumiem że masz mieć klasę Kalendarz, która w polu prywatnym trzyma datę (czemu klasa nie ma się nazywać Data, czy jakoś tak nie rozumiem). W szczególności mam mieć w tej klasie jedną metodę publiczną dodajDni, która ma jasno napisane co ma robić. Do tego dla klasy Kalendarz masz przeciążyć operator << aby można było obiekt tej klasy rzucić na standardowe wyjście.
Co jest niejasne?

0
  1. Tworzysz klasę Kalendarz.
  2. Dajesz w niej składowe określające dzień, miesiąc, rok.
  3. Tworzysz dla klasy dwa konstruktory: domyślny oraz z wartościami inicjującymi.
  4. Przeciążasz operator << w taki sposób by data wypisywała się na przykład w postaci: "dzień.miesiąc.rok". Poszukaj w google. Drugi link dla frazy "c++ przeciążanie operatorów" wygląda sensownie.
  5. Dodajesz do tego metodę publiczną, która zależnie od przechowywanej daty wypisuje datę za 5 dni. Tzn. dla 11.04.2011 wyświetli 16.04.2011, a dla 29.04.2011 datę 4.05.2011.
  6. Rozumiem, że początkujący jesteś, ale bez przesady :) Projektowania w tym nie ma ;)
0

Czekaj, los ci się uśmiechnął :). Nie mam co robić, więc ci zrobię klasę :P.
EDIT: Zrobione! Są błedy, ale prowizorycznie to jest.

#ifndef DLA_GOSCIA_H_INCLUDED
#define DLA_GOSCIA_H_INCLUDED
#include <ctime>
class Kalendarz
{
    tm Czas;// bez indefikatora, wiec prywatne
    friend ostream& operator<< (ostream&, Kalendarz);
    enum TrybWyswietlania
    {
        RRRRMMDD = 1,
        DDMMRRRR = 2,
        MMDDRRRR = 3
    } Wyswietlanie;
    public:
        Kalendarz()
        {
            Czas.tm_sec = 0;
            Czas.tm_min = 0;
            Czas.tm_hour = 0;
            Czas.tm_mday = 0;
            Czas.tm_mon = 0;
            Czas.tm_year = 0;
            Wyswietlanie = DDMMRRRR;
        }
        Kalendarz(int dzien, int miesiac, int rok)
        {
            Czas.tm_sec = 0;
            Czas.tm_min = 0;
            Czas.tm_hour = 0;
            Czas.tm_mday = dzien;
            Czas.tm_mon = miesiac;
            Czas.tm_year = rok;
            Wyswietlanie = DDMMRRRR;
        }
        Kalendarz dodajDni(int d)
        {
            Kalendarz Temp = *this;
            Temp.Czas.tm_mday += d;
            return Temp;
        }
        Kalendarz ZmienWyswietlanie(int Typ)
        {
            Wyswietlanie = Typ;
        }
};
ostream& operator<<(ostream& Ob, Kalendarz Ob2)
{
    switch(Ob2.Wyswietlanie)
    {
        case DDMMRRRR: Ob << Ob2.Czas.tm_mday << '.' <<  Ob2.Czas.tm_mon << '.' << Ob2.Czas.tm_year;
                       break;
        case MMDDRRRR: Ob << Ob2.Czas.tm_mon << '.' << Ob2.Czas.tm_mday << '.' << Ob2.Czas.tm_year;
                       break;
        case RRRRMMDD: Ob << Ob2.Czas.tm_year; << '.' <<  Ob2.Czas.tm_mon << '.' << Ob2.Czas.tm_mday;
                       break;
    }
    return Ob;
}

#endif // DLA_GOSCIA_H_INCLUDED
 

1 użytkowników online, w tym zalogowanych: 0, gości: 1