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;
}