#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<math.h>
int menu(); /*菜单函数*/
void operatemenu(); /*菜单处理函数*/
int assessyear(int year); /*润年判断函数*/
void howmanydays(int year,int *m); /*每月多少天函数*/
int yeardays(int year ); /*从公元0年到你输入的上一年共有多少天*/
int monthdays(int year,int yue,int *m); /*从公元零年到你输入的上一月共有多少天*/
void printyear(int year,int *m,int n); /*输出年日历*/
void printmonth(int year,int *m,int yue); /*输出月日历*/
void printrunnian(int year); /*输出年是润年还是非闰年*/
void main() /*主函数*/
{
operatemenu();
}
int menu() /*菜单函数*/
{
int chose;
system("cls"); /*清屏函数*/
printf("****************************\n");
printf(" 08 通信2班 王韬 \n");
printf(" 万年历系统 \n");
printf(" 1查看月日历 \n");
printf(" 2查看年日历 \n");
printf(" 3退出 \n");
printf("****************************\n");
fflush(stdin);
printf("请选择\n");
do{ /*用do while实现输错后重新输入*/
scanf("%d",&chose);
if(chose!=1&&chose!=2&&chose!=3)
printf("你输入错误请重新输入\n");
}
while(chose!=1&&chose!=2&&chose!=3);
return chose;
}
void operatemenu() /*菜单处理函数*/
{
int n=0,month[13],year,yue,k; /*month[13]用来存每月多少天的其中的month[0]没用设为0*/
printf("请输入数字,输入-1将不会执行下面的菜单选项,程序将不会被执行,慎重!\n");
scanf("%d",&k);
while(k!=-1) /*用while 循环实现菜单的重复选择*/
{
n=menu();
switch(n)
{
case 1:printf("查看月日历\n");
printf("请输入你想查看的年份和月份\n");
scanf("%d%d",&year,&yue);
printf("年份:%d,月份:%d\n",year,yue);
howmanydays(year,month);
printmonth(year,month,yue);
break;
case 2:printf("查看年日历\n");
printf("请输入你想查看的年份\n");
scanf("%d",&year);
printf("年份:%d\n",year);
howmanydays(year,month);
printyear(year,month,12);
break;
case 3:printf("退出系统\n");
exit(0);
break;
}
printf("请输入数字输入-1后菜单将不会再次被执行,慎重!\n");
scanf("%d",&k);
}
}
int assessyear(int year) /*判断润年或非润年的函数*/
{
int leap;
if(year%4!=0
)
leap=2;
else if(year%100!=0)
leap=1;
else if(year%400!=0)
leap=2;
else
leap=1;
return leap;
}
void howmanydays(int year,int *m) /*每月多少天函数*/
{
int i,n;
i=assessyear(year);
for(n=1;n<=7;n=n+2)
*(m+n)=31;
*(m+8)=31;*(m+10)=31;*(m+12)=31;
*(m+4)=30;*(m+6)=30;*(m+9)=30;*(m+11)=30;
*m=0;
if(i==1) *(m+2)=29;
else *(m+2)=28;
}
int yeardays(int year) /*从公元0年到你输入的上一年共有多少天*/
{
int y,j,day=0;
for(y=1;y<year;y++) /*从公元0年到你输入的年份的上一年计算出一共多少天*/
{
j=assessyear(year);
if(j==1)
day+=366;
else
day+=365;
}
return day;
}
int monthdays(int year,int yue,int *m) /*从公元零年到你输入的上一月共有多少天*/
{
int i,day=0;
day=yeardays(year);
for(i=1;i<yue;i++)
day+=(*(m+i));
return day;
}
void printmonth(int year,int *m,int yue) /*输出月日历*/
{
int leap,k=1,day,x;
printf("年份:%d月份:%d的日历\n",year,yue);
printf("星期日 星期一 星期二 星期三 星期四 星期五 星期六\n");
day=monthdays(year,yue,m);
day=day-3; /*输入的月份的上一个月到公元0年一月一日相差的天数*/
while(k<=*(m+yue)) /*每月有几天分别对应到星期几上去*/
{
leap=(day+k)%7;
for(x=0;x<leap;x++)
printf(" "); /*寻一号对应星期几*/
for(x=leap;x<=6;x++,k++)
if(k>*(m+yue)) /*当k超过本月的最大天数也就意味着它不能在和星期几对应了*/
continue;
else printf("%d号 ",k);
printf("\n");
}
printrunnian(year);
}
void printyear(int year,int *m,int n)
{
int day,i,k=1,leap,x;
day=yeardays(year);
day=day-3; /*从公元0年到你输入的年份的上一年相差几天*/
printf("年份:%d的日历\n",year);
for(i=1;i<=n;i++) /*一年的日历*/
{
printf("第%d的日历\n",i);
printf("星期日 星期一 星期二 星期三 星期四 星期五 星期六\n");
k=1; /*k重新赋值为一有利于到下个月1号的位置*/
while(k<=*(m+i)) /*一个月的日历*/
{
leap=(day+k)%7;
for(x=0;x<leap;x++)
printf(" ");
for(x=leap;x<=6;x++,k++)
if(k>*(m+i)) /*当k超过本月的最大天数也就意味着它不能在和星期几对应了*/
continue;
else
printf("%d号 ",k);
printf("\n");
} /*while循环结束*/
day=day+*(m+i);
printf("\n");
} /*for循环结束*/
printrunnian(year);
}
void printru
nnian(int year)
{
int n;
n=assessyear(year);
if(n==1)
printf("润年,谢谢使用!\n");
else函数printf
printf("非润年,谢谢使用!\n");
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论