问题:
要求:模仿现实生活中的挂历。 当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几)。 当系统日期变到下一月时,系统自动翻页到下一月。
代码详解:
这段代码可以生成指定年份所对应的日历。下面是该代码的详细解释:
1. 头文件及函数定义部分:
#include
int year(int y)
{
if ((y%4==0) && (y%100!=0) || y%400==0) // 判断闰年
return 366;
else
return 365;
}
代码中定义了一个 year()
函数,用于判断某一年是否为闰年。
## 2. 主函数部分:
c
int main()
{
int y;
int i,j,sum=0;
int begin,week;
int days[12]={31,28,31,30,31,30,31,31,30,31,30,31}; // 定义每月的天数
scanf("%d",&y); // 输入年份
for(i=1;i
// 判断是否为闰年 int year(int y) { if((y%4==0&&y%100!=0)||y%400==0) return 366; else return 365; }
int main() { int y,sum=0,i,j,begin,week=1; int days[12]={31,28,31,30,31,30,31,31,30,31,30,31}; // 每月的天数
printf("请输入要生成日历的年份:");
scanf("%d",&y);
// 计算前几年的天数之和
for(i=1;i下面是C++的代码:
注释如下:
c++
define CRTSECURENOWARNINGS 1 // 去掉警告
include
include // 用于包含exit函数
include // 包含时间相关的头文件
include // 包含字符串相关的头文件
using namespace std;
// 枚举月份 enum { January=0, February, March, April, May, June, July, August, September, October, November, December, };
class Calendar { public: int sum=0; // 表示闰年之前有多少天,初始为0 int year=GetTime(); // 年份为当前系统时间所在的年份 int week=0; // 当前月份的1号是星期几 protected: int month[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; // 存储月份天数 public: int IsLeap(int year); // 判断是否闰年的函数 Calendar(){} // 默认构造函数 Calendar(int year) { // 带参数构造函数 this->year = year; for (int i = 1; i < year; i++) // 计算闰年之前有多少天 { this->sum += IsLeap(i); } this->week = (sum + 1) % 7; // 计算当前年份的1月1号是星期几 } int GetTime() // 获取当前系统时间所在的年份 { // 获取当前系统时间 std::chrono::systemclock::timepoint now = std::chrono::systemclock::now(); // 转换为时间戳 std::timet nowc = std::chrono::systemclock::totimet(now); // 转换为本地时间 std::tm* localtime = std::localtime(&nowc); // 获取当前年份 int year = localtime->tmyear + 1900; // 输出当前年份 std::cout << "当前年份为:" << year << std::endl; return year; // 返回当前年份 } void PrintCalendar(); // 打印日历的函数 };
int Calendar:: IsLeap(int year) // 判断是否闰年的函数 { if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) return 366; // 是闰年则返回366 else return 365; // 否则返回365 }
void Calendar::PrintCalendar() // 打印日历的函数 { int begin = 1; // 每个月份的开始日期从1号开始 cout << this->year << "年日历>>>" << endl; // 输出年份所对应的日历 for (int j = January; j <= December; j++) // 遍历所有月份 { begin = 1; // 当前月份开始日期为1号 cout << " 第" << j + 1 << "月" << endl; // 输出当前月份 cout << " 7 1 2 3 4 5 6" << endl; // 输出星期几 printf("=====================\n"); for (int i = 0; i < this->week; i++) // 输出当前月份1号前的空格,即空白处 { cout << " "; } while (begin <= this->month[j]) // 输出当前月份的日期 { printf("%3d", begin++); // 输出日期并加1 week = (week + 1) % 7; if (!week) cout << endl; // 如果星期天了,换行输出下一行日期 } cout << endl<<endl; // 输出完毕当前月份的日期后,换行 } }
int main() { Calendar c; // 创建Calendar对象 c.PrintCalendar(); // 打印当前年份所对应的日历 return 0; } ```
这份代码主要实现了日历的打印功能。其中使用了枚举类型来表示月份,通过计算闰年之前有多少天来判断当前的日期是星期几,再输出对应的日期表格。在类中还实现了一个获取当前系统时间所在年份的函数。整个程序比较简单易懂,是一个较好的练手题目。
总结
本文介绍了如何使用 C 语言编写一个简单的日历生成程序。该程序使用了基本的循环、条件语句和数组等语法。读者可以根据自己的需要对程序进行扩展和优化。