C语言实现万年历

C语言实现的万年历显示,按下上下左右按键来更换日期和年份,供大家参考,具体内容如下

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include<conio.h>
typedef struct today
{
 int day;
 int month;
 int year;
} today; 

int day_cankao[2][13]={
 {0,31,28,31,30,31,30,31,31,30,31,30,31},
 {0,31,29,31,30,31,30,31,31,30,31,30,31}
};
char *week[]=
{
 "Sun","Mon","Tue","Wen","Thu","Fir","Sat"
};
struct tm *todayuse;//struct tm定义c语言中time的结构体
today today_current;
int getweekday(today today_usenow)
{
 // w = y + [y/4] + [ c/4 ] – 2c+ [13 * (m+1) / 5] + d – 1
 //其中,c是年份的前两位,y是年份的后两位,m是月份,d是日期,这里需要注意的是,如果是1月和2月,c和y需要按照上一年来取值。
 int w=0; 

 int year=today_usenow.year;
 int month=today_usenow.month;
 if(today_usenow.month==1 || today_usenow.month==2)
 {
 month+=12;
 year--;
 }
 int y=year%100;
 int c=year/100;
 int m=month; 

 w=y + y/4 + c/4 - 2*c+ 26* (m+1) / 10 + today_usenow.day -1;
 while(w<0)
 {
 w+=7;
 }
 return (w%7); 

}
int is_leap(int year)
{ 

 if( (year%4==0 && year%100!=0) || (year%400==0))
 {
 return 1;
 }
 else
 return 0;
}
int getmonthdays(int year,int month)
{
 return day_cankao[is_leap(year)][month];
} 

void print_calendar(today today_usenow)
{
 printf("---------------------------\n");
 printf("Sun Mon Tue Wen Thu Fir Sat\n");
 int firstday=0;
 today today_usehere=today_usenow;
 today_usehere.day=1;
 int day=getweekday(today_usehere);//日期前
 //int daysuseafter
 int days=getmonthdays(today_usenow.year,today_usenow.month);//月总数
 // 0 1 2 3 4 5 6 // 6
 int daysbefore=0;
 if((today_usenow.month-1)==0)
 {
 //现在为1月,去年的十二月份
 daysbefore=getmonthdays(today_usenow.year-1,12);
 // printf("%d is",daysbefore);
 }
 else
 { 

 daysbefore=getmonthdays(today_usenow.year,today_usenow.month-1);
 }
 int daysbefoeit=daysbefore-day+1;
 printf("");
 int count=1;
 if(day==0)
 {
 daysbefoeit-=7;
 for(int i=0;i<day+7;i++)
 { 

  printf("%d ", daysbefoeit);
  daysbefoeit++; 

 }
 printf("\n");
 count=7;
 }
 else
 {
 for(int i=0;i<day;i++)
 {
  printf("%d ", daysbefoeit);
  daysbefoeit++;
 }
 count=day;
 }
 int m=1;
 for(int i=0;i<=6-day;i++)
 {
 if(m<10)
 {
  printf(" %d ",m);
 }
 else
 { 

  printf("%d ",m);
 } 

 m++;
 }
 printf("\n");
 if(day==0)
 {
 count=14;
 }
 else
 {
 count=7;
 }
 int hang=0;
 while(m<=days)
 {
 if(m<10)
 {
  printf(" %d ",m);
 }
 else
 { 

  printf("%d ",m);
 }
 hang++;
 if(hang==7)
 {
  printf("\n");
  hang=0;
 } 

 m++;
 }
 if(day==0)
 {
 count=days+7;
 }
 else
 {
 count=day+days;
 }
 int newmonth=1;
 for(int j=hang;j<7;j++)
 { 

 if(newmonth<10)
 {
 printf(" %d ",newmonth);
 }
 else
 { 

 printf("%d ",newmonth);
 } 

 newmonth++;
 }
 printf("\n");
 count=count+7-hang;
 for(int j=0;j< 42-count;j++)
 {
 if(newmonth<10)
 {
 printf(" %d ",newmonth);
 }
 else
 { 

 printf("%d ",newmonth);
 }
 newmonth++;
 } 

}
//int getmonth 

int main()
{
 time_t timep;
 struct tm *p;
 time(&timep);
 p =localtime(&timep); //此函数获得的tm结构体的时间,是已经进行过时区转化为本地时间
 //p = gmtime(&timep); //把日期和时间转换为格林威治(GMT)时间的函数 

 /*printf("Year: %d\n", 1900+p->tm_year);
 printf("Month: %d\n", 1+p->tm_mon);
 printf("Day: %d\n", p->tm_mday);
 printf("Hour: %d\n", p->tm_hour);
 printf("Minute: %d\n", p->tm_min);
 printf("Second: %d\n", p->tm_sec);
 printf("Weekday: %d\n", p->tm_wday);
 printf("Days: %d\n", p->tm_yday);
 printf("Isdst: %d\n", p->tm_isdst);
 */ 

 //printf("%d",day_cankao[0][12]);
 today_current.year=1900+p->tm_year;
 today_current.month=1+p->tm_mon;
 today_current.day= p->tm_mday;
 today use=today_current;
 int c1,c2;
 printf(" %d 年 %d 月 %d 日\n",today_current.year,today_current.month,today_current.day);
 print_calendar(today_current);
 while(1)
 {
 c1 = getch();
 if(c1==27)
 {
 printf("您已经退出系统");
 break;
 }
 if(c1==110)
 {
 printf(" %d 年 %d 月 %d 日\n",today_current.year,today_current.month,today_current.day);
 //printf("%d \n",getweekday(today_current)); 

 print_calendar(today_current);
 use=today_current;
 continue;
 }
 c2 = getch();
 //printf( "%d %d",c1,c2); 

 if(c1==224 && c2==72)
 {
 use.month+=1;
 if(use.month==13)
 {
 use.month=1;
 use.year+=1;
 }
 printf(" %d 年 %d 月 %d 日\n",use.year,use.month,use.day);
 //printf("%d \n",getweekday(today_current)); 

 print_calendar(use); 

 }
 if(c1==224 && c2==80)
 {
 use.month-=1;
 if(use.month==0)
 {
 use.month=12;
 use.year-=1;
 }
 printf(" %d 年 %d 月 %d 日\n",use.year,use.month,use.day);
 //printf("%d \n",getweekday(today_current)); 

 print_calendar(use);
 }
 if(c1==224 && c2==75)
 {
 use.year-=1;
 printf(" %d 年 %d 月 %d 日\n",use.year,use.month,use.day);
 //printf("%d \n",getweekday(today_current)); 

 print_calendar(use);
 }
 if(c1==224 && c2==77)
 {
 use.year+=1;
 printf(" %d 年 %d 月 %d 日\n",use.year,use.month,use.day);
 //printf("%d \n",getweekday(today_current)); 

 print_calendar(use);
 }
 printf("\n");
 printf("按上下按钮,进行月份变换\n");
 printf("按左右按钮,进行年份变换\n");
 printf("按ESC按键,退出系统\n");
 printf("按N按钮,查看当前日期\n");
 }
 //上 224 72
 //下 224 80
 //左 224 75
 //右 224 77
 //esc 27
 // n 110 

 return 0;
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言实现万年历程序

    本文实例为大家分享了C语言实现万年历程序,供大家参考,具体内容如下 #include <stdio.h> int year(int y) { if ((y%4==0) && (y%100!=0) || y%400==0) return 366; else return 365; } int main() { int y; int i,j,sum=0; int begin,week; int days[12]={31,28,31,30,31,30,31,31,30,31,30,3

  • C语言实现的一个万年历小程序

    该程序简单地输入一个年份(1901年之后的年份),随后程序输出该年份十二个月的日历. #include<stdio.h> #define Mon 1 #define Tues 2 #define Wed 3 #define Thur 4 #define Fri 5 #define Sat 6 #define Sun 0 #define January_days 31 #define February_days 28 #define March_days 31 #define April_day

  • C语言实现万年历小程序

    一.杂谈 大一学了C之后一直困惑,C到底怎么用?它不像HTML那么直观,也没有SQL那么常用,更没有Java那么功能强大,那他为何还存在,并依然火热呢? 答案很简单:编程语言是一家,C语言结构简单,但所蕴含的逻辑思维和其他语言大致相同,适合初学者. 编程不是一蹴而就,能力需要日积月累,推荐想我一样的初学者,大家自己动手玩玩简单的C程序! 二.万年历 像这样一个简单的全年日历,仔细观察不难发现由每个月的日历组成,每个月有最多6行,占6周,每周7天: 程序如下: 设定日历大小: int date[1

  • C语言实现万年历源码

    本文实例为大家分享了C语言实现万年历的具体代码,供大家参考,具体内容如下 主函数所在源码 #include <stdio.h> #include <stdlib.h> #include <string.h> int GetWeek(int year,int month,int day);//求今天是周几.周四就返回 4 .周日 返回 0:非法返回 -1: int GetDaysInMonth(int year,int month);/*求指定月总共多少天*/ int C

  • C语言实现万年历效果

    本文实例为大家分享了C语言实现万年历的具体代码,供大家参考,具体内容如下 #include <stdio.h> #include <stdlib.h> #include <string.h> #define str " SUN MON TUE WED THU FRI SAT " void menu(); //操作菜单 int leap(int year); //判断某年是不是闰年 int days_month(int year, int month)

  • C语言实现万年历小功能

    本文实例为大家分享了C语言实现万年历的具体代码,供大家参考,具体内容如下 一.学了C语言,相信大家都可以做出来.我们要实现的就是用户输入年,月,日.然后打印出来. 二.需要用到的知识点 1.for循环.2.if判断.3.函数的调用 如果您们学了图形库的话,可以贴图上去,效果更加好看.我没有素材,所以,直接用C语言来完成. 三.运行结果 四.我们用C语言代码实现 /*******************************************************************

  • C语言实现万年历

    C语言实现的万年历显示,按下上下左右按键来更换日期和年份,供大家参考,具体内容如下 #include <stdio.h> #include <stdlib.h> #include <time.h> #include<conio.h> typedef struct today { int day; int month; int year; } today; int day_cankao[2][13]={ {0,31,28,31,30,31,30,31,31,3

  • AJAX集天气\IP\多国语言翻译MP3(可同步LRC歌词显示)\万年历查询通

    '转发时请保留此声明信息,这段声明不并会影响你的速度! '****天枫AJAX集天气\IP\多国语言翻译MP3(可同步LRC歌词显示)\万年历查询通******** '作者:天枫 '网站:http://www.52515.net '电子邮件:chenshaobo@gmail.com 'WEB开发群:4635188 19182747 'QQ:76994859 '版权声明:版权所有,源代码公开,各种用途均可免费使用,但是修改后必须把修改后的文件 '发送一份给作者.并且保留作者此版权信息 '*****

  • C语言实现简单万年历

    本文实例为大家分享了C语言实现简单万年历的具体代码,供大家参考,具体内容如下 #include <stdio.h> #include<stdlib.h> int year, month; int run[12] = { 31,29,31,30,31,30,31,31,30,31,30,31 }; int ping[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; char week[7][10] = { "SUN",&

  • C语言计算日期差的方法示例

    本文实例讲述了C语言计算日期差的方法.分享给大家供大家参考,具体如下: 历史上,不同的人类聚居地可能有不同的历法,因而记录下来的资料中日期的换算就很麻烦.幸好今天我们统一使用公元纪年法.当然,这种历法对求两个日期差多少天也不是十分简便,但毕竟是可以忍受的. 下面的程序计算了两个日期的差值,两个日期都使用公元纪年法. #include <bits/stdc++.h> using namespace std; int to_day(int y, int m, int d) { int mon[]

随机推荐