万年历查询 c++ 黑窗

c++刘军老师课上布置的作业

感觉非常有意思

自己一行一行敲出来Debug 还是很有成就感得

话不多说上图上代码




#include <iostream>
#include <iomanip>
using namespace std;

int un_leap_year[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //平年月份日 
int leap_year[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31};	//闰年月份日 
string chweek[7] = {"一","二","三","四","五","六","日"}; 		//周一到周日 

bool is_leap_year(int year)						//闰年判定 
{
	return (year % 4 == 0 && year % 100 == 0 || year % 400 == 0);
}

int cal_week(int year, int month, int day,int mode) 			//计算星期几 
{																
	if(month == 1 || month == 2)							 
	{
		month += 12;
		year --;
	}											//基姆拉尔森计算公式 
	int ans = (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7;
	
	if(mode == 1)									        //模式1输出星期几 
		cout<< chweek[ans] << endl << endl;						//非模式1只返回计算值	
	return ans;
} 

void put_month(int year, int month)								//输出月份 
{
	int flag = 0,day = 1;
	while(flag < 7)										//输出周一到周日 
	{
		cout<<setw(6)<<chweek[flag];
		flag ++;
	}
	cout<<endl<<"		"<<year<<'.'<<month<<".1 星期";
	flag = cal_week(year, month, 1, 1);
	
	cout<<"--------------------------------------------"<<endl;
	
	while(flag --)
		cout<<"      ";									//补齐每月不在的星期位置 
		
	flag = is_leap_year(year)?leap_year[month]:un_leap_year[month];
	
	while(day <= flag)
	{
		cout<<setw(6)<<day;								//输出日期 
		if(cal_week(year, month, day, 0) == 6)					        //周日换行 
			cout<<endl;
		day ++;
	}	
	
	cout<< endl <<"--------------------------------------------"<< endl << endl;
}

void put_year(int year)
{
	int month = 1;
	while(month < 13)
	{
		put_month(year, month);							        //重复调用月输出函数 
		month ++;
	}
		
}

void put_welcome(int flag)
{
	if(flag == 0)										//仅首次输出欢迎界面 
	{
		cout<<endl<<endl; 								//以后只输出查询界面 
		cout<<"	------------------------------------"<<endl;
		cout<<"	*                                  *"<<endl;
		cout<<"	*      欢迎进入万年历查询系统      *"<<endl;
		cout<<"	*             By 张峻溥            *"<<endl;
		cout<<"	*                                  *"<<endl;
		cout<<"	------------------------------------"<<endl<<endl;
	}
	cout<<"请选择您的查询内容;"<<endl<<endl;
	cout<<"	1.显示一年的日历;"<<endl;
	cout<<"	2.显示一月的日历;"<<endl;
	cout<<"	3.显示某一天是星期几;"<<endl;
	cout<<"	0.退出;"<<endl<<endl;
	cout<<"请输入按键(0-3);" <<endl; 
	
}

int main()
{
	int year, month, day, ans,flag = 0;
	while(1)
	{
		put_welcome(flag);								//仅首次输出欢迎界面 	
			flag = 1;
		int mode;
		cin>>mode;
		if(mode == 1)
		{
			cout<<"请输入一个年份:"<<endl;
			cin>>year;
			put_year(year);
		}
		else if(mode == 2)
		{
			cout<<"请依次输入年份,月份:"<<endl;
			cin>>year>>month;
			put_month(year,month);
		} 
		else if(mode == 3)
		{
			cout<<"请依次输入年份,月份,日份:"<<endl; 
			cin>>year>>month>>day;
			cout<<endl<<endl<<"	"<<year<<"年"<<month<<"月"<<day<<"日是:星期";
			cal_week(year, month, day, 1);
		}
		else										//非模式1,2,3退出 
		{
			break;
		}
	}
	return 0;
}

#include <iostream>
#include <iomanip>
using namespace std;
int un_leap_year[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //平年月份日 
int leap_year[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31};	//闰年月份日 
string chweek[7] = {"一","二","三","四","五","六","日"}; 	//周一到周日 
bool is_leap_year(int year)					//闰年判定 
{
	return (year % 4 == 0 && year % 100 == 0 || year % 400 == 0);
}
int cal_week(int year, int month, int day,int mode) 		//计算星期几 
{																
	if(month == 1 || month == 2)							 
	{
		month += 12;
		year --;
	}							//基姆拉尔森计算公式 
	int ans = (day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;
	if(mode == 1)						//模式1输出星期几 
		cout<< chweek[ans] << endl << endl;		//非模式1只返回计算值	
	return ans;
} 

void put_month(int year, int month)				//输出月份 
{
	int flag = 0,day = 1;
	while(flag < 7)						//输出周一到周日 
	{
		cout<<setw(6)<<chweek[flag];
		flag ++;
	}
	cout<<endl<<"		"<<year<<'.'<<month<<".1 星期";
	flag = cal_week(year, month, 1, 1);
	
	cout<<"--------------------------------------------"<<endl;
	
	while(flag --)
		cout<<"      ";					//补齐每月不在的星期位置 
		
	flag = is_leap_year(year)?leap_year[month]:un_leap_year[month];
	
	while(day <= flag)
	{
		cout<<setw(6)<<day;				//输出日期 
		if(cal_week(year, month, day, 0) == 6)		//周日换行 
			cout<<endl;
		day ++;
	}	
	cout<< endl <<"--------------------------------------------"<< endl << endl;
}
void put_year(int year)
{
	int month = 1;
	while(month < 13)
	{
		put_month(year, month);				//重复调用月输出函数 
		month ++;
	}
}
void put_welcome(int flag)
{
	if(flag == 0)						//仅首次输出欢迎界面 
	{
		cout<<endl<<endl; 				//以后只输出查询界面 
		cout<<"	------------------------------------"<<endl;
		cout<<"	*                                  *"<<endl;
		cout<<"	*      欢迎进入万年历查询系统      *"<<endl;
		cout<<"	*             By 张峻溥            *"<<endl;
		cout<<"	*                                  *"<<endl;
		cout<<"	------------------------------------"<<endl<<endl;
	}
	cout<<"请选择您的查询内容;"<<endl<<endl;
	cout<<"	1.显示一年的日历;"<<endl;
	cout<<"	2.显示一月的日历;"<<endl;
	cout<<"	3.显示某一天是星期几;"<<endl;
	cout<<"	0.退出;"<<endl<<endl;
	cout<<"请输入按键(0-3);" <<endl; 
}
int main()
{
	int year, month, day, ans,flag = 0;
	while(1)
	{
		put_welcome(flag);				//仅首次输出欢迎界面 	
			flag = 1;
		int mode;
		cin>>mode;
		if(mode == 1)
		{
			cout<<"请输入一个年份:"<<endl;
			cin>>year;
			put_year(year);
		}
		else if(mode == 2)
		{
			cout<<"请依次输入年份,月份:"<<endl;
			cin>>year>>month;
			put_month(year,month);
		} 
		else if(mode == 3)
		{
			cout<<"请依次输入年份,月份,日份:"<<endl; 
			cin>>year>>month>>day;
			cout<<endl<<endl<<"	"
			cout<<year<<"年"<<month<<"月"<<day<<"日是:星期";
			cal_week(year, month, day, 1);
		}
		else						//非模式1,2,3退出 
		{
			break;
		}
	}
	return 0;
}

以上!


猜你喜欢

转载自blog.csdn.net/zeolim/article/details/80230472