纯C语言写的日历

时间:2021-05-19 09:17:44
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
int a[31]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};
int main()
{
	int Leap(int );
	int Month(int );
	void print(int k,int t,int day);
	int i,j=0,k,m,n,t=-6;
	int day;

	int total=1;


	printf("请输入年份:");
	scanf("%d",&m);
	printf("请输入月份:");
	scanf("%d",&n);
	getchar();

	do
	{
		system("cls");
		printf("%d年%d月:\n",m,n);

		total=365*(m-1);
		for(i=1;i<m;i++)
			if(Leap(i)==1)
				total+=1;
		
		for(i=1;i<n;i++)
			total=total+Month(i);
		day=Month(n);
		if(Leap(m)==1 && n==2)
			day++;
		if(total>1)
			total--;
		if(total==0)
			k=(total+1)%7;
		else
			k=(total+2)%7;

		print(k,t,day);
		printf("请选择:");

		switch(getch())
		{
			case '>':
				if(n==12)
				{
					m++;
					n=1;
				}
				else
					n++;
				break;
			case '<':
				if(n==1)
				{
					m--;
					n=12;
				}
				else 
					n--;
				break;
			case '?':
				printf("请输入年份:");
				scanf("%d",&m);
				printf("请输入月份:");
				scanf("%d",&n);
				break;
			case '#':
					j=1;
				break;
		}

		if(j==1)
			break;
		putchar(10);
	}while(1);

	return 0;
	}

int Month(int n)
{
	int day;
	switch(n)
	{
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
				day=31;
			break;
		case 2:
				day=28;
			break;
		case 4:
		case 6:
		case 9:
		case 11:
				day=30;
			break;
		default:
			printf("您输入的月份有错, 请重新输入!\n");
	}
	return day;
}

int Leap(int m)
{//闰年返回1,否则返回0。
	int i=0;
	if(m%4==0 && m%100!=0 || m%400==0)
		i=1;
	return i;
}

void print(int k,int t,int day)
{
	FILE *fp;
	if((fp=fopen("abc.txt","w"))==0)
	{
		printf("打开失败\n");
		exit(1);
	}
	int i;
	printf("\n日      一      二      三      四     五      六\n");

	fprintf(fp,"\n日      一      二      三      四     五      六\n");
		printf("-------------------------------------------------------------\n");
		fprintf(fp,"---------------------------------------------------------\n");
		for(i=1;i<=k;i++)
		{
			printf("        ");
			fprintf(fp,"        ");
		}
		for(i=0;i<day;i++)
		{
			printf("%-8d",a[i]);
			fprintf(fp,"%-8d",a[i]);
			if(k==6)
			{
				printf("\n");
					printf("-------------------------------------------------------------\n");
				fprintf(fp,"\n");
					fprintf(fp,"-----------------------------------------------------------\n");
				t=0;
			}
			if(t!=0 && t%7==0)
			{
				printf("\n");
				fprintf(fp,"\n");
				printf("-------------------------------------------------------------\n");
				fprintf(fp,"-----------------------------------------------------------\n");
			}
			k++;
			t++;
		}
		printf("\n--------------------------\n");
		printf("	 选  项      \n");
		printf("   >  下一个月    \n");
		printf("   <  上一个月    \n");
		printf("   ? 自定义年月  \n");
		printf("   #  退出        \n");
		printf("--------------------------\n");
		fclose(fp);
}