显示指定月份的日历

来源:互联网 发布:ubuntu svn checkout 编辑:程序博客网 时间:2024/05/16 17:29

1.写这个程序花了差不多6个小时
2.学习了自顶向下的设计方式,虽然是照着书上来构思的,但代码是自己写的
3.还用很多地方可以优化,比如采用更多函数,代码量至少还可以减少一百行
4.继续努力!!!!!
这里写图片描述

#include<iostream>#include<iomanip>using namespace std;//获得总天数 int getTotalDays(int year,int month,int NumberofLeapyear,bool LeapYear){int TotalofDays=NumberofLeapyear*366+(year-1800-NumberofLeapyear)*365; switch(month){    case 1:    TotalofDays+=0;    break;    case 2:    TotalofDays+=31;    break;    case 3:    if(LeapYear)    {        TotalofDays+=(31+29);    }    else        TotalofDays+=(31+28);    break;    case 4:    if(LeapYear)    {        TotalofDays+=(31+29+31);    }    else        TotalofDays+=(31+28+31);    break;    case 5:    if(LeapYear)    {        TotalofDays+=(31+29+31+30);    }    else        TotalofDays+=(31+28+31+30);    break;    case 6:    if(LeapYear)    {        TotalofDays+=(31+29+31+30+31);    }    else        TotalofDays+=(31+28+31+30+31);    break;    case 7:    if(LeapYear)    {        TotalofDays+=(31+29+31+30+31+30);    }    else        TotalofDays+=(31+28+31+30+31+30);    break;    case 8:    if(LeapYear)    {        TotalofDays+=(31+29+31+30+31+30+31);    }    else        TotalofDays+=(31+28+31+30+31+30+31);    break;    case 9:    if(LeapYear)    {        TotalofDays+=(31+29+31+30+31+30+31+31);    }    else        TotalofDays+=(31+28+31+30+31+30+31+31);    break;    case 10:    if(LeapYear)    {        TotalofDays+=(31+29+31+30+31+30+31+31+30);    }    else        TotalofDays+=(31+28+31+30+31+30+31+31+30);    break;    case 11:    if(LeapYear)    {        TotalofDays+=(31+29+31+30+31+30+31+31+30+31);    }    else        TotalofDays+=(31+28+31+30+31+30+31+31+30+31);    break;    case 12:    if(LeapYear)    {        TotalofDays+=(31+29+31+30+31+30+31+31+30+31+30);    }    else        TotalofDays+=(31+28+31+30+31+30+31+31+30+31+30);    break;}return TotalofDays;};int main(void){//读取输入,有效性检验    cout<<"输入指定月份,将打印出该指定月份的日历"<<endl;cout<<"年(>=1800):"<<endl;int year=0;do{    bool right=true;    cin>>year;    if(year<1800)    {    cout<<"输入年份有误,请重新输入:"<<endl;    right=false;    }    else    break;}while(right);cout<<"月(整数):"<<endl;int month=1;do{    bool right=true;    cin>>month;    if(month<1||month>12)    {    cout<<"输入月份有误,请重新输入:"<<endl;    right=false;    }    else    break;}while(right);//打印日历头cout<<"             ";switch(month){    case 1:    cout<<"January";    break;    case 2:    cout<<"February";    break;    case 3:    cout<<"March";    break;    case 4:    cout<<"April";    break;    case 5:    cout<<"May";    break;    case 6:    cout<<"June";    break;    case 7:    cout<<"July";    break;    case 8:    cout<<"August";    break;    case 9:    cout<<"September";    break;    case 10:    cout<<"October";    break;    case 11:    cout<<"November";    break;    case 12:    cout<<"December";    break;}cout<<"  "<<year<<endl;cout<<"  "<<"---------------------------------"<<endl;cout<<setw(5)<<"Sun"<<setw(5)<<"Mon"<<setw(5)<<"Tue"<<setw(5)<<"Wen"<<setw(5)<<"Thu"<<setw(5)<<"Fri"<<setw(5)<<"Sat"<<setw(5)<<endl;//打印日历体//1.判断那些年是闰年const int STARTDAY1800=3;int NumberofLeapyear=0;bool LeapYear=true;for(int i=1800;i<year;i++){     if(i%4==0)    {        if(i%100==0&&i%400!=0)        {            LeapYear=false;        }        else        LeapYear=true;    }    else    LeapYear=false; if(LeapYear) NumberofLeapyear++;} //cout<<TotalofDays<<endl;//3.获得指定月份1号的星期值int theDate=(getTotalDays(year,month,NumberofLeapyear,LeapYear)+STARTDAY1800)%7;//打印一号前的空格 for(int k=0;k<theDate;k++){    cout<<setw(5)<<" ";}//打印第一周int i=1;for(;i<=7-theDate;i++){cout<<setw(5)<<i;} cout<<endl;int DaysofJanuary=31;int DaysofFebruary=LeapYear?29:28;int DaysofMarch=31;int DaysofApril=30;int DaysofMay=31;int DaysofJune=30;int DaysofJuly=31;int DaysofAugust=31;int DaysofSeptember=30;int DaysofOctober=31;int DaysofNovember=30;int DaysofDecember=31;//打印剩下周 int counter=0;switch(month){    case 1:  for(int j=i;j<=DaysofJanuary;j++)    {        cout<<setw(5)<<j;     counter++;     if(counter%7==0)     cout<<endl;    }    break;    case 2:    for(int j=i;j<=DaysofFebruary;j++)    {        cout<<setw(5)<<j;         counter++;     if(counter%7==0)     cout<<endl;    }    break;    case 3:    for(int j=i;j<=DaysofMarch;j++)    {        cout<<setw(5)<<j;     counter++;     if(counter%7==0)     cout<<endl;    }    break;    case 4:    for(int j=i;j<=DaysofApril;j++)    {        cout<<setw(5)<<j;     counter++;     if(counter%7==0)     cout<<endl;    }    break;    case 5:    for(int j=i;j<=DaysofMay;j++)    {        cout<<setw(5)<<j;     counter++;     if(counter%7==0)     cout<<endl;    }    break;    case 6:    for(int j=i;j<=DaysofJune;j++)    {        cout<<setw(5)<<j;     counter++;     if(counter%7==0)     cout<<endl;    }    break;    case 7:    for(int j=i;j<=DaysofJuly;j++)    {        cout<<setw(5)<<j;     counter++;     if(counter%7==0)     cout<<endl;    }    break;    case 8:    for(int j=i;j<=DaysofAugust;j++)    {        cout<<setw(5)<<j;     counter++;     if(counter%7==0)     cout<<endl;    }    break;    case 9:    for(int j=i;j<=DaysofSeptember;j++)    {        cout<<setw(5)<<j;     counter++;     if(counter%7==0)     cout<<endl;    }    break;    case 10:    for(int j=i;j<=DaysofOctober;j++)    {        cout<<setw(5)<<j;     counter++;     if(counter%7==0)     cout<<endl;    }    break;    case 11:    for(int j=i;j<=DaysofNovember;j++)    {        cout<<setw(5)<<j;     counter++;     if(counter%7==0)     cout<<endl;    }    break;    case 12:    for(int j=i;j<=DaysofNovember;j++)    {        cout<<setw(5)<<j;     counter++;     if(counter%7==0)     cout<<endl;    }    break;}cout<<endl;return 0;}
0 0
原创粉丝点击