//mycalendar.h
#ifndef MYCALENDAR_H
#define MYCALENDAR_H
class Mycalendar
{
private:
int year,month,day;
public:
Mycalendar();
Mycalendar(int,int,int);
Mycalendar(const Mycalendar&);
int GetSumDay(int year,int month,int day);
bool JudgeDays(int year,int month,int day);
int FindDayWeekend();
int DisplayMonth();
int DisplayYear();
int ShowDayweekend(int year,int month,int day);
int ShowOneMonth(int year,int month);
int ShowOneYear(int year);
Mycalendar operator+(Mycalendar &);
Mycalendar operator-(Mycalendar &);
Mycalendar operator=(const Mycalendar &);
};
#endif // MYCALENDAR_H
//mycalendar.cpp
#include "mycalendar.h"
#include <iostream>
#include<iomanip>
using namespace std;
static bool JudgeLeapYear(int year);
static int MonthDays(int year,int month);
bool JudgeLeapYear(int year){
return (((year%4==0)&&(year%100!=0))||(year%400==0));
}
int MonthDays(int year,int month){
switch(month) {
case 1: case 3: case 5: case 7:
case 8: case 10: case 12:
return 31;
case 2: {
if(JudgeLeapYear(year)==1)
return 29;
else
return 28;
}
case 4: case 6: case 9:
case 11: return 30;
}
return 1;
}
Mycalendar::Mycalendar():year(2000),month(1),day(1){
}
Mycalendar::Mycalendar(int year=2000,int month=1,int day=1){
if((year<1800)||(month>13)||(day>31)){
cout<<"The input parameter is wrong.Initialized to 2000/1/1";
}
else{
this->year=year;
this->month=month;
this->day=day;
}
}
Mycalendar::Mycalendar(const Mycalendar &calendar){
this->year=calendar.year;
this->month=calendar.month;
this->day=calendar.day;
}
int Mycalendar::GetSumDay(int year,int month,int day){
int SumDay,i;
for(i=1800,SumDay=0;i<year;i++){
if(JudgeLeapYear(i))
SumDay+=366;
else
SumDay+=365;
}
for(i=1;i<month;i++){
SumDay+=MonthDays(year,i);
}
SumDay+=day-1;
return SumDay;
}
bool Mycalendar::JudgeDays(int year,int month,int day){
int TureDayNumber;
if((year<1800)||(month>13)||(day>31)){
return false;
}
else{
TureDayNumber=MonthDays(year,month);
if(day>TureDayNumber)
return false;
}
return true;
}
int Mycalendar::FindDayWeekend(){
int TotalDay;
char Weekend[7][4]={{"Sun"},{"Mon"},{"Tue"},{"Wed"},{"Thu"},{"Fri"},{"Sat"}};
TotalDay=GetSumDay(year,month,day);
cout<<year<<"/"<<month<<"/"<<day<<"/"<<" is "<<Weekend[(TotalDay+3)%7]<<" day."<<endl;
return 0;
}
int Mycalendar::DisplayMonth(){
int Excur, i, TotalDay;
int SpaceSize = 4;
Excur = (GetSumDay(year,month,1)+3)%7;
cout<<" "<<year<<"/"<<month<<endl;
cout<<setw(SpaceSize)<<"Sun"<<setw(SpaceSize)<<"Mon"<< setw(SpaceSize)<<"Tue";
cout<<setw(SpaceSize)<<"Wed"<<setw(SpaceSize) <<"Thu"<<setw(SpaceSize) <<"Fri";
cout<<setw(SpaceSize)<<"Sat"<<endl;
for( i=1; i<=Excur; i++)
cout<<setw(SpaceSize)<<" ";
TotalDay = MonthDays(year,month);
for( i=1; i<=TotalDay; i++){
cout<<setw(SpaceSize)<< i;
if( 0==(i+Excur)%7)
cout<<endl;
}
cout<<endl;
return 0;
}
int Mycalendar::DisplayYear(){
int Excur, i, TotalDay;
int SpaceSize = 4;
for(int month=1;month<13;month++){
Excur = (GetSumDay(year,month,1)+3)%7;
cout<<" "<<year<<"/"<<month<<endl;
cout<<setw(SpaceSize)<<"Sun"<<setw(SpaceSize)<<"Mon"<< setw(SpaceSize)<<"Tue";
cout<<setw(SpaceSize)<<"Wed"<<setw(SpaceSize) <<"Thu"<<setw(SpaceSize) <<"Fri";
cout<<setw(SpaceSize)<<"Sat"<<endl;
for( i=1; i<=Excur; i++)
cout<<setw(SpaceSize)<<" ";
TotalDay = MonthDays(year,month);
for( i=1; i<=TotalDay; i++){
cout<<setw(SpaceSize)<< i;
if( 0==(i+Excur)%7)
cout<<endl;
}
cout<<endl;
}
cout<<endl;
return 0;
}
Mycalendar Mycalendar::operator+(Mycalendar &calendar){
year += calendar.year;
month += calendar.month;
day += calendar.day;
if(month>12){
year++;
month -= 12;
}
if(day>MonthDays(year,month)){
day -= MonthDays(year,month);
month++;
if(month>12){
year++;
month -= 12;
}
}
// int Days;
// Days = GetSumDay(year,month,day);
// Days += calendar.GetSumDay(calendar.year,calendar.month,calendar.day);
return *this;
}
Mycalendar Mycalendar::operator-(Mycalendar &calendar){
year -= calendar.year;
month -= calendar.month;
day -= calendar.day;
return *this;
}
int Mycalendar::ShowDayweekend(int year,int month,int day){
int TotalDay;
char Weekend[7][4]={{"Sun"},{"Mon"},{"Tue"},{"Wed"},{"Thu"},{"Fri"},{"Sat"}};
TotalDay=GetSumDay(year,month,day);
cout<<year<<"/"<<month<<"/"<<day<<"/"<<" is "<<Weekend[(TotalDay+3)%7]<<" day."<<endl;
return 0;
}
int Mycalendar::ShowOneMonth(int year=0,int month=0){
int Excur, i, TotalDay;
int SpaceSize = 4;
Excur = (GetSumDay(year,month,1)+3)%7;
cout<<" "<<year<<"/"<<month<<endl;
cout<<setw(SpaceSize)<<"Sun"<<setw(SpaceSize)<<"Mon"<< setw(SpaceSize)<<"Tue";
cout<<setw(SpaceSize)<<"Wed"<<setw(SpaceSize) <<"Thu"<<setw(SpaceSize) <<"Fri";
cout<<setw(SpaceSize)<<"Sat"<<endl;
for( i=1; i<=Excur; i++)
cout<<setw(SpaceSize)<<" ";
TotalDay = MonthDays(year,month);
for( i=1; i<=TotalDay; i++){
cout<<setw(SpaceSize)<< i;
if( 0==(i+Excur)%7)
cout<<endl;
}
cout<<endl;
return 0;
}
int Mycalendar::ShowOneYear(int year){
int Excur, i, TotalDay;
int SpaceSize = 4;
for(int month=1;month<13;month++){
Excur = (GetSumDay(year,month,1)+3)%7;
cout<<" "<<year<<"/"<<month<<endl;
cout<<setw(SpaceSize)<<"Sun"<<setw(SpaceSize)<<"Mon"<< setw(SpaceSize)<<"Tue";
cout<<setw(SpaceSize)<<"Wed"<<setw(SpaceSize) <<"Thu"<<setw(SpaceSize) <<"Fri";
cout<<setw(SpaceSize)<<"Sat"<<endl;
for( i=1; i<=Excur; i++)
cout<<setw(SpaceSize)<<" ";
TotalDay = MonthDays(year,month);
for( i=1; i<=TotalDay; i++){
cout<<setw(SpaceSize)<< i;
if( 0==(i+Excur)%7)
cout<<endl;
}
cout<<endl;
}
cout<<endl;
return 0;
}
Mycalendar Mycalendar::operator=(const Mycalendar&calendar){
year=calendar.year;
month=calendar.month;
day=calendar.day;
return *this;
}
//main.cpp
#include <iostream>
#include "mycalendar.h"
using namespace std;
int main()
{
Mycalendar calener(2016,8,7);
calener.FindDayWeekend();
calener.DisplayMonth();
calener.DisplayYear();
return 0;
}