#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
//菜单
void menu()
{
printf("-----------------------------\n");
printf("\t 1.按月打印\n");
printf("\t 2.按年打印\n");
printf("\t 3.退出\n");
printf("-----------------------------\n");
}
//计算一个月多少天
int dayofmon(int y,int m)//y是年,m是月
{
int day;
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
day=31;
else if(m==4||m==6||m==9||m==11)
day=30;
else
day=(y%4==0&&y%100!=0||y%400==0)?29:28;
return day;
}
//求每月一号是周几
int week(int y,int m)
{
int s;
if(m==1||m==2)
{
m+=12;
y--;
}
s=(1+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7;//求每月一号是周几
return s;
}
//按月输出日历
void showmon(int y,int m)
{
int s,day,i;
printf("\t\t %d年%d月\n",y,m);
printf("sun\tmon\ttues\twed\tthu\tfir\tsat\n");
s=week(y,m);
day=dayofmon(y,m);
if(s==1)
printf("\t");
else if(s==2)
printf("\t\t");
else if(s==3)
printf("\t\t\t");
else if(s==4)
printf("\t\t\t\t");
else if(s==5)
printf("\t\t\t\t\t");
else if(s==6)
printf("\t\t\t\t\t\t");
for(i=1;i<=day;i++)
{
printf("%d\t",i);
if((i+s)%7==0)
printf("\n");
}
printf("\n");
}
//按年输出日历
void showyear(int y)
{
int m;
for(m=1;m<=12;m++)
{
showmon(y,m);
}
}
// 打印等待
void load()
{
printf("正在打印,请稍等\n");
printf("打印中 ");
printf("* ");Sleep(700);
printf("* ");Sleep(700);
printf("* ");Sleep(700);
printf("* ");Sleep(700);
printf("* ");Sleep(700);
printf("* ");Sleep(700);
}
//判断输入的月份是否符合规定
int judge(int m)
{
int again=m;//用于月份错误时,放进重新输入的月份
while(m<=0||m>12)
{
printf("您输入的月份不符合规定\n");
printf("请重新输入月份\n");
scanf("%d",&again);
m=again;
}
return again;
}
int main()
{
system("color F0");
int y,m;
int select;
printf("请输入你的选择项目\n");
menu();
scanf("%d",&select);
system("cls");//清屏
if(select==1)
{
printf("请输入你要查询的年月\n");
scanf("%d%d",&y,&m);
int again=m;
again=judge(m); //判断
m=again;
load();//打印等待
system("cls");//清屏
showmon(y,m);
}
else if(select==2)
{
printf("请输入你要查询的年\n");
scanf("%d",&y);
load();//打印等待
system("cls");//清屏
showyear(y);
}
}