C++ 实现万年历(原创)

任务要求

功能要求:

1)提供菜单方式选择,假定输入的年份在1940-2040年之间。

2)输入一个年份,输出是在屏幕上显示该年的日历。

3)输入年月,输出该月的日历,如图2-1所示:

  C++ 实现万年历(原创)

                          2- 1 月日历

4)输入年份、月份、日期,计算得到的是这一天据今天有多少天,星期几。

5)输入公历的年月日,输出农历年月日。

6)输入农历节气,输出当年农历的年月日及公历年月日。可以假定只涉及年份是1940年到2040年。

总体设计

将文件三部分 Date.h、main.cpp、Date.cpp

1) Date.h:包括函数的声明。

2) main.cpp:包含调用与模拟交互界面的函数代码

3) Date.cpp:

//输入输入一个年份,输出是在屏幕上显示该年的日历。

void print_annual_calendar(int year)

//输入年月,输出该月的日历。

void print_monthly_calendar(int year,int month)

//输入年份、月份、日期,计算得到的是这一天据今天有多少天,星期几。

void print_number_week(int year,int month ,int day)

//输入公历,显示农历。

void gregorian_to_lunar (int year,int month,int day)

//输入农历节气,输出当年农历的年月日和公历年月日。

void solar_term(char *str)

详细设计说明

(1) 查询距今多少天,星期几?

①计算某一日期到1939年1月1日的天数:getDaysTo1939(int year, int month, int day)

  1. 判断是否是闰年(平年365天,闰年366天),函数如表4-1所示:

4- 1 isLeapYear函数

定义函数

bool isLeapYear(int year)

返回值

若year年是闰年返回true,否则返回false

参数说明

year参数是要判断的年份

  1. 判断某年某月有多少天?函数如表4-2所示:

4- 2 getDaysOfMonth函数

定义函数

int getDaysOfMonth(int year,int month)

返回值

返回year年month月的天数

参数说明

year、month参数分别是要查询的年、月

 例如:计算2020年8月14日到1939年1月1日的天数。首先1939-2019年是整数年,直接判断是否是闰年,然后增加天数。2020年不是整年,但1-7月是整数月,根据年、月获取当月天数累加。最后再加天数day,便得出相距与1939年1月1日的天数。

②计算查询日期距今天多少天?getDaysOfMonthToToday(int year, int month, int day) ,函数如表4-3所示:

  1. 通过函数获取系统时间,通过getDaysTo1939(),获取系统时间距1939年1月1日的天数num1。
  2. 使用键盘输入的日期,通过getDaysTo1939(),获取输入日期距1939年1月1日的天数num2。
  3. 使用num1-num2计算输入日期距今天的天数,正数为已过去时间,负数为未来时间。

4- 3 getDaysOfMonthToToday函数

定义函数

int getDaysOfMonthToToday(int year,int month,int day)

返回值

返回距今天数,正值为过去,负值为未来

参数说明

year、month、day 分别为要查询的年、月、日

 

③计算输入日期是星期几:getDayOfWeek(int year,int month,int day) ,函数如表4-4所示:

 

  1. 知道1939年1月1日是星期日,然后计算查询日期与1939年距离多少天,然后利用(天数%7)获取余数,得出星期属性。

4- 4 getDayOfWeek函数

定义函数

String getDayOfWeek(int year,int month,int day)

返回值

返回字符串星期数

参数说明

year、month、day 分别为要查询的年、月、日

 

 

(2) 打印月日历

  1. 获取当月1日是星期几,通过getDayOfWeek1()获取当月一号是星期几,然后通过打印空格使得当月1日,停在所对应的星期下方,函数如表4-5所示:

4- 5 getDayOfWeek1函数

定义函数

int getDayOfWeek1(int year,int month,int day)

返回值

返回星期数,0代表星期天

参数说明

year、month、day 分别为要查询的年、月、日

 

  1. 获取当月天数,通过getDaysOfMonth()获取,打印完最后一天时间便结束,函数如表4-6所示:

4- 6 getDaysOfMonth函数

定义函数

int getDaysOfMonth(int year,int month)

返回值

返回year年month月天数

参数说明

year、month分别为要查询的年、月

 

 

(3) 打印年日历

① 打印季度日历,函数如表4-7所示:

  1. 首先打印日历头信息三遍(由于是按照季度输出,一行包含三个月),格式:(月份 SUN MON SUN MON TUE WED THU FRI SAT)
  2. 依次打印日历的第一行,每月的第一日对应的星期数,通过打印空格来调整。
  3. 依次打印连续的日期。最后一行,日期与日期之间依然要使用空格来调整位置。

4- 7 print_seasons_calendar函数

定义函数

void print_seasons_calendar(int year,int num)

返回值

无返回值

参数说明

year、num分别为要打印的年、季度,num可取1,2,3,4

 

① 打印年日历,函数如表4-8所示:

  1. 通过for循环打印四个季度的日历,便完成年日历的输出。

4- 8 print_annual_calendar函数

定义函数

void print_annual_calendar(int year)

返回值

无返回值

参数说明

year为要打印的年份

 

 

(4) 公历转农历

① 计算输入的时间距离1939年1月1日的天数。

② 获取农历年天数(通过农历数据表查询):getDayOfNongYear(int year)

  1. 获取农历年是否为闰年,返回闰月月份,函数如表4-9所示:

4- 9 isNongLeapYear函数

定义函数

int isNongLeapYear(int year)

返回值

返回农历year年闰月月份,0表示不闰

参数说明

year为要查询的年

 

  1. 获取每个月有多少天,函数如表4-10所示:

4- 10 getDaysOfMonthOfNongMonth函数

定义函数

int getDaysOfMonthOfNongMonth(int year,int month)

返回值

返回农历year年month月的天数

参数说明

year、month分别为要查询的年、月

 

  1. 获取闰月大小,函数如表4-11所示: 

4- 11 is_large_month函数

定义函数

bool is_large_month(int year)

返回值

闰大月返回true,闰小月返回false

参数说明

year为要查询的年

 

③ 计算农历日期,函数如表4-12所示:

  1. 由于1939年1月1日农历往往是1938年,所以首先减去公历1939年1月1日到农历1939年正月初一的天数。
  2. 循环计算便得出农历日期。日期的文字形式可以保存在数组中进行拼接输出。

4- 12 gregorian_to_lunar函数

定义函数

void gregorian_to_lunar (int year,int month,int day)

返回值

无返回值

参数说明

year、month、day分别为要转换的年、月、日

 

 

(5) 查询节气时间,函数如表4-13所示:

  1. 计算二十四节气对应的公历日期(通过寿星公式计算)
  2. 得出公历日期,直接使用公历转农历函数,打印农历日期。

4- 13 solar_term函数

定义函数

void solar_term(int year,char* str)

返回值

无返回值

参数说明

year代表要查询的年份,str表示查询的节气名称,如立秋。

调试与测试

(1) 交互界面显示

 C++ 实现万年历(原创)

 

(2) 打印年日历

 C++ 实现万年历(原创)

                      图3- 2 年日历

(3) 打印月日历

C++ 实现万年历(原创)

            3- 3  月日历

(4) 查询距今多少天,星期几? 

C++ 实现万年历(原创)

                   3- 4  距今天数,星期数

(5) 公历转农历

C++ 实现万年历(原创)

                    3- 5  公历转农历

 (6) 查询节气时间

C++ 实现万年历(原创)

                图3- 6  查询二十四节气

代码实现

看到有人直接复制全部内容,到百度文库卖文档,我放github了。

Github:handsometaoa/Calendar: C++ 实现的日历 (github.com)

 

原文链接: https://www.cnblogs.com/handsometaoa/p/13588549.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++ 实现万年历(原创)

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/202148

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午9:04
下一篇 2023年2月12日 下午9:04

相关推荐