|
#include <stdio.h>
#include <string.h>
#include<conio.h>
void main()
{ int num;
puts("welcome to use a perpetual calendar ");
puts("====================================");
puts("| Please select key: |");
puts("| 1. calculating the date |");/*算某年的任何一天是星期几*/
puts("| 2. print the months |");/*打印某年任意一个月的月份*/
puts("| 3. print the years |");/*打印某年的年历*/
puts("| 4. Return or exit |");/*退出或者返回*/
puts("====================================");
scanf("%d",&num);
clrscr();
switch(num)
{
case 1:{ int day,mn,yr,i,days=0,s,k;
int mont[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char wek[][9]={ {'S','u','n','d','a','y'},
{'M','o','n','d','a','y'},
{'T','u','e','s','d','a','y'},
{'W','e','d','n','s','d','a','y'},
{'T','h','u','r','s','d','a','y'},
{'F','r','i','d','a','y'},
{'S','a','t','u','r','d','a','y'}
};
printf("Inpute the date (year-month-day):");
scanf("%d-%d-%d",&yr,&mn,&day);
if (yr%4==0||yr%100==0||yr%400==0)
mont[2]=29;
else
mont[2]=28;
for (i=0;i<mn;i++)
days+=mont;
days+=day;
s=yr-1+(int)((yr-1)/4)-(int)((yr-1)/100)+(int)((yr-1)/400)+days;
k=s%7;
printf("%d-%d-%d is %s.",yr,mn,day,wek[k]);
break;
}
case 2:{
int months()
{
int yr,mth,mtd,wkd,mthd[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
printf("Input the Year and Month(Year-Month):");
scanf("%d-%d",&yr,&mth);
if (yr<0||mth<1||mth>12)
return 0;
if (JgYr(yr))
mthd[2]=29;
mtd=mthd[mth];
wkd=CalWkd(yr,mth);
showcld(wkd,mtd);
return 0;
};
int JgYr(int yr)
{
if (yr%4==0&&yr%100!=0||yr%100==0&&yr%400==0)
return 1;
else
return 0;
}
int CalWkd(int yr,int mth)
{
int ds=0,k,rst,wkd;
int mthd[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if (JgYr(yr))
mthd[2]=29;
for (j=1;k<mth;k++)
ds+=mthd;
ds+=1;
rst=yr-1+(int)((yr-1)/4)-(int)((yr-1)/100)+(int)((yr-1)/400)+ds;
wkd=rst%7;
return wkd;
}
showcld(int wkd,int mtd)
{
int dt=1,k,j=0;
printf("Sun\tMon\tTue\tWed\tThu\tFri\tSat\n");
for (i=0;i<wkd;k++)
{
printf("\t");
j++;
}
while (j!=7)
{
printf("%d",dt);
if (j<6)
printf("\t");
else
printf("\n");
dt++;
j++;
}
while (1)
{
for (j=0;j<7;j++)
{
printf("%d",dt);
if (j!=6)
printf("\t");
else
printf("\n");
if (dt!=mtd)
dt++;
else
return 0;
}
}
}
}
case 3:{
int b,s,w,year,month,day,days=0;
int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char *wek[7]={"sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"};
printf("input the date (year-month-day):\n ");
scanf("%d %d %d",&year,&month,&day);
if ((year%4==0)&&(year%100!=0)||(year%400==0))
mon[2]=29;
for (b=0;b<month;b++)
days=days+mon[f];
days=days+day;
w=year-1+(int)((year-1)/4)-(int)((year-1)/100)+(int)((year-1)/400)+days;
s=w%7;
printf("%d-%d-%d is %s\n",year,month,day,wek[s]);
return 0;
}
long int f(int year ,int month)
{if(month<3)return year-1;
else return year;
}
long int g(int month)
{if(month<3)return month+13;
else return month+1;
}
long int n(int year,int month,int day)
{return 1461L*f(year,month)/4+153L*g(month)/5+day;
}
int w(int year,int month,int day)
{return(int)((n(year,month,day)%7-621049L%7+7)%7);
}
int date[12][6][7];
int day_tbl[][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}};
int years()
{int sw,leap,e,w,q,wd,day,year;
char title[]=" SUN MON TUE WED THU FRI SAT";
printf("You want to know the year:");
scanf("%d%*c",&year);
sw=w(year,1,1);
leap=year%4==0&&year%100!=0||year%400==0;
for(e=0;e<12;e++)
for(w=0;w<6;w++)
for(q=0;q<7;q++)
date[e][w][q]=0;
for(e=0;e<12;e++)
for(wd=0,day=1;day<=day_tbl[leap][e];day++)
{date[e][wd][sw]=day;
sw=++sw%7;
if(sw==0)wd++;
}
printf("============================================================\n");
printf("\n=================================%d=========================\n",year);
for(e=0;e<6;e++)
{for(wd=0,q=0;q<7;q++)
wd+=date[5][k]+date[e+6][5][q];
wd=wd?6:5;
printf("%2d %s %2d %s \n",e+1,title,e+7,title);
for(w=0;w<wd;w++)
{printf(" ");
for(q=0;q<7;q++)
if(date[e][w][q])
printf("%4d",date[e][w][q]);
else printf(" ");
printf(" ");
for(q=0;q<7;q++)
if(date[e+6][w][q])
printf("%4d",date[e+6][w][q]);
else printf(" ");
printf("\n");
}
}
puts("================================================================");
puts("Please put any key");
getch();
}
case 4:{
clrscr();
puts("================================");
puts("| Thank you for your using! |");
puts("| Good bye! |");
puts("================================");
return;
}
}
}
我重新编译下,还是有点错误,尤其是CASE2和case3这两个。我觉得应该没有错的,真不知道错在哪里啊?
|