我的日期类

c++面向对象第一个超过100行的代码

    #include<iostream>
    #include <iomanip>
    using namespace std;
    int const rmonthDay[12]={31,29,31,30,31,30,31,31,30,31,30,31};
    int const monthDay[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    char* const weekName[7]={"Sun","Mon","Tue","Wed","Thu","Fri","Sta"};
    char* const monthName[12]={"Jan","Feb","Mar","Api","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
    class Date
    {
    private:
        int year,month,day;
        int  isLeapYear()
        {
            return year%400||(year%4==0&&year%100!=0);
        }
    public:
        Date(int nyear=1,int nmonth=1,int nday=1);
        Date(Date &a);
        ~Date();
        void setYear(int nyear);
        int getYear();
        void setMonth(int nmonth);
        int getMonth();
        void setDay(int nday);
        int getDay();
        void  tomorrow();
        void  yesterday();
        void printMonthCalendar();
        void  chineseFormat();
        void  americaformat();
        int  weekDay();
    };
    Date::Date(int nyear,int nmonth,int nday)
    {
        year=nyear;
        month=nmonth;
        day=nday;
        cout<<"Constructor run"<<endl;
    }
    Date::Date(Date &a)
    {
        year=a.year;
        month=a.month;
        day=a.day;
        cout<<"CopyConstructor run"<<endl;
    }
    Date::~Date()
    {
        cout<<"Destructor run"<<endl;
    }
    void Date::setYear(int nyear)
    {
        year=nyear;
    }
    int Date::getYear()
    {
        return year;
    }
    void Date::setMonth(int nmonth)
    {
        if(nmonth<1)
        month=1;
        else if(nmonth>12)
        month=12;
        else
        month=nmonth;
    }
    int Date::getMonth()
    {
        return month;
    }
    void Date::setDay(int nday)
    {
        if(nday>=monthDay[month-1])
        day=monthDay[month-1];
        else if(nday<1)
        day=1;
        else
        day=nday;
    }
    int Date::getDay()
    {
        return day;
    }
    void  Date::tomorrow()
    {
        if(day==monthDay[month-1])
        {
        day=1;
        if(month!=12)
        month=month+1;
        else
        month=1;
        }
        else
        day=day+1;
    }
    void  Date::yesterday()
    {
         if(day==1)
        {
        if(month!=1)
        {
        month=month-1;
        }
        else
        month=12;
        day=monthDay[month-1];
        }
        else
        day=day-1;
    }
    
    void Date::printMonthCalendar( )
    {
        int t,i,j=0,weekday;
        cout<<"SunMonTueWedThuFriSta"<<endl;
        weekday=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400+1)%7;
        t=weekday;
        while(j<t)
        {
        cout<<setw(3)<<" ";
        j++;
        }
        if(isLeapYear())
        {
        for(i=1,t=t+1;i<=rmonthDay[month-1];i++,t++)
        {
            cout<<setiosflags(ios::right)<<setw(3)<<i;
            if(t%7==0)
            cout<<endl;
        }
        }
        else
        {
            for(i=1,t=t+1;i<=monthDay[month-1];i++,t++)
        {
            cout<<setiosflags(ios::right)<<setw(3)<<i;
            if(t%7==0)
            cout<<endl;
        }
        }
        cout<<endl;
    }
    void  Date::chineseFormat()
    {
        cout<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
    }
    void  Date::americaformat()
    {
        cout<<monthName[month-1]<<" "<<day<<","<<year<<endl;
    }
    int  Date::weekDay()
    {
        cout<<weekName[(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400+1)%7]<<endl;
    }
    int main(){
        Date d1(2019,3,27);
        Date d2(d1);
            d1.yesterday();
            d1.chineseFormat();
            d2.setYear(2016);
            d2.setMonth(2);
            d2.setDay(31);
            d2.tomorrow();
            d2.americaformat();
            d2.printMonthCalendar();
        return 0;
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值