21xrx.com
2024-12-22 22:45:11 Sunday
登录
文章检索 我的文章 写文章
C++编写的万年历代码
2023-07-03 17:00:12 深夜i     --     --
C++ 万年历 编写

  return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);

万年历是一个常见的小应用程序,用来查看某一年、某一个月的日历。这个程序使用 C++ 编写,实现了以下功能:

1. 输入年份和月份,显示该月的日历以及重要节日(如元旦、春节等)。

2. 可以输入任意年份,显示该年所有月份的日历以及重要节日。

3. 通过鼠标点击日历中的某一天,可以显示该天的详细信息,包括农历信息、假期等。

实现这个程序主要是通过计算某一年月份的第一天是星期几(用 Zeller 公式),然后输出日历表格。同时,参考历法中的相关知识,可以计算出每个节日的日期,并在日历上标记。例如,元旦一般是每年的 1 月 1 日,春节则是每年农历正月初一等。此外,还可以参考相关 API 实现对于点击事件的处理,进一步实现日历的交互功能。

下面是这个程序的部分代码:


#include <iostream>

#include <cstdio>

#include <cstring>

#include <cstdlib>

using namespace std;

//一周七天的第一个字母

const char weekday[7][4]="Mon";

//每月天数,注意:2月为28天

const int dayOfMonth[12]=30;

//各个节日

const char* holiday[20]=

  " 5.x 端午节 ";

//某一年第一天是星期几,使用 Zeller 公式

int firstWeek(int year) {

  int week;

  week = ((year - 1) + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400 + 1) % 7;

  return week;

}

//闰年判断,返回 true 或 false

bool isLeap(int year)

{

  return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);

}

//输出一周的日历

void printWeek(int* day,int firstDay) {

  for(int i=0;i<7;i++) {

    if(*day || i >= firstDay)

      printf("%3d",*day++);

    else

      printf("  ");

    if(i<6) printf(" ");

  }

  printf("\n");

}

//输出一个月的日历

void printMonth(int year,int month) {

  int days=dayOfMonth[month-1];

  if(month==2 && isLeap(year))

    days++;

  printf("%s:%d年%d月\n",holiday[5]+1,year,month);

  printf("Sun Mon Tue Wed Thu Fri Sat\n");

  int firstDay=firstWeek(year); //该年第一天是星期几

  int day=1;

  while(day<=days) {

    printWeek(&day,firstDay);

    firstDay=0;

  }

}

int main()

{

  int year,month;

  printf("请输入年份月份:");

  scanf("%d%d",&year,&month);

  printMonth(year,month);

  return 0;

}

当然,这个程序还有很多可扩展的功能,例如:

1. 添加更多的节日,如母亲节、父亲节等。

2. 增加用户设置,如选择节日的显示方式(特殊颜色、闪烁等等)。

3. 实现包括当前时刻在内的日期更新。

4. 界面美化,使得程序更加友好易用。

总之,万年历编写是一个不错的 C++ 编程练手项目,可以提升对于计算、函数、数组等编程知识的掌握。同时,对于计算机科学的很多领域都有应用,例如日程安排、时间序列分析等等。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复