使用 C++ 打印特定年份的日历


在这个问题中,我们得到了一个年份,我们想要打印该年份的日历。

该年份日历会显示当月所有日期上的所有天、月。在此,我们将创建一个程序,用来显示当前年份的日历。

为此,我们需要进行一些计算,比如:

某个月份中的天数

1 月、3 月、5 月、7 月、8 月、10 月和 12 月有 31 天。

2 月在非闰年中为 28 天,在闰年中为 29 天。

4 月、6 月、9 月和 11 月有 30 天。

月份中的第一天(星期几)

根据年份和月份,可以找到每个月的 1 号是星期几。

示例

现在,我们来创建一个程序来打印 2020 年的日历 −

 在线演示

#include<iostream>
using namespace std;
int dayNumber(int day, int month, int year){
   static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 };
   year -= month < 3;
   return ( year + year/4 - year/100 + year/400 + t[month-1] + day) % 7;
}
string getMonthName(int monthNumber){
   string months[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
   return (months[monthNumber]);
}
int numberOfDays (int monthNumber, int year){
   switch(monthNumber){
      case 0 :
      case 2 :
      case 4 :
      case 6 :
      case 7 :
      case 9 :
      case 11: return(31);
      break;
      case 1 :
         if (year % 400 == 0 || (year % 4 == 0 && year %100 != 0))
            return (29);
         else
            return (28);
      break;
      case 3 :
      case 5 :
      case 8 :
      case 10 : return(30);
      break;
   }
}
void printCalendar(int year){
   cout<<"\t\t\t Calendar - Year "<<year;
   int days;
   int current = dayNumber (1, 1, year);
   for (int i = 0; i < 12; i++){
      days = numberOfDays (i, year);
      cout<<endl<<"\t\t ----X----"<<getMonthName (i).c_str()<<"----X---- \t\t"<<endl;
      cout<<" Sun Mon Tue Wed Thu Fri Sat \n";
      int k;
      for (k = 0; k < current; k++)
         cout<<"\t";
      for (int j = 1; j <= days; j++){
         printf("%5d", j);
         if (++k > 6){
            k = 0;
            cout<<endl;
         }
      }
      if (k)
         cout<<endl;
         current = k;
      }
   return;
}
int main(){
   int year = 2019;
   printCalendar(year);
   return (0);
}

输出

Calendar - Year 2019
----X----January----X----
Sun Mon Tue Wed Thu Fri Sat
         1   2   3   4   5
6    7   8   9   10  11 12
13   14  15  16  17  18 19
20   21  22  23  24 25 26
27   28  29  30   31
----X----February----X----
Sun Mon Tue Wed Thu Fri Sat
                     1   2
3    4   5    6   7   8   9
10   11  12   13  14  15 16
17   18  19   20   21 22 23
24    25  26  27   28
----X----March----X----
Sun Mon Tue Wed Thu Fri Sat
                     1  2
3    4    5   6  7   8   9
10   11 12   13  14 15   16
17   18 19   20  21 22  23
24   25 26   27 28 29 30
31
----X----April----X----
Sun Mon Tue Wed Thu Fri Sat
     1    2  3   4   5   6
7    8    9 10   11 12   13
14  15    16 17   18 19  20
21  22  23   24  25  26 27
28 29   30
----X----May----X----
Sun Mon Tue Wed Thu Fri Sat
             1    2  3  4
5    6    7  8    9 10 11
12   13   14 15  16  17 18
19   20   21 22 23  24  25
26   27  28 29  30   31
----X----June----X----
Sun Mon Tue Wed Thu Fri Sat
                        1
2    3    4   5  6 7    8
9    10  11 12 13 14 15
16    17 18 19 20 21 22
23    24 25 26 27 28 29
30
----X----July----X----
Sun Mon Tue Wed Thu Fri Sat
      1    2  3    4   5 6
7    8    9    10 11 12 13
14    15 16    17 18 19 20
21 22 23    24    25 26 27
28 29 30 31
----X----August----X----
Sun Mon Tue Wed Thu Fri Sat
                  1  2   3
4    5    6    7  8    9 10
11  12  13  14   15 16 17
18  19  20   21  22 23 24
25 26  27   28  29 30 31
----X----September----X----
Sun Mon Tue Wed Thu Fri Sat
1    2    3   4  5   6 7
8    9    10  11 12 13 14
15  16  17   18 19 20 21
22  23 24 25 26 27 28
29 30
----X----October----X----
Sun Mon Tue Wed Thu Fri Sat
         1   2  3   4   5
6    7   8   9 10  11   12
13  14 15   16 17   18 19
20  21   22 23 24   25 26
27  28  29   30 31
----X----November----X----
Sun Mon Tue Wed Thu Fri Sat
                     1   2
3    4    5  6   7   8   9
10   11   12 13 14   15 16
17   18   19  20 21 22 23
24   25   26   27 28 29 30
----X----December----X----
Sun Mon Tue Wed Thu Fri Sat
1    2   3   4   5   6   7
8    9   10  11  12 13  14
15   16  17  18  19 20  21
22   23  24  25  26 27  28
29   30   31

更新时间:2020 年 1 月 3 日

3K+ 次浏览

开启你的 职业生涯

完成课程,获得认证

开始学习
广告