在c语言中使用函数来制作一个万年历,要求,可以知道每个月有多少天,每个月的第一天是星期几

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在c语言中使用函数来制作一个万年历,要求,可以知道每个月有多少天,每个月的第一天是星期几相关的知识,希望对你有一定的参考价值。

#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(&ltime);
today = localtime(&ltime);

// 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(&ltime);

//处理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(&ltime);
struct tm today = *localtime(&ltime);

//显示 日历尾
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;

参考技术A 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;
本回答被提问者采纳

jquery手机端带农历的万年历插件

简要教程

这是一款使用jquery结合swiper.js来制作的手机端带农历的万年历插件。该万年历类似百度的万年历,带有农历日期。用户可以通过类似iphone的滚轮来选择不同的的日期。

 使用方法:

在页面中引入common.css、index.css和swiper-3.3.1.min.css样式文件,以及jquery、swiper-3.3.1.min.js、common.js文件。

下面是该手机端带农历的万年历插件的一些效果截图。

技术分享

 演示下载地址:http://www.datouwang.com/jiaoben/726.html

以上是关于在c语言中使用函数来制作一个万年历,要求,可以知道每个月有多少天,每个月的第一天是星期几的主要内容,如果未能解决你的问题,请参考以下文章

STC51单片机制作的万年历项目(可做毕设),增加了温度显示。

STC51单片机制作的万年历项目(可做毕设),增加了温度显示。

STC51单片机制作的万年历项目(可做毕设),增加了温度显示。

求高手编写一个万年历的C语言程序

谁知道怎么用C语言编写万年历啊

如何用JavaScript编写一个万年历