万年历查询 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;
}

以上!


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include int main (void) { int year,month,j,i,day1,day2,one1,one2,w; printf("enter a year:"); scanf("%d",&year); printf("\n\n"); printf("---------------------%d---------------------\n\n",year); one1=((year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+1)%7; for(month=1;month<=12;month+=2) { printf(" ",month,year); printf(" \n",month+1,year); printf("-------------------- --------------------\n"); printf("日 一 二 三 四 五 六 日 一 二 三 四 五 六\n"); switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: day1=31;break; case 4: case 6: case 9: case 11:day1=30;break; default:if(!(year%4)&&(year0)||!(year%400)) day1=29; else day1=28; } for(j=1;j<=one1;j++) { if(one1==7) break; else printf(" "); } for(i=1;i<=7-one1;i++) printf("%2d ",i); printf(" "); switch(month+1) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: day2=31;break; case 4: case 6: case 9: case 11:day2=30;break; default:if(!(year%4)&&(year0)||!(year%400)) day2=29; else day2=28; } one2=(one1+day1)%7; for(j=1;j<=one2;j++) { if(one2==7) break; if(j!=7) printf(" "); } for(i=1;i<=7-one2;i++) printf("%2d ",i); printf("\n"); for(i=8-one1;i<=14-one1;i++) printf("%2d ",i); printf(" "); for(i=8-one2;i<=14-one2;i++) printf("%2d ",i); printf("\n"); for(i=15-one1;i<=21-one1;i++) printf("%2d ",i); printf(" "); for(i=15-one2;i<=21-one2;i++) printf("%2d ",i); printf("\n"); for(i=22-one1;i<=28-one1;i++) printf("%2d ",i); printf(" "); for(i=22-one2;i<=28-one2;i++) printf("%2d ",i); printf("\n"); for(i=29-one1;i<=35-one1&&i<=day1;i++) printf("%2d ",i); printf(" "); for(w=1;w<=35-day1-one1;w++) printf(" "); for(i=29-one2;i<=35-one2&&i<=day2;i++) printf("%2d ",i); printf("\n"); for(i=36-one1;i<=day1;i++) printf("%2d ",i); for(w=1;w<=35-day1-one1;w++) printf(" "); if(day1==31&&(one1==4||one1==3||one1==2||one1==1||one1==7)) printf(" "); if(day1==30&&(one1==4||one1==3||one1==2||one1==1||one1==7)) printf(" "); for(i=36-one2;i<=day2;i++) printf("%2d ",i); printf("\n-------------------- --------------------\n\n"); printf("\n"); one1=(one2+day2)%7; } printf("---------------------%d---------------------\n",year); getchar(); printf("按任意键退出"); getchar(); return 0; }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值