c++实现万年历,用户只用输入年份,就可以输出这一年的年历,且输出的时候一行输出三个月份,然后再转行。要求:利用循环方法产生年历数据,使用数据缓冲区存储和输出,将缓冲区看作一个二维平面,设计年历坐标系 ,按坐标填入星期表头,计算每天的坐标,填入日期内容,最后一起输出。 将一个月作为一个子程序,循环调用月内按天循环,事先存储每个月的天数
时间: 2023-10-17 16:05:08 浏览: 69
C++实现简易万年历
以下是使用C++实现万年历的代码,实现了用户输入年份后输出整个年份的日历,并且每行输出三个月份:
```cpp
#include <iostream>
#include <iomanip>
using namespace std;
const int monthDays[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 每个月的天数
void printMonth(int year, int month, int startWeekday) {
cout << setw(26) << year << "年" << setw(3) << month << "月" << endl;
cout << "日 一 二 三 四 五 六" << endl;
int days = monthDays[month];
if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)) {
days = 29; // 闰年二月
}
int day = 1;
for (int i = 0; i < startWeekday; i++) {
cout << " "; // 填充空白
}
for (int i = startWeekday; i < 7; i++) {
cout << setw(2) << day++ << " ";
}
cout << endl;
while (day <= days) {
for (int i = 0; i < 7 && day <= days; i++) {
cout << setw(2) << day++ << " ";
}
cout << endl;
}
}
int main() {
int year;
cout << "请输入年份:";
cin >> year;
int startWeekday = 2; // 1900年1月1日为星期一
for (int month = 1; month <= 12; month += 3) {
cout << endl;
for (int i = 0; i < 3; i++) {
printMonth(year, month + i, startWeekday);
int days = monthDays[month + i];
if (month + i == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)) {
days = 29; // 闰年二月
}
startWeekday = (startWeekday + days) % 7; // 计算下一个月1号的星期
}
}
return 0;
}
```
代码中的 `printMonth` 函数用于输出一个月的日历,其中的 `startWeekday` 参数表示该月1号的星期,可以通过计算得到。主函数中,先让用户输入年份,然后循环调用 `printMonth` 函数输出整个年份的日历,每行输出三个月份,最后输出返回 0。
阅读全文