C++写的日历

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值