文档库 最新最全的文档下载
当前位置:文档库 › 遍历访问2000年~2099年的日历

遍历访问2000年~2099年的日历


/*预处理部分*/
# include

/*结构定义部分*/
typedef struct { //定义月结构
int yuesize; //当月中所包含的天数
int xvshu; //当月第一天相对于标准日的天序数
}Month; //Mouth为月结构类型名
typedef struct { //定义年结构
Month M[12]; //月结构数组用于存放当年的月信息
int yearsize; //当年所含的天数
}Year; //Year为年结构类型名

/*函数名称部分*/
void CreateYear (Year &S1,Year &S2,int x); //创建2000年后100年的日历信息
void Print (int x,int y,int z,int g); //由x值输出相应的星期
int PrintDay (Year S,int x,int y,int z); //日访问函数
int PrintMonth (Year S,int x,int y); //月访问函数
int PrintYear (Year S,int x); //年访问函数
void main (); //主函数

/*函数部分*/
void CreateYear (Year &S1,Year &S2,int x) { //创建2000年后100年的日历信息
int k;
if (x%4!=0) S1.yearsize=365;
else if ((x%100==0)&&(x%400!=0)) S1.yearsize=365;
else S1.yearsize=366;
for (k=0;k<=11;k++) {
if (k==1) {
if (S1.yearsize==365) S1.M[k].yuesize=28;
else S1.M[k].yuesize=29;
S1.M[k].xvshu=S1.M[k-1].xvshu+S1.M[k-1].yuesize;
}
else if ((k==0)||(k==2)||(k==4)||(k==6)||(k==7)||(k==9)||(k==11)) {
S1.M[k].yuesize=31;
if (k==0) {
if (x==2000) S1.M[k].xvshu=1;
else S1.M[k].xvshu=S2.M[11].xvshu+S2.M[11].yuesize;
}
else S1.M[k].xvshu=S1.M[k-1].xvshu+S1.M[k-1].yuesize;
}
else {
S1.M[k].yuesize=30;
S1.M[k].xvshu=S1.M[k-1].xvshu+S1.M[k-1].yuesize;
}
}
} //end CreateYear
void Print (int x,int y,int z,int g) { //由x值输出相应的星期
if (g%7==1) printf ("%d年%d月%d日是星期六\n",x,y,z);
else if (g%7==2) printf ("%d年%d月%d日是星期天\n",x,y,z);
else if (g%7==3) printf ("%d年%d月%d日是星期一\n",x,y,z);
else if (g%7==4) printf ("%d年%d月%d日是星期二\n",x,y,z);
else if (g%7==5) printf ("%d年%d月%d日是星期三\n",x,y,z);
else if (g%7==6) printf ("%d年%d月%d日是星期四\n",x,y,z);
else printf ("%d年%d月%d日是星期五\n",x,y,z);
} //end Print
int PrintDay (Year S,int x,int y,int z) { //日访问函数
int k;
if ((y<1)||(y>13)) {
printf ("月号输入错误\n");return 0;
}
else if ((z<0)||(S.M[y-1].yuesizeprintf ("日号输入错误\n");return 0;
}
else {
k=S.M[y-1].xvshu+z-1;
Print (x,y,z,k);
return 1;
}
} //end PrintDay
int PrintMonth (Year S,int x,int y) { //月访问函数
int k,l,p;
k=S.M[y-1].xvshu;
if (k==1) l=6;
else l=(k-2)%7;
printf (" Sun Mon Tue Wed Thu Fri Sat\n");
for (p=1;p<=l;p++) printf (" "); //为使输出整齐,要输入一些空格
for (p=1;p<=S.M[y-1].yuesize;p++) {
if (p<10) printf (" %d ",p); //为使输出整齐,要输入一些空格
else printf (" %d ",p); //为使输出整齐,要输入一些空格
if ((p+l)%7==0) printf ("\n

"); //为使输出整齐,要输入一个换行符
}
if ((p+l-1)%7!=0) printf ("\n"); //为使输出整齐,要输入一个换行符
return 1;
} //PrintMonth
int PrintYear (Year S,int x) { //年访问函数
int k;
printf (" %d年\n",x);
for (k=0;k<12;k++) {
printf (" %d年%d月\n",x,k+1);
PrintMonth (S,x,k+1);
if (k<11) printf ("\n");
}
return 1;
} //end PrintYear
void main () { //主函数
int menu,n,y,m,r;
Year Y[101];
printf ("以2000年1月1日(星期六)为标准日,可访问之后100年的日期\n");
printf ("\n");
for (n=2000;n<2100;n++) CreateYear (Y[n-1999],Y[n-2000],n);
printf ("0————————结束操作\n");
printf ("1————————访问年历\n");
printf ("2————————访问月历\n");
printf ("3————————访问日历\n");
printf ("\n");
printf ("请选择访问方式:");
scanf ("%d",&menu);
while (menu!=0) {
switch (menu) {
case 1:
printf ("请输入要访问的年号:");
scanf ("%d",&y);
if ((y>=2000)&&(y<2100)) {
PrintYear (Y[y-1999],y);
printf ("年历访问完毕\n");
}
else printf ("年号输入错误\n");
break;
case 2:
printf ("请输入要访问的年、月号:");
scanf ("%d%d",&y,&m);
if ((y>=2000)&&(y<2100)) {
if ((m<1)||(m>12)) printf ("月号输入错误\n");
else {
printf (" %d年%d月\n",y,m); //为使输出整齐,要输入一些空格
PrintMonth (Y[y-1999],y,m);
printf ("月历访问完毕\n");
}
}
else printf ("年号输入错误\n");
break;
case 3:
printf ("请输入要访问的年、月、日号:");
scanf ("%d%d%d",&y,&m,&r);
if ((y>=2000)&&(y<2100)) {
PrintDay (Y[y-1999],y,m,r);
printf ("日历访问完毕\n");
}
else printf ("年号输入错误\n");
break;
default:
printf ("选择错误\n");
break;
} //end switch
printf ("\n");
printf ("请选择访问方式:");
scanf ("%d",&menu);
} //end while
printf ("操作结束\n");
} //end main

相关文档