日历代码 (C语言)

#include<stdio.h>
#include<stdlib.h>
void put(void);
int A(int year);
int B(int year,int month,int date);
int week(int day2);
void show(int week); 
void rili(int day,int date,int year,int month);
int before(int year,int month);
int main()
{
	int year,month,date,day0,day1,sum,week0;         //day0接受输入年之前一共多少天 ,day1今年多少天 
A:	printf("请输入1900年以后的年份:");
	scanf("%d",&year);
	if(year<1900)
	{
		printf("请输入1900年以后的年份,请重新输入\n");
		goto A;	
	} 
B:	printf("请输入月份:");
	scanf("%d",&month);
	if(month>12)
	{
		printf("月份输入有误,请重新输入\n");
		goto B;	
	} 
C:	printf("请输入几号:");
	scanf("%d",&date); 
	if(date>31)          //不准确,先简单写一下 
	{
		printf("日期输入有误,请重新输入\n");
		goto C;	
	} 
	system("cls");
	A(year); 
	B(year,month,date);
	day0=A(year);
	day1=B(year,month,date);
	sum=day0+day1;
	week0=week(sum);
	printf("\n\n			%d年%d月%d日 ",year,month,date);
	//printf("!!!sum==%d",sum);
	show(week0);
	printf("\n");
	rili(sum,date,year,month);
	
	
	
	return 0;
}
/**********************************
*函数名:put
*返回值类型: i 
*形参: 无 
*函数描述: 输入年月日,再把参数传入 yunSuan函数 
***********************************/
//void put(void)
//{
//	int year,month,date;
//	printf("请输入年份:");
//	scanf("%d",&year);
//	printf("请输入月份:");
//	scanf("%d",&month);
//	printf("请输入几号:");
//	scanf("%d",&date); 
//	A(year,month,date); 
//	B(year,month,date);
//	
//}

/**********************************
*函数名:A
*返回值类型: int tianshu_0 
*形参: int year
*函数描述:计算输入的年之前一共有多少天 
*备注:1900年1月1日星期一 
***********************************/
int A(int year)
{
	int year_0=1900,month_0=1,date_0=1,a,tianshu_0=0;
	for(year_0=1900;year_0<year;year_0++)
	{
		if((year_0%4==0 && year_0%100!=0) || (year_0%400==0))
		{
			a=366;	
		}
		else
		{
			a=365;
		}
		tianshu_0=tianshu_0+a;
	}
	return tianshu_0;

} 

/**********************************
*函数名:B
*返回值类型: int tianshu_1 
*形参: int year,int month,int date
*函数描述:计算输入的年一共有多少天 
*
***********************************/

int B(int year,int month,int date) 
{
	int tianshu_1=0,a,i;
	if((year%4==0 && year%100!=0) || (year%400==0))
	{		
		for(i=1;i<month;i++)
		{
			if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12)
			{
				a=31;
			}
			else if(i==4 || i==6 || i==9 || i==11 )
			{
				a=30;
			}
			else if(i==2)
			{
				a=29;
			}
		
			tianshu_1 =tianshu_1 +a;
		}
			
	}
		
	else
	{
		for(i=1;i<month;i++)
		{
			if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12)
			{
				a=31;
			}
			else if(i==4 || i==6 || i==9 || i==11 )
			{
				a=30;
			}
			else if(i==2)
			{
				a=28;
			}
			tianshu_1=tianshu_1+a;
		}
	}	
	
	
	return tianshu_1+date;
	
	
}

/**********************************
函数功能:计算星期几 
*函数名:week
*返回值类型: int week 
*形参: day2
*函数描述:一共多少天取余7 
*
***********************************/
int week(int day2)             //day2=day0+day1
{
	int week;
	week=day2%7;
	//printf("***week==%d\n",week);
	return week;
} 

/**********************************
函数功能:显示中文星期几 
*函数名:show
*返回值类型: 无
*形参: week
*函数描述:一共多少天取余7 
*
***********************************/
void show(int week)
{
	if(week==1)
	{
		printf(" 星期一\n");	
	}	
	else if(week==2)
	{
		printf(" 星期二\n");	
	}
	else if(week==3)
	{
		printf(" 星期三\n");	
	}
	else if(week==4)
	{
		printf(" 星期四\n");	
	}
	else if(week==5)
	{
		printf(" 星期五\n");	
	}
	else if(week==6)
	{
		printf(" 星期六\n");	
	}
	else if(week==0)
	{
		printf(" 星期日\n");	
	}
	
}

/**********************************
函数功能:这年这月一共多少天 
*函数名:tian 
*返回值类型: int year,int month
*形参: 无 
*函数描述:
***********************************/
int tian(int year,int month)
{
	int i,a;
	i=month;
			
	if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12)
	{
		a=31;
		return a;
	}
	else if(i==4 || i==6 || i==9 || i==11 )
	{
		a=30;
		return a;
	}
	else if(i==2)
	{
		if((year%4==0 && year%100!=0) || (year%400==0))
		{
			a=29;
			return a;
		}
		else
		{
			a=28;
			return a;
		}
		
	}
} 


/**********************************
函数功能:显示日历 
*函数名:rili
*返回值类型: 无
*形参: int day,int date,int year,int month
*函数描述:
*
***********************************/
void rili(int day,int date,int year,int month)
{
	int i,j,k,f,g,a=1,yu1,b,monthDay;        //k是输入这个月的1号 
	i=day-date;	      //除去输入月份之前一共多少天 
	j=i%7;          //输入月份的前一个月的最后一天是星期几 
	monthDay=tian(year,month);
	//printf("monthDay=%d\n",monthDay);
//	printf("j=%d\n",j);
//	printf("day=%d\n",day);
//	printf("date=%d\n",date);

	
	printf("	一	二	三	四	五	六	日\n\n");
//	while(a<=j)
//	{
//		if(j==7)
//		{
//			break;
//		}
//		
//		//printf("	");
//		a++;
//	}
	for(f=tian(year,month-1)-j+1;f<=tian(year,month-1);f++)
	{
		if(j==7)
		{
			break;
		}
		printf("	%d",f);
	}

	for(k=1;k<=monthDay;k++)
	{

		printf("	%d",k);
		if((k+j)%7==0)
		{
			
			printf("\n");
		}
		
	} 
	yu1=before(year,month);
	for(g=1;g<=7-yu1;g++)
	{
		if(yu1==0)
		{
			break;
		}
		printf("	%d",g);
	}
	
	
} 

/**********************************
函数功能:包含这个月之前一共多少天 
*函数名:before
*返回值类型:int 
*形参: int year,int month
*函数描述:
*
***********************************/
int before(int year,int month)
{
	int a,tian2,day,yu,month_0;
	a=A(year);
	for(month_0=1;month_0<=month;month_0++)
	{
		day=tian(year,month_0);
		tian2=tian2+day;
	}
	yu=(a+tian2)%7;
	return yu;
} 




  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值