You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

360 lines
6.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int monthdays[12] = {31,28,31,30,31,30,31,31,30,31,30,31} ;
char yearr(int year)
{
if (year%4==0&&year%100||year%400==0)
return 1;
else
return 0;
}
int midmonthday(int m1 , int m2, int y)
{
int i ;
int s ;
s = 0 ;
for(i = m1 + 1 ; i < m2 ; i++)
{
s =s+ monthdays[i-1] ;
if(i == 2)
{
if(yearr(y))
{
s++ ;
}
}
}
return s ;
}
int SameYearDays(int y1 , int m1 , int d1 , int y2 , int m2 , int d2)
{
int Days ;
if(m1 == m2)
{
Days =abs(d2 - d1) ;
}
else
{
Days = abs(monthdays[m1 - 1] - d1) ;
if(m1 == 2)
{
if(yearr(y1))
{
Days++ ;
}
}
if((m1 + 1) != m2)
{
Days += midmonthday(m1 , m2, y1);
}
Days += d2 ;
}
return Days;
}
int GetMidYearDays(int y1,int y2)
{
int days=0;
int i=0;
for (i=y1+1;i<y2;i++)
{
if (yearr(i-1))
{
days+=366;
}
else
days+=365;
}
return days;
}
int distanceYearDays(int y1 , int m1 , int d1 , int y2 , int m2 , int d2)
{
int days;
if (y1==y2)
{
days=SameYearDays( y1 ,m1 ,d1 , y2 , m2 ,d2);
}
else
{
days=monthdays[m1+1]-d1;
if((y1+1) != y2)
{
days+=GetMidYearDays(y1,y2);
}
days+=midmonthday(m1-1,13,y1);
if(m2==1)
{
days+=d2;
}
else
{
days+=midmonthday(1,m2,y2);
days+=d2;
}
}
return days;
}
int printfweek()
{
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n","周日","周一","周二","周三","周四","周五","周六");
} int GetWeek(int year,int month)
{
int m[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int day=0,week,i;
switch (month)
{
case 1:
day = 1;
break;
case 2:
day = m[0] + 1;
break;
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
{if (yearr(year) == true)
m[1] = 29;
for (i=0;i<month-1;i++)
{
day = day + m[i];
}
}
day = day + 1;
break;
}
week = ((year-1) + (year-1)/4 - (year-1)/100 + (year-1)/400 + day) % 7;
return week;
}
int tian(int month,int year)
{
int day;
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:day=31;break;
case 4:
case 6:
case 9:
case 11:day=30;break;
case 2:{
if(year%400==0||(year%4==0&&year%100!=0))
day=29;
else
day=28;
}
break;
}
return day;
}
int prifirst(int month,int year)
{
int b;
if (month<3)
{
month=month+12;
year--;
}
b=(1+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;
return b;
}
int prtmonth(int month)
{
switch (month)
{
case 1:printf("%26s\n","一月\n");break;
case 2:printf("%26s\n","二月\n");break;
case 3:printf("%26s\n","三月\n");break;
case 4:printf("%26s\n","四月\n");break;
case 5:printf("%26s\n","五月\n");break;
case 6:printf("%26s\n","六月\n");break;
case 7:printf("%26s\n","七月\n");break;
case 8:printf("%26s\n","八月\n");break;
case 9:printf("%26s\n","九月\n");break;
case 10:printf("%26s\n","十月\n");break;
case 11:printf("%26s\n","十一月\n");break;
case 12:printf("%26s\n","十二月\n");break;
}
}
int hello()
{ int a;
int year,month,i,c,week;
printf("--------------------\n");
printf(" 1:查询某一年日历\n");
printf(" 2:查询某年某月有几天\n");
printf(" 3:查询两天之间相差多少天\n");
printf(" 4查询某天是星期几\n") ;
printf(" 5判断是否为节假日\n");
printf(" 6输出某年月日历\n");
printf("请输入选项:\n") ;
scanf("%d",&a);
switch(a)
{
case 1:printf("年份\n:");
scanf("%d",&year);
for (month=1; month<=12; month++) {
c=1;
prtmonth(month);
printfweek();
week=prifirst(month,year);
if (week!=6)
for (i=0; i<=week; i++) {
printf("\t");
c++;
}
for (i=1; i<=tian(month,year); i++,c++)
{
printf("%d\t",i);
if (c%7==0)
{
printf("\n");
}
}
printf("\n");
}
return 0;
break;
case 2:int day;
printf("输入年月:\n");
scanf("%d%d",&year,&month);
day=tian(month,year);
printf("%d年%d月有%d天",year,month,day);
return 0;
break;
case 3:int Year1 ,Month1 ,Day1 ,Year2 ,Month2 ,Day2;
int Days ;
printf("输入第一个日期(年 月 日)\n");
scanf("%d%d%d",&Year1,&Month1,&Day1);
printf("输入第二个日期(年 月 日)\n");
scanf("%d%d%d",&Year2,&Month2,&Day2);
Days = distanceYearDays(Year1, Month1,Day1,Year2,Month2,Day2);
printf("两个日期相差的天数为:%d\n" , Days);
break;
case 4: int y,m,d,c,w;
printf ("输入年 月 日:");
scanf ("%d %d %d", &y, &m, &d);
if (m==1||m==2)
{
y--;
m+=12;
}
c = y / 100;
y = y - c * 100;
w = (c/4)-2*c+(y+y/4)+(13*(m+1)/5)+d-1;
while(w<0)
w += 7;
w %= 7;
if (w==0)
printf ("星期日");
else printf ("星期%d\n", w);
return 0;
break;
printf("\n");
case 5:
printf("请输入日期:\n");
scanf("%d%d%d",&year,&month,&day);
switch(month)
{
case 1:if(day==1)
printf("元旦\n");
break;
case 4:if(day==5)
printf("清明\n");
break;
case 5:if(day==1)
printf("劳动节\n");
break;
case 6:if(day==1)
printf("儿童节\n");
break;
case 7:if(day==1)
printf("建党节\n");
break;
case 8:if(day==1)
printf("建军节\n");
break;
case 9:if(day==10)
printf("教师节\n");
break;
case 10:if(day==1)
printf("国庆节\n");
break;
default:printf("error");
}printf("\n");
break;
case 6:
printf("输入年月:");
scanf("%d%d",&y,&m);
printf(" %d年%d月\n",y,m);
printf(" 一 二 三 四 五 六 日\n");
week = GetWeek(y,m);
if(week == 0)
week = 7;
for (i = 1;i < week; i++)
{
printf(" ");
}
int month[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
if (yearr(y) == 1)
month[1] = 29;
for(i=1;i<=month[m-1];i++)
{
printf("%3d",i);
if((i+week-1) % 7 == 0)
printf("\n");
}
printf("\n");
}
} int main()
{
int x;
while (1)
{
printf("-------------操作选项-----------\n");
printf(" 1:返回菜单 \n");
printf(" 2:退出程序 \n");
printf(" 3:执行操作 \n");
printf("\t" );
printf("选择要执行的操作: ");
scanf("%d",&x);
printf("\n");
if(x==2)
break;
switch(x)
{
case 1: break;
case 3: hello();break;
default:
printf("错误输出\n");
break;
}
}
return 0;
}