c语言实现万年历程序

Posted nceuaprsf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言实现万年历程序相关的知识,希望对你有一定的参考价值。

一个下午加一个晚上完成这个万年历程序,这是我目前为止写的最长的程序了,完成后运行成功的那一瞬间还是有一些小成就感的。

这个程序目前有五个功能:

1.查看当前年历或月历;

2.搜索某年年历或某月月历;

3.查询某天是星期几;

4.判断某年是否为闰年

5.查询历史上某年是该年的第几天


代码如下:

-----------------------------------------------------------------------------------------------------------------------------------------------------

#include <stdio.h>
#include<math.h>
#include "time.h" 

int head()			//显示欢迎界面,返回功能值 
int select;
 printf("\\n\\n");
 printf("\\t\\t\\t<--欢迎使用万年历-->\\n\\n");
 printf("\\t\\t****************************************\\n");
 printf("\\t\\t请选择要使用的功能:\\n\\n");
 printf("\\t\\t\\t1.查看当年年历或当月月历\\n");
 printf("\\t\\t\\t2.搜素某年的年历或某月的日历\\n");
 printf("\\t\\t\\t3.查询历史上某日为星期几\\n");
 printf("\\t\\t\\t4.判断历史上某年是否为闰年\\n");
 printf("\\t\\t\\t5.查询历史上某天是该年的第几天\\n");
  printf("\\t\\t\\t6.退出\\n");
 printf("\\t\\t****************************************\\n");
 printf("\\t\\t\\t请选择<1,2,3,4,5,6>:"); 
 scanf("%d",&select) ;
 printf("\\n");
 return(select);



void searchhead(int year,int month)			//月历的表头 
	printf("\\t%d年%d月\\n",year,month);
	 printf("\\t***************************************************\\n")	;
	 printf("\\t日\\t一\\t二\\t三\\t四\\t五\\t六\\n"); 
	

int monthnum(int year,int month)			//返回月份多少天 
int a1[13]=0,31,28,31,30,31,30,31,31,30,31,30,31;
 int a2[13]=0,31,29,31,30,31,30,31,31,30,31,30,31;
 if(leapyear(year)==1)
 	
 		return(a2[month]);
 	
 else
 	
 		return(a1[month]);
 	



int leapyear(int year)			//判断是否为闰年 

	if(year%4==0&&year%100!=0||year%4==0&&year%400==0) 
		
			return(1);
		         
     else
	 	
	 		return(0);
	 	 
  

int  week(int year,int month,int day)			//根据蔡勒公式计算星期几 
int w ,c,y;
 if(month==1) 
 	
 		month=13;
 		year=year-1;
 	
  if(month==2) 
 	
 		month=14;
 		year=year-1;
 	
 y=year%100;
 c=(year/1000)*10+(year/100%10);
 if(y==0)
 	
 		c=c-1;
 	
 w=y+floor(y/4)+floor(c/4)-2*c+floor(26*(month+1)/10.0)+day-1;
while(w<0)
	
		w=w+7;
	
 if(w%7==0)
 	
 		return(7);
 	
return(w%7);



int function3()			//第三个功能查询历史上某日为星期几的模块 
int year=0,month=1,day=1;
 printf("-----查询历史上某日为星期几-----\\n");
 printf("\\n");
 do
 if(year<0)
 	
 		printf("\\t系统提示:您输入了错误的年份请从新输入...\\n");
 	
 printf("\\t请输入要查询的年份:");
 scanf("%d",&year);
 printf("\\n");
  while(year<0);
 
 do
 if(month<1||month>12)
 	
 		printf("\\t系统提示:您输入了错误的月份请从新输入...\\n");
 	
printf("\\t请输入%d年的第几月:",year);
 scanf("%d",&month);
 printf("\\n");
  while(month<1||month>12);
 
 do
 if(day<1||day>31)
 	
 		printf("\\t系统提示:您输入了错误的日期请从新输入...\\n");
 	
 printf("\\t请输入%d年%d月的第几天:",year,month);
 scanf("%d",&day);
 printf("\\n");
  while(day<1||day>31);
 printf("\\t您查询的%d年%d月%d号是星期%d\\n\\n",year,month,day,week(year,month,day));



void function4()			//功能四判断历史上某年是否为闰年模块 
int year=0;
 printf("-----判断历史上某年是否为闰年-----\\n");
 do
if(year<0)
 	
 		printf("\\t系统提示:您输入了错误的年份请从新输入...\\n");
 	
 printf("\\t请输入要查询的年份:");
 scanf("%d",&year);
 printf("\\n");
  while(year<0);
 if(leapyear(year)==1)
 	
 		printf("\\t您查询的%d年是闰年\\n\\n",year);	
 	
 else
 	
 		printf("\\t您查询的%d年不是闰年\\n\\n",year);	
 	



int function2()			//模块二:搜素某年的年历或某月的日历模块 
int year=0,month=1,i,j,spacenum,count;
  printf("-----搜素某年的年历或某月的日历-----\\n\\n");
 do
 if(year<0)
 	
 		printf("\\t系统提示:您输入了错误的年份请从新输入...\\n");
 	
 printf("\\t请输入要查看的年份:");
 scanf("%d",&year);
 printf("\\n");
  while(year<0);
 
 do
 if(month<0||month>12)
 	
 		printf("\\t系统提示:您输入了错误的月份请从新输入...\\n");
 	
 printf("\\t请输入查看%d年的第几月,若想查看%d年年历请输入零:",year,year);
 scanf("%d",&month);
 printf("\\n");
  while(month<0||month>12);
 
 
 if(month!=0)
 	
 	 searchhead(year,month)	;
	 spacenum=week(year,month,1);
	 if(spacenum!=7)			//输出空格 
	 	
	 	for(i=1;i<=spacenum;i++)
	 		
	 		printf("\\t ");
	 			
	 	
	 count=spacenum;
	 for(i=1;i<=monthnum(year,month);i++)	
	 	 	
	 	 		printf("\\t%d ",i);
	 	 		count++;
	 	 		if(count%7==0)
	 	 			
	 	 				printf("\\n");
	 	 				
	 		
 	
  if(month==0)
  	
  		for(j=1;j<=12;j++)
  			
  			 searchhead(year,j)	;
	 		 spacenum=week(year,j,1);
	 		 if(spacenum!=7)			//输出空格 
	 			
	 			for(i=1;i<=spacenum;i++)
	 			
	 			printf("\\t ");
	 				
	 			
	 		count=spacenum;
	    	for(i=1;i<=monthnum(year,j);i++)	
	 	 		
	 	 		printf("\\t%d ",i);
	 	 		count++;
	 	 		if(count%7==0)
	 	 			
	 	 				printf("\\n");
	 	 				
	 			
			   printf("\\n\\n");	
  			
  	
	 	


int nowyear()    //获取系统的年份     
	 
	time_t rawtime; 
	struct tm * timeinfo; 
	time ( &rawtime ); 
	timeinfo = localtime ( &rawtime );
	return( timeinfo->tm_year+1900) ;  

		

int nowmonth()    //获取系统的月份
	
	time_t rawtime; 
	struct tm * timeinfo; 
	time ( &rawtime ); 
	timeinfo = localtime ( &rawtime );
	return(timeinfo->tm_mon+1  ) ;	
	

int function1()			//模块一:查看当年年历或当月月历 
int k,i,j,spacenum,count;
  printf("-----查看当年年历或当月月历-----\\n\\n");
 printf("\\t您想查看今年的年历还是当月的月历,请输入1【年历】或0【月历】:");
 scanf("%d",&k);
 printf("\\n");
 if(k==0)
 	
 	 searchhead(nowyear(),nowmonth())	;
	 spacenum=week(nowyear(),nowmonth(),1);
	 if(spacenum!=7)			//输出空格 
	 	
	 	for(i=1;i<=spacenum;i++)
	 		
	 		printf("\\t ");
	 			
	 	
	 count=spacenum;
	 for(i=1;i<=monthnum(nowyear(),nowmonth());i++)	
	 	 	
	 	 		printf("\\t%d ",i);
	 	 		count++;
	 	 		if(count%7==0)
	 	 			
	 	 				printf("\\n");
	 	 				
	 		
 	
  if(k==1)
  	
  		for(j=1;j<=12;j++)
  			
  			 searchhead(nowyear(),j)	;
	 		 spacenum=week(nowyear(),j,1);
	 		 if(spacenum!=7)			//输出空格 
	 			
	 			for(i=1;i<=spacenum;i++)
	 			
	 			printf("\\t ");
	 				
	 			
	 		count=spacenum;
	    	for(i=1;i<=monthnum(nowyear(),j);i++)	
	 	 		
	 	 		printf("\\t%d ",i);
	 	 		count++;
	 	 		if(count%7==0)
	 	 			
	 	 				printf("\\n");
	 	 				
	 			
			   printf("\\n\\n");	
  			
  	
	 	




void function5()			//功能五:查询历史上某天是该年的第几天 
int year=0,month=1,day=1,i,s=0;
 int a[13]=0,31,29,31,30,31,30,31,31,30,31,30,31;
 int b[13]=0,31,28,31,30,31,30,31,31,30,31,30,31;
 printf("-----查询历史上某天是该年的第几天-----\\n");
 printf("\\n");
 do
 if(year<0)
 	
 		printf("\\t系统提示:您输入了错误的年份请从新输入...\\n");
 	
 printf("\\t请输入要查询的年份:");
 scanf("%d",&year);
 printf("\\n");
  while(year<0);
 
 do
 if(month<1||month>12)
 	
 		printf("\\t系统提示:您输入了错误的月份请从新输入...\\n");
 	
printf("\\t请输入%d年的第几月:",year);
 scanf("%d",&month);
 printf("\\n");
  while(month<1||month>12);
 
 do
 if(day<1||day>31)
 	
 		printf("\\t系统提示:您输入了错误的日期请从新输入...\\n");
 	
 printf("\\t请输入%d年%d月的第几天:",year,month);
 scanf("%d",&day);
 printf("\\n");
  while(day<1||day>31);
 s=s+day;
 if(leapyear(year)==1)
 	
 		for(i=1;i<month;i++)
 			
 				s=s+a[i];
 			
 	
 else
 	
 		for(i=1;i<month;i++)
 			
 				s=s+b[i];
 			
 	
 printf("\\t您查询的%d年%d月%d号是该年的第%d天\\n",year,month,day,s);





main()
int select;
 char ch;
	while(1)
		 select=head();
		  if(select==1)
			
				function1();
			 
		  if(select==2)
			
				function2();
			 
		  if(select==3)
			
				function3();
			 
		  if(select==4) 
		  	
		  		function4();	
		  	
		  if(select==5)
			
			 function5();
			  
		  if(select==6)
			
			 break;
			 
		
		 



以上是关于c语言实现万年历程序的主要内容,如果未能解决你的问题,请参考以下文章

万年历 编程

谁知道怎么用C语言编写万年历啊

求高手编写一个万年历的C语言程序

C语言实现万年历系统

C语言 万年历程序

如何用JavaScript编写一个万年历