Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Program źle dodaje miesiące i dni

Ostatnio zmodyfikowano 2015-11-29 21:13
Autor Wiadomość
Opsowns
Temat założony przez niniejszego użytkownika
Program źle dodaje miesiące i dni
» 2015-11-29 20:21:17
Witam mam problem tego typu, że program nie przeskakuje mi na kolejny miesiąc jak wpisze liczbę za dużą i z dniami jest tak samo.

C/C++
int Date::ilosc;
Date Date::_default( 1, 1, 1992 );
Date::Date( int a, int b, int c )
{
    ilosc++;
    if( a > 0 && a <= 31 ) day = a;
    else day = 1;
   
    if( b > 0 && b <= 12 ) month = b;
    else month = 1;
   
    if( c > 0 ) year = c;
    else year = 1900;
   
}


Date::~Date( void )
{
    ilosc--;
}

Date::Date( const Date & d )
{
    ilosc++;
    day = d.day;
    month = d.month;
    year = d.year;
}

void Date::display( char * nazwa ) {
    string month1;
    switch( month )
    {
    case 1:
        month1 = "styczen";
        break;
    case 2:
        month1 = "luty";
        break;
    case 3:
        month1 = "marzec";
        break;
    case 4:
        month1 = "kwiecien";
        break;
    case 5:
        month1 = "Maj";
        break;
       
    case 6:
        month1 = "Czerwiec";
        break;
       
    case 7:
        month1 = "Lipiec";
        break;
       
    case 8:
        month1 = "Sierpien";
        break;
       
    case 9:
        month1 = "Wrzesien";
        break;
       
    case 10:
        month1 = "Pazdziernik";
        break;
       
    case 11:
        month1 = "Listopad";
        break;
       
    case 12:
        month1 = "Grudzien";
        break;
       
    }
    cout << nazwa << ": " << day << "." << month1.c_str() << "." << year << endl << endl; // d1: 1.1.2005
   
}
Date & Date::addDay( int ile )
{
    for( day; day <= 31; day++ )
         this->day = this->day + ile;
   
    if( this->day >= 31 )
    {
        this->day -= 32;
    }
   
    return * this;
}
Date & Date::addYear( int ile )
{
    this->year = year + ile;
    return * this;
   
}

Date & Date::addMonth( int ile )
{
    this->month = month + ile;
    if( this->month >= 12 && this->day >= 1 )
    {
        this->month -= 12;
    }
    return * this;
}
Date & Date::addDate( const Date & d )
{
    this->day += d.day;
    this->year += d.year;
    this->month += d.month;
   
    return * this;
}
P-141121
Pawlo3
Masz poprawioną wersję klasy.
» 2015-11-29 21:13:15
C/C++
#include <iostream>
using namespace std;
#include <conio.h>
class Date
{
private:
    int month;
    int day;
   
public:
    Date( void )
    {
        month = 1;
        day = 1;
    }
    void Date::AddDay( void )
    {
        day++;
        if( month == 1 && day == 32 )
        {
            day = 1;
            AddMonth();
        }
        else if( month == 2 && day == 30 )
        {
            day = 1;
            AddMonth();
        }
        else if( month == 3 && day == 32 )
        {
            day = 1;
            AddMonth();
        }
        else if( month == 4 && day == 31 )
        {
            day = 1;
            AddMonth();
        }
        else if( month == 5 && day == 32 )
        {
            day = 1;
            AddMonth();
        }
        else if( month == 6 && day == 31 )
        {
            day = 1;
            AddMonth();
        }
        else if( month == 7 && day == 32 )
        {
            day = 1;
            AddMonth();
        }
        else if( month == 8 && day == 32 )
        {
            day = 1;
            AddMonth();
        }
        else if( month == 9 && day == 31 )
        {
            day = 1;
            AddMonth();
        }
        else if( month == 10 && day == 32 )
        {
            day = 1;
            AddMonth();
        }
        else if( month == 11 && day == 31 )
        {
            day = 1;
            AddMonth();
        }
        else if( month == 12 && day == 32 )
        {
            day = 1;
            AddMonth();
        }
    }
    void AddMonth( void )
    {
        month++;
        if( month >= 13 )
             month = 1;
       
    }
    void DisplayDate( char * str )
    {
        cout << str << ": " << day << " ";
        switch( month )
        {
        case 1:
            cout << "Stycznia";
            break;
        case 2:
            cout << "Lutego";
            break;
        case 3:
            cout << "Marca";
            break;
        case 4:
            cout << "Kwietnia";
            break;
        case 5:
            cout << "Maja";
            break;
        case 6:
            cout << "Czerwca";
            break;
        case 7:
            cout << "Lipca";
            break;
        case 8:
            cout << "Sierpnia";
            break;
        case 9:
            cout << "Wrzesnia";
            break;
        case 10:
            cout << "Pazdziernika";
            break;
        case 11:
            cout << "Listopada";
            break;
        case 12:
            cout << "Grudnia";
            break;
        }
        cout << "\n";
        return;
    }
    //End of class "Date"
};

int main( void )
{
    Date dt;
    dt.DisplayDate( "Data" );
    for( int licz = 1; licz < 40; licz++ )
    {
        dt.Date::AddDay();
        dt.DisplayDate( "Data" );
    }
    dt.AddMonth();
    dt.DisplayDate( "Data" );
    getch();
    return 0;
}
Niestety, przegapiłem, że w Twej klasie jest rok. Poprawię to jutro.
Niestety, kiedy definiowałem funkcje poza klasą był problem z dostępem do składowych prywatnych. Olałem zasadę języka, że funkcje w ciele klasy są typu inline.
P-141126
« 1 »
  Strona 1 z 1