
在c语言中使用函数来制作一个万年历,要求,可以知道每个月有多少天,每个月的第一天是星期几
2个回答
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
//是否闰年
#define IS_LEAP_YEAR(iYear) (((iYear) % 100 == 0) ? ((iYear) % 400 == 0) : ((iYear) % 4 == 0))
int Calendar(int iYear, int iMonth);
void main()
{
//获取今天的日期
struct tm *today;
time_t ltime;
time(<ime);
today = localtime(<ime);
// printf("%d-%02d-%02d %02d:%02d:%02d\n星期%d 当年第%d天\n",
// today->tm_year + 1900, today->tm_mon + 1, today->tm_mday,
// today->tm_hour, today->tm_min, today->tm_sec, today->tm_wday, today->tm_yday);
int iYear = today->tm_year + 1900;
int iMonth = today->tm_mon + 1;
do {
system("cls");
int ch = Calendar(iYear, iMonth);
if (ch == 27) break;
switch (ch)
{
case 75: //<--
iYear--;
break;
case 77: //-->
iYear++;
break;
case 80: //下箭头
iMonth++;
if (iMonth > 12)
{
iYear++;
iMonth = 1;
}
break;
case 72: //上箭头
iMonth--;
if (iMonth < 1)
{
iYear--;
iMonth = 12;
}
break;
case 71: //Home
iYear = today->tm_year + 1900;
iMonth = today->tm_mon + 1;
break;
}
} while (1);
}
//显示给定年月的日历
//返回值为获取的用户按键, 以确定下一步的操作
int Calendar(int iYear, int iMonth)
{
int i, j, iDays;
//初始化数组w的值为1至31
int w[31];
for (i = 0; i < 31; i++) w[i] = i+1;
//获取本月天数于iDays中
switch (iMonth)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
iDays = 31;
break;
case 4: case 6: case 9: case 11:
iDays = 30;
break;
case 2:
iDays = IS_LEAP_YEAR(iYear) ? 29 : 28;
break;
}
//显示 日历头
printf("\n %d年%d月 日历\n\n", iYear, iMonth);
printf(" 日 一 二 三 四 五 六\n");
printf("----------------------\n");
//获取参数指定年月的第一天是周几。保存在firstday.tm_wday中
struct tm firstday = {0};
firstday.tm_year = iYear - 1900;
firstday.tm_mon = iMonth - 1;
firstday.tm_mday = 1;
time_t ltime;
ltime = mktime(&firstday);
firstday = *localtime(<ime);
//处理1号前的留空
j = firstday.tm_wday; //周几
for (i = 0; i < j; i++)
{
printf(" "); //3个空格
}
//显示日历正文
for (i = 0; i < iDays; i++)
{
printf("%3d", w[i]);
if (++j == 7)
{
printf("\n");//逢七换行
j = 0;
}
}
if (j != 0) printf("\n");
//获取今天日期
time(<ime);
struct tm today = *localtime(<ime);
//显示 日历尾
printf("----------------------\n");
printf("今天是: %d年%d月%d日\n\n", today.tm_year + 1900, today.tm_mon + 1, today.tm_mday);
printf("←: 上一年 →: 下一年\n");
printf("↑: 上一月 ↓: 下一月\n\n");
printf("Home: 今天 Esc: 退出\n");
//获取用户按键 (不用按回车立即返回)
fflush(stdin);
clearerr(stdin);
int c = getch();
if (c == 0xe0 || c == 0) c = getch();
return c;
}
展开全部
long YearDays(int Year)
{ Year--;
return(Year*365+Year/4-Year/100+Year/400+1);
}
int LeapYear(int Year)
{ if(Year%4)return 0;
if(Year%100)return 1;
if(Year%400)return 0;
return 1;
}
int MonthDays(int Year,int Month)
{ const int MonDays[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(Year<=0||Month<1||Month>12)return 0;
if(Month!=2)return MonDays[Month];
return MonDays[2]+LeapYear(Year);
}
long TotalDays(int Year,int Month,int Day)
{ long Days=0L;
int i;
if(Month<=0)Month=1;
if(Month>12)
{ Month--;
Year+=Month/12;
Month%=12;
Month++;
}
for(i=1;i<Month;i++)
Days+=MonthDays(Year,i);
Days+=YearDays(Year);
return Days+Day-1;
}
int Week(int Year,int Month,int Day)
{ return TotalDays(Year,Month,Day)%7;
}
{ Year--;
return(Year*365+Year/4-Year/100+Year/400+1);
}
int LeapYear(int Year)
{ if(Year%4)return 0;
if(Year%100)return 1;
if(Year%400)return 0;
return 1;
}
int MonthDays(int Year,int Month)
{ const int MonDays[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(Year<=0||Month<1||Month>12)return 0;
if(Month!=2)return MonDays[Month];
return MonDays[2]+LeapYear(Year);
}
long TotalDays(int Year,int Month,int Day)
{ long Days=0L;
int i;
if(Month<=0)Month=1;
if(Month>12)
{ Month--;
Year+=Month/12;
Month%=12;
Month++;
}
for(i=1;i<Month;i++)
Days+=MonthDays(Year,i);
Days+=YearDays(Year);
return Days+Day-1;
}
int Week(int Year,int Month,int Day)
{ return TotalDays(Year,Month,Day)%7;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询