看到网上有关历法的一些资料,于是自己动手写一个电子万年历,虽然功能还不是很强,但是实现了万年历的基本功能,由于写的很粗糙,所以Bug在所难免!打算以后再慢慢的更新,并强化功能。
程序如下:
/*程序名:电子万年历*/
/*功能:可以查出几乎任意一年的日历*/
#include<stdio.h>
#include<time.h>
#define LeapYear(y) ((y%4==0)&&(y%100!=0)||(y%400==0))
int getdays(int year, int month);
int getweek(int year, int month, int date);
void display(void);
int main()
{
display();
return 0;
}
int getdays(int year, int month)
{
int days[]={31,28,31,30,31,30,31,31,30,31,30};
if(LeapYear(year)&&month==2)
return 29;
else
return days[month-1];
}
int getweek(int year, int month, int day)
{
if(month==1||month==2){
month+=12;
--year;
}
return (day+1+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;
}
void display(void)
{
int curYear, curMonth, curDay, curWeek, curDays, weekone, i;
time_t t;
struct tm *ptr;
char *weekday[]={"Sun","Mon","Tue","Wen","Thu","Fri","Sat"};
char *monthday[]={"Jan","Feb","March","April","May","June","July","Aug","Sep","Oct","Nov","Dec"};
clrscr();
t=time(NULL);
ptr=localtime(&t);
curYear=ptr->tm_year+1900; curMonth=ptr->tm_mon+1; curDay=ptr->tm_mday; curWeek=ptr->tm_wday;
curDays=getdays(curYear,curMonth);
weekone=getweek(curYear,curMonth,1);
printf(" %4d-%2d-%2d/n", curYear, curMonth, curDay);
for(i=0;i<7;i++) printf("%4s", weekday[i]);
printf("/n");
for(i=1;i<weekone+1;i++) printf(" ");
for(;i<curDays+weekone;i++){
printf("%4d",i-weekone);
if(i%7==0) printf("/n");
}
printf("/nToday is %s %s %d %d/n", weekday[curWeek],monthday[curMonth-1],curDay,curYear);
getch();
}