C语言万年历

 /*
_________________________________________________

本程序简单明了,利用四个外部变量传入界面,生成万年历。

2013年5月1日
_________________________________________________
*/
#include<stdio.h>
#define Up 72
#define Down 80
#define Left 75
#define Right 77
#define Esc 27

int week=1;//当前月份第一天为星期几
int month=10; //当前月份
int year=1990;//当前年份
int days=31;//当前月份的天数

void interface(){//万年历的主界面
	int i;
	printf("\n\n");
	switch(month){
	case 1:printf("%-10s","January");break;
	case 2:printf("%-10s","February");break;
	case 3:printf("%-10s","March ");break;
	case 4:printf("%-10s","April");break;
	case 5:printf("%-10s","May");break;
	case 6:printf("%-10s","June");break;
	case 7:printf("%-10s","July");break;
	case 8:printf("%-10s","August");break;
	case 9:printf("%-10s","September");break;
	case 10:printf("%-10s","October");break;
	case 11:printf("%-10s","November");break;
	case 12:printf("%-10s","December");
	}
	printf("%10d\n",year);
	puts("--------------------------------------------------------------------");
	puts("Sunday    Monday    Tuesday   Wednesday Thursday  Friday    Saturday");
	for(i=1;i<=week;i++){
		printf("          ");
    }
	for(i=1;i<=days;i++){
		if(i!=0){
			printf("%-10d",i);
        }
		if((i+week)%7==0){ //i为界面空的日期,控制7个日期换一行。
			printf("\n");
        }
	}
	printf("\n");
	puts("--------------------------------------------------------------------");
	puts("[Press → next montch ]  [Press ← prior montch ]");
	puts("[Press ↓ next  year  ]  [Press ↑ prior year   ]");
	puts("[Press Esc exit       ] ");
	puts("                                                          ----by LR");
}

int month_days(int m){//获取月份的天数
	int d=31;
	if(m==4||m==6||m==9||m==11){
		d=30;
    }
	if(m==2){
		if(year%4==0&&year%100!=0||year%400==0){
			d=29;
        }
		else{ 
			d=28;
        }
	}
	return d;
}

void next_month(){//下一个月份
	month++;
	if(month==13){
		year++,month=1;//到了‘13’月份,增加1年,变成下一年1月份。
    }
	days=month_days(month);
	week=(week+month_days(month-1))%7;//算出这个月的第一天为星期几。
}

void prior_month(){//上一个月份
	month--;
	if(month==0){ 
		year--,month=12;//到了‘0’月份,减去1年,变成上一年12月份。
    }
	days=month_days(month);
	week=(week-days%7+7)%7;//算出这个月的第一天为星期几。
}

void next_year(){//下一个年份
	int i;
	for(i=0;i<12;i++){
		next_month();
    }
}

void prior_year(){//上一个年份
	int i;
	for(i=0;i<12;i++){
		prior_month();
    }
}

int main(){//搬红砖的小男孩原创作品,转载请标注。
	char A,i=1;
	while(1){
		system("cls");
		interface();
		printf("");
		A=getch();
		if(A==Right){
			next_month();
        }
		if(A==Left){
			prior_month();
        }
		if(A==Down){
			next_year();
        }
		if(A==Up){
			prior_year();
        }
		if(A==Esc){
			break;
        }
	}
	return 0;
}

 

©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值