自己写的一个阳历表

//日历

//关键是先找出一年中的第一天是这一年中的晚期几

#include <stdio.h>
#include <windows.h>
bool bMonthFlags = false;/*以月来换页*/

//判别闰年
bool IsLeapYear(int iYear)
{
 return ((iYear%400 == 0) || ((iYear%4 == 0) && (iYear%100 != 0)));
}

//一年中的第一天是这一年中的星期几
int GetYearDay()
{
 SYSTEMTIME sysTime;
 GetLocalTime(&sysTime);
 int iYear = sysTime.wYear-1;
 int iDay = ((iYear-1)*365+(iYear-1)/4-(iYear-1)/100+(iYear-1)/400+1)%7;
 return iDay;
}

int GetYearDay(int iInputYear)
{
 int iDay = ((iInputYear-1)*365+(iInputYear-1)/4-(iInputYear-1)/100+(iInputYear-1)/400+1)%7;
 return  iDay;
}


void Print(const int iMonthDay, const int iDay)
{
 int iYearDay=0;    /*一年中的星期几*/
 for(int i=1; i<=iDay; ++i)
 {
  int iTemp = (iMonthDay+i+GetYearDay())%7; //key
  if(!bMonthFlags)
  {
   bMonthFlags = true; 
   for(int j=0; j<iTemp; ++j)
   {
    printf("\t");
    ++iYearDay;
   }
  }
  printf("%d\t", i);
  if((iYearDay+1)%7 == 0 )
  {
   printf("\n");

  }
  ++iYearDay;
 
 }
}

void Show()
{
 int iDay;
 int iCount;
 int iTempDay[11]; //临时保存每月的iDay;
 int iSumMonthDay;
 SYSTEMTIME sysTime;
 GetLocalTime(&sysTime);
 iSumMonthDay = 0;
 iCount = 0;
 for(int iMonth=1; iMonth<13; ++iMonth)
 {
  printf("\t\t\t%d年第%d月\n", sysTime.wYear, iMonth);
  printf("日\t一\t二\t三\t四\t五\t六\n");
  switch(iMonth)
  {
   case 1:
   case 3:
   case 5:
   case 7:
   case 8:
   case 10:
   case 12:
    iDay=31;break;
   case 4:
   case 6:
   case 9:
   case 11:
    iDay=30;break;
   case 2:
    {
     if(IsLeapYear(sysTime.wYear))
      iDay=28;
     else
      iDay=29;
    }
    break;
   default:
    break;
  }
  iTempDay[iMonth-1] = iDay;
  if(iMonth>1)
   iSumMonthDay += iTempDay[iCount++];

  Print(iSumMonthDay, iDay);

  printf("\n\n");
  system("pause");
  bMonthFlags = false;
 }
}

int main(int argc, char* argv[])
{
 Show();
 return 0;
}

原文地址:https://www.cnblogs.com/ccmfc/p/1744414.html