📄 打印年历.cpp
字号:
//-----------------------------
#include<iostream.h>
#include<iomanip.h> //其文件中包含了setw()函数的原型
#include<stdlib.h>
//-----------------------------
int FirstDayOfYear(int y);
int DaysOfMonth(int m);
void PrintMonth(int m);
void PrintHead(int m);
bool IsLeapYear(int y);
//------------------------------
int year,weekDay;
//------------------------------
main(){
//为了输出到屏幕上而不受重定向的影响,下面用cerr输出
cerr<<"请输出您想要打印的年份\n";
cin>>year;
if(year<1){
cout<<"对不起,输入的年份不能小于公元1年:\n";
return 0;
}
//打印年历
cout<<"\n\n\n"<<year<<" 年\n";
cout<<"\n=================================================\n";
weekDay=FirstDayOfYear(year);
//打印每个月
for(int i=1;i<13;i++)
PrintMonth(i);
cout<<"\n";
system("pause");
}
//--------------------------
void PrintMonth(int m)
{
PrintHead(m);
int days=DaysOfMonth(m);
for(int i=1;i<=days;i++){
cout<<setw(2)<<i<<setw(3)<<" "; //为三空格
weekDay=(weekDay+1)%7;
if(weekDay==0){
cout<<"\n";
cout<<"\t";
}
}
}
//----------------------------
void PrintHead(int m)
{
cout<<"\n\n"<<setw(2)<<m<<"月 日 一 二 三 四 五 六\n\t"; //字与字间为三个空格
if(weekDay!=7){
for(int i=1;i<=weekDay;i++) //表头和日期要严格对齐,\t所占域宽等于八个空格,一个数字域宽等于一个空格,一个汉字域宽等于两个空格
cout<<" "; //五个空格
}
}
int DaysOfMonth(int m){
switch(m){
case 1:
return 31;
case 3:
return 31;
case 5:
return 31;
case 7:
return 31;
case 8:
return 31;
case 10:
return 31;
case 12:
return 31;
case 4:
return 30;
case 6:
return 30;
case 9:
return 30;
case 11:
return 30;
case 2:
if(IsLeapYear(year))
return 29;
else
return 28;
}
return 0;
}
//----------------------------
bool IsLeapYear(int y){
return ((y%4==0&&y&100!=0)||y%400==0);
}
//----------------------------
int FirstDayOfYear(int y){
long n;
n=y*365;
for(int i=1;i<y;i++)
n+=IsLeapYear(i);
return n%7;
}
//------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -