⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 code of calendar.cpp

📁 此源码是一个在控制台输出万年历的源码
💻 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 + -