C语言实训万年历源代码.docx
《C语言实训万年历源代码.docx》由会员分享,可在线阅读,更多相关《C语言实训万年历源代码.docx(16页珍藏版)》请在冰点文库上搜索。
C语言实训万年历源代码
#include
#include
#include
#include
#include
#defineYEAR365
intnumday[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}};
intleap(intyear);
intcalday(inty,intm);
intcounterdays(intyear,intmonth,intday);
intweek(intyear,intmonth,intday);
inteachyeartotal(intyear,intmonth,intday);
intmaxDay(inty,intmonth);
voidprint(inty,intm,intw);
voidfestival(intyear,intmonth,intday);
intIsLeap(inty);
intguanli(inti);
voidrili(intyear,intmonth);
intrili1();
voidrili2();
voidrili3();
voidrili4();
voidrili5();
voidfan();
voidshow(intyear,intmonth,intdate,intsec,intmini,inthour);
intmain()
{
inti;
printf("***************************************\n");
printf("1.查询日历,输入年份:
\n");
printf("2.查询该月日历及对应星期,输入年份和月份:
\n");
printf("3.查询星期几及节日,输入年月日:
\n");
printf("4.距您输入日期还有多少天,输入日期:
\n");
printf("5.通过键盘上下控制不同年月日:
\n");
scanf("%d",&i);
guanli(i);
return0;
}
intguanli(inti)
{
switch(i)
{
case1:
rili1();returnmain();
case2:
rili2();returnmain();
case3:
rili3();returnmain();
case4:
rili4();returnmain();
case5:
rili5();returnmain();
}
return0;
}
intrili1()
{
intyear;
intn,i;
printf("输入年份:
");
scanf("%d",&year);
printf("thecalendaroftheyear%d\n",year);
printf("\n");
printf("=============================\n");
for(i=1;i<13;i++)
{
printf("%d月份\n",i);
rili(year,i);
}
n=leap(year);
return0;
}
voidrili2()
{
intyear,month,w;
printf("输入年月:
");
scanf("%d%d",&year,&month);
w=calday(year,month);
print(year,month,w);
}
voidrili3()
{
intyear,month,day,number;
printf("输入年月日:
");
scanf("%d%d%d",&year,&month,&day);
festival(year,month,day);
number=week(year,month,day);
printf("星期%d",number);
}
voidrili4()
{
intyear,month,day;
printf("输入年月日:
");
scanf("%d%d%d",&year,&month,&day);
eachyeartotal(year,month,day);
counterdays(year,month,day);
}
voidrili5()
{
intyear,month,date,sec,mini,hour;
fan();
show(year,month,date,sec,mini,hour);
}
intleap(intyear)
{
intn=(year%4==0&&year%100!
=0||year%100!
=0);
returnn;
}
voidrili(intyear,intmonth)
{
inti,day,first_day,flag,year1,year2;
inttemp=6;
flag=leap(year);
year1=year/100;
year2=year%100;
if(year>2000)
{
year1=year1-20;
day=year1/4;
day+=(YEAR+24)*year1+YEAR*year2+(year2-1)/4;
if(year>2000)
day++;
switch(month)
{
case1:
day;break;
case2:
day+=31;break;
case3:
day+=59+flag;break;
case4:
day+=90+flag;break;
case5:
day+=120+flag;break;
case6:
day+=151+flag;break;
case7:
day+=181+flag;break;
case8:
day+=212+flag;break;
case9:
day+=243+flag;break;
case10:
day+=273+flag;break;
case11:
day+=304+flag;break;
case12:
day+=334+flag;break;
}
day+=temp;
first_day=day%7;
}
else
{
year1=20-1-year;
year2=100-year2-1;
day+=(YEAR+24)*year1+YEAR*year2+year2/4;
switch(month)
{
case12:
day+=31;break;
case11:
day+=61;break;
case10:
day+=92;break;
case9:
day+=122;break;
case8:
day+=153;break;
case7:
day+=184;break;
case6:
day+=214;break;
case5:
day+=245;break;
case4:
day+=275;break;
case3:
day+=306;break;
case2:
day+=334+flag;break;
case1:
day+=365+flag;break;
}
day-=temp;
day=day%7;
first_day=(7-day)%7;
}
switch(month)
{
case1:
case2:
month=28+flag;break;
case3:
case4:
case5:
case6:
case7:
case8:
case9:
case10:
case11:
month=30;break;
case12:
month=31;break;
}
for(i=1;i<4*first_day;i++)
printf("");
for(i=0;i{
printf("%4d",i+1);
if((first_day+i)%7==6)
printf("\n");
}
printf("\n");
printf("===============================\n");
}
///////////////////////////////////////////////////////////
intcounterdays(intyear,intmonth,intday)
{
intyear1,days0,days1,month1,days,day1;
time_ttimep;
structtm*p;
time(&timep);
p=gmtime(&timep);
year1=(1900+p->tm_year);
month1=(1+p->tm_mon);
day1=(p->tm_mday);
days0=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day);
days1=(year1-1)*365+(year1-1)/4-(year1-1)/100+(year1-1)/400+eachyeartotal(year1,month1,day1);
days=days0-days1;
printf("\n今天距%d年%d月%d日还有%d天\n\n",year,month,day,days);
returndays;
}
inteachyeartotal(intyear,intmonth,intday)
{
inti,sum=0;
for(i=1;i{
sum+=maxDay(year,i);
}
sum+=day;
returnsum;
}
intIsLeap(inty)
{
if(y%4==0&&y%100!
=0||y%400==0)return1;
elsereturn0;
}
intmaxDay(inty,intmonth)
{
inta[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(IsLeap(y))
a[1]=29;
returna[month-1];
}
///////////////////////////////////////
voidfestival(intyear,intmonth,intday)
{
if(month==1&&day==1)printf(",这天是元旦");
if(month==2&&day==14)printf(",这天是情人节");
if(month==3)
switch(day)
{
case8:
printf(",这天是妇女节");break;
case12:
printf(",这天是植树节");
}
if(month==1&&day==1)printf(",这天是愚人节");
if(month==5)
switch(day)
{
case1:
printf(",这天是劳动节");break;
case4:
printf(",这天是青年节");
}
if(month==6&&day==1)printf(",这天是儿童节");
if(month==7&&day==1)printf(",这天是建党节");
if(month==8&&day==1)printf(",这天是建军节");
if(month==9&&day==10)printf(",这天是教师节");
if(month==10&&day==1)printf(",这天是国庆节");
printf("\n");
}
intweek(intyear,intmonth,intday)
{
intnumber=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day);
number=number%7;
returnnumber;
}
/////////////////////////////////////////////
voidprint(inty,intm,intw)
{
inti,l;
printf("Calendar%d-%02d\n",y,m);
printf("---------------------\n");
printf("SuMoTuWeThFrSa\n");
printf("---------------------\n");
for(i=0;iprintf("");
if(IsLeap(y))
l=1;
else
l=0;
for(i=1;i<=numday[l][m-1];i++)
{
printf("%-3d",i);
w++;
if(w%7==0)
printf("\n");
}
if(w%7)printf("\n");
printf("---------------------\n");
}
intcalday(inty,intm)
{
intd=0,w;
while(y>1910)
{
if(IsLeap(y))d+=366;
elsed+=365;
y--;
}
while(m>1)
{--m;
d+=numday[0][m-1];
}
w=(d+1)%7;
returnw;
}
//////////////////////////////////////////
voidshow(intyear,intmonth,intdate,intsec,intmini,inthour)
{
constcharmonth_str[][4]={"","Jan","Feb","Mar","Apl","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
constintmonth_day[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
inti,j,wdays,mdays,days;
for(i=1,days=0;i{
if(leap(i))
{
days+=366;
}
else
{
days+=365;
}
}
for(i=1;i{
if(i==2&&leap(year))
{
days+=29;
}
else
{
days+=month_day[i];
}
}
printf("%s.%d.%d%d:
%d:
%d\n",month_str[month],date,year,hour,mini,sec);
printf("一二三四五六日\n");
wdays=days%7;
for(j=0;j{
printf("");
}
if(month==2&&leap(year))
{
mdays=29;
}
else
{
mdays=month_day[month];
}
for(i=1;i<=mdays;i++)
{
if(i>1&&days%7==0)
{
printf("\n");
}
printf("%4d",i);
days=days+1;}
printf("\n---------------------------\n\n\n");
}
voidfan()
{
time_trawtime;
structtm*info;
intyear,month,date,sec,mini,hour;
charch;
time(&rawtime);
info=localtime(&rawtime);
year=info->tm_year+1900;
month=info->tm_mon+1;
date=info->tm_mday;
hour=info->tm_hour;
mini=info->tm_min;
sec=info->tm_sec;
while
(1)
{
show(year,month,date,sec,mini,hour);
printf("↑......上一年\n\n");
printf("↓......下一年\n\n");
printf("←....前一个月\n\n");
printf("→....后一个月\n\n");
printf("Esc.......退出\n\n");
ch=getch();
switch(ch)
{
case27:
//Ecsexit(0);
case-32:
//Navigator
ch=getch();
if(ch==77)
{//Right
year+=(month==12)?
1:
0;
month=month%12+1;
}
elseif(ch==75)
{
year-=(month==1)?
1:
0;
month=(month-2+12)%12+1;
}
elseif(ch==72)
year--;
elseif(ch==80)
year++;
system("cls");
}
}
}