📄 code of calendar.cpp
字号:
#include<iostream>
#include<iomanip>
#include<string>
#include<windows.h>
using namespace std;
//从键盘输入年.纵向输出日历
void main()
{
int daten(int month,bool run)
{
switch(month)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
return 31;break;
case 4: case 6: case 9: case 11:
return 30;break;
case 2:
if(run)
return 29;
else
return 28;break;
}
return -1;
}
int year,month,t,day,date=1;
bool run;
cout<<"please input a year:";
cin>>year;
run=(year%400==0||(year%4==0&&year%100!=0));//判断是否为闰年
t=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400;//计算即年第一天距公元元年多少天
day=(t+1)%7;//求出第一月的第一天星期几
for(int i1=1;i1<=12;i1++)
{
month=i1;
date=abc::daten(month,run);
cout<<month<<"月"<<endl;
cout<<"********************************************************"<<endl;
cout<<"日"<<'\t'<<"一"<<'\t'<<"二"<<'\t'<<"三"<<'\t'<<"四"<<'\t'<<"五"<<'\t'<<"六"<<endl;
cout<<setw(8*day+1);
int k=1,i2;//i2用来确定下一月的起始位
for(int j1=day;j1<=6;j1++)
{
cout<<k<<"\t";k++;
}
cout<<"";//避免当day=7时不做循环输出endl时被setw()控制
cout<<endl;
do{
i2=1;//每次循环重新赋值,保证输完一个月最后一行时知道下一月的第一天星期几
for(int m=1;m<=7;m++)
{
cout<<k<<"\t";k++;
if(k>date)break;
i2++;
}
cout<<endl;
}
while(k<=date);
day=i2;//由i2可以知道下一月的第一天为星期几
cout<<endl;
}
}
// 从键盘输入年,横向输出该年的日历(每行四个月)
void main()
{
void outmonth(int month)
{
switch(month)
{
case 1:cout<<"一月";break;
case 2:cout<<"二月";break;
case 3:cout<<"三月";break;
case 4:cout<<"四月";break;
case 5:cout<<"五月";break;
case 6:cout<<"六月";break;
case 7:cout<<"七月";break;
case 8:cout<<"八月";break;
case 9:cout<<"九月";break;
case 10:cout<<"十月";break;
case 11:cout<<"十一月";break;
case 12:cout<<"十二月";break;
}
}
int daten(int month,bool run)//判断月份
{
switch(month)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
return 31;break;
case 4: case 6: case 9: case 11:
return 30;break;
case 2:
if(run)
return 29;
else
return 28;break;
}
return -1;
}
void gotoxy(int x, int y) //光标定位函数
{
COORD c;
c.X = x - 1;
c.Y = y - 1;
SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}
int year,month,t,day,date=30;
bool run;//用来判断是否是闰年
cout<<"please input a year:";
cin>>year;
run=(year%400==0||(year%4==0&&year%100!=0));//判断是否为闰年
t=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400;//计算即年第一天距公元元年多少天
day=(t+1)%7;//求出第一月的第一天星期几
for(int i1=1,j=0;i1<=12;i1++)
{
month=i1;
date=daten(month,run);//判断第month月有多少天
int j1=56*((i1-1)%4)+1,j2=4+8*j;//定义i,j并赋予初值用来定位输出month月的光标
if(i1%4==0)j=j+1;//每输出四个月要换行输出
gotoxy(j1,j2);//定位month月的光标
outmonth(i1);//调用函数输出月份
gotoxy(j1,j2=j2+1);
cout<<"日"<<"\t"<<"一"<<'\t'<<"二"<<'\t'<<"三"<<'\t'<<"四"<<'\t'<<"五"<<'\t'<<"六";
gotoxy(j1+8*day,j2=j2+1);//光标到每月第一天输出的位置
int k=1,i3;//i3用来确定下一月的起始位
for(int i2=day;i2<=6;i2++)
{
cout<<k<<"\t";k++;
}
if(day==7)//防止k=7时输出时空了一行
gotoxy(j1,j2=j2);
else
gotoxy(j1,j2=j2+1);
do{
i3=1;//每次循环重新赋值,保证输完一个月最后一行时知道下一月的第一天星期几
for(int m=1;m<=7;m++)
{
cout<<k<<"\t";k++;
if(k>date)break;
i3++;
}
gotoxy(j1,j2=j2+1);//光标定位到下一行输出
}
while(k<=date);//当k>一个月的天数时一个月就数完了
day=i3;//由i3可以知道下一月的第一天为星期几
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -