在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例C/C++语言基础 → c++ 制作 万年历 实例源码(C语言基础巩固与提高)

c++ 制作 万年历 实例源码(C语言基础巩固与提高)

C/C++语言基础

下载此实例
  • 开发语言:C/C++
  • 实例大小:0.01M
  • 下载次数:38
  • 浏览次数:311
  • 发布时间:2019-06-02
  • 实例类别:C/C++语言基础
  • 发 布 人:冰凌真帅
  • 文件格式:.cpp
  • 所需积分:0
 相关标签: 万年历

实例介绍

【实例简介】

                    巩固C语言基础,开发的万年历程序。

【实例截图】

                    from clipboard


from clipboard


from clipboard


【核心代码】

                    #include "time.h"       /*包含的头文件*/
#include "stdio.h"
#include "math.h"
#include "windows.h"
#include "conio.h"
 
#define   KEYNUMUp                   0x48         /*宏定义*/
#define   KEYNUMDown                 0x50  
#define   KEYNUMLeft                 0x4b   
#define   KEYNUMRight                0x4d
 
int eachyeartotal(int year,int month,int day);    /*函数声明*/
int counterdays(int year,int month,int day);
int nowtime(int year,int month,int day);
int week(int year,int month,int day);
int maxDay(int year,int month);
int isleap(int year);
void whatweek(int year,int month,int day);
void display(int year ,int month);
void display2(int year,int month);
void display3(int year,int month,int day) ;
void setDay1(int year,int month,int day);
void setDay2(int year,int month,int day);
void setDay3(int year,int month,int day);
void jieri(int month,int day);
void display1(int day);
void getmenu();
 
 
int main()                                              /*主函数*/
{
 int year,month,day,select; 
 while(1)
 {
  system("cls");
  getmenu();
   printf("  请输入相应数字:");                         /*菜单选择 */
   scanf("%d",&select);
   system("cls");
   switch(select)
   {
     case 1:                                   /*当选择为1时显示日期查询*/
     printf(" 日期查询:输入天数(如5):"); 
     scanf("%d",&day);
     if(day>0&&day<10000)                    /*日期选择从0-10000 */
      { display1(day);
       printf(" 提示  按任意键:返回菜单\n\n");
       setDay2( year,month, day); 
       }
        else
        system("cls");
        printf("  输入无效,重新输入!\n");
         break;
     
     case 2:                                  /*当选择为2显示月历*/
     printf("  月历查询:输入年月(如2011,6):");
     scanf("%d,%d",&year,&month);
     if(year>0&&year<10000&&month>=1&&month<=12)
      {
       display2(year,month);
       printf(" 提示  按←:上个月   按→:下个月   按其他键:返回菜单\n\n");
       setDay2( year,month, day);
       }
        else
        system("cls");
        printf("  输入无效,重新输入!\n");
        break;
     
     case 3:                                 /*当选择为3时显示日历*/
     printf("  日期显示:输入年月日(比如2011,6,23):");
     scanf("%d,%d,%d",&year,&month,&day);
     if(year>0&&year<10000&&month>=1&&month<=12&&day>=1&&day<=maxDay(year,month))
      {
       display3(year,month,day);
       printf(" 提示  按↑:前一天    按↓:后一天   按其他键:返回菜单\n\n");
       setDay3( year,month, day);
       }
        else
        system("cls");
        printf("  输入无效,重新输入!\n");
        break;
        
      case 4:
    printf("\n\n\n\n\n\n\n\n\n\n");
    printf("                  *******************************************\n\n");
    printf("                  *         感谢使用本万年历工具            *\n\n");
          printf("                  *                            制作人:第五组 *\n\n");
    printf("                  *******************************************\n\n");
    printf("\n\n\n\n\n\n\n\n");
      exit(0);
        
     default:                  /*当输入其他数字时,输入无效,重新输入*/
     system("cls");
     printf("  输入无效,重新输入!\n");
    
   }
 }
}
 
int isleap(int year)                                /*判断是否为闰年*/
{
if(year%4==0&&year%100!=0||year%400==0)
return 1;
else
return 0;
}
 
 
int maxDay(int year,int month)  /*每月的天数*/
{
 int a[]={31,28,31,30,31,30,31,31,30,31,30,31};            /*每个月中的天数*/
 if(isleap( year))  
 a[1]=29;                                     /*闰年2月份有29天*/
 return a[month-1];
}
 
 
int eachyeartotal(int year,int month,int day)       /*判断某天是一年中的第几天*/
{
 int i,sum=0;
 for(i=1;i<month;i )
 sum =maxDay(year,i);
 sum =day;
 return sum;
 }
 
 
int week(int year,int month,int day)           /*对天数进行判断确定是星期几*/
{
 int number=(year-1) (year-1)/4-(year-1)/100 (year-1)/400
  eachyeartotal(year,month,day);
 number=number%7  ;
 return number;
}
 
 
void display(int year ,int month)                           /*输出年月*/
{
 int max,number,i,j=1;
 max=maxDay(year,month);
 number=week(year,month,1);
 printf("  %4s  %4s  %4s  %4s  %4s  %4s  %4s\n","Sun","Mon","Tue","Wed",
"Thu","Fri","sat");
 for(i=0;i<number;i )  
 printf("      ");                             /*1号前的星期补空格*/
 while(j<=max)
 {
   printf("%6d",j);
   if (i%7==6)  
    printf("\n");                                    /* 每7格换一行*/
    i ;
    j ;
  }
  printf("\n\n");
}
 
 
void display1(int day)                                       /*输出年历*/
{    struct tm when;
   time_t now, result;
  
 char *a;
   time( &now );
   when = *localtime( &now );
 printf("\n");
 printf( "现在时间是 %s\n", asctime( &when ) );
   printf( "查询距离时间是: " );
  
   when.tm_mday = when.tm_mday day;
 
   if( (result = mktime( &when )) != (time_t)-1 )
 {   a=asctime( &when );
 printf( " %d天后时间是 %s\n", 
       day, a);
 }   else
       perror( "mktime failed" );
 
}
 
 
 
 
void display2(int year,int month)                             /*输出月历*/
{
 printf("\n%d 年  %d 月\n ",year,month);
 display(year,month);
}
 
 
void display3(int year,int month,int day)                     /*输出日历*/
{
 whatweek( year,month,day);
 jieri(month,day); 
 counterdays(year,month, day);
 }
 
 
 
int counterdays(int year,int month,int day)        /*判断今天距特定日期的天数*/
{
 int year1, days0,days1,month1,days, day1;
 time_t timep;
  struct tm *p;
   time(&timep);
    p=gmtime(&timep);
     year1=(1900 p->tm_year) ;
      month1=(1 p->tm_mon) ;
       day1=(p->tm_mday);              /*获取系统时间year1、month1、day1分别为年、月、日*/
        days0=(year-1)*365 (year-1)/4-(year-1)/100 (year-1)/400 eachyeartotal(year,month,day);
         days1=(year1-1)*365 (year1-1)/4-(year1-1)/100 (year1-1)/400 eachyeartotal(year1,month1,day1);
          days=days0-days1;             /*计算出两个日期之间的时间差*/
           printf("\n  今天距%d年%d月%d日还有%d天\n\n",year,month,day,days);
           return days;
            }
 
 
void whatweek(int year,int month,int day)                  /*判断是星期几*/

 int number;
 number=(year-1) (year-1)/4-(year-1)/100 (year-1)/400 eachyeartotal(year,month,day);
 number=number%7  ;
 switch( number)
 {
   case 0:
   printf( "\n  %d年%d月%d日是星期日",year,month,day);break;
   case 1:
   printf( "\n  %d年%d月%d日是星期一",year,month,day);break;
   case 2:
   printf( "\n  %d年%d月%d日是星期二",year,month,day);break;
   case 3:
   printf( "\n  %d年%d月%d日是星期三",year,month,day);break;
   case 4:
   printf( "\n  %d年%d月%d日是星期四",year,month,day);break;
   case 5:
   printf( "\n  %d年%d月%d日是星期五",year,month,day);break;
   case 6:
   printf( "\n  %d年%d月%d日是星期六",year,month,day);break;
   default:
   system("cls");
   printf(" 出现错误!\n" );
     }
}
 
 
void jieri(int month,int day)                           /*判断是否公历节日*/
{
 if(month==1)
 switch(day)
 {
   case 1:
   printf(",这天是元旦");
   } 
    if(month==2)
    switch(day)
     {
       case 14:
       printf(",这天是情人节");
        }
         if(month==3)
         switch(day)
       {
         case 8:
         printf(",这天是妇女节");
         break;
         case 12:
         printf(",这天是植树节");
       }
        if(month==4)
         switch(day)
          {
           case 1:
           printf(",这天是愚人节");
          } 
           if(month==5)
            switch(day)
            { 
              case 1:
              printf(",这天是劳动节");
              break;
              case 4:
              printf(",这天是青年节");
            }
             if(month==6)
              switch(day)
              {
               case 1:
               printf(",这天是儿童节");
              }
               if(month==7)
                switch(day)
                { 
                 case 1:
                 printf(",这天是建党节");
                }
                 if(month==8)
                  switch(day)
                   { 
                     case 1:
                     printf(",这天是建军节");
   break;
   case 23:
   printf(",今天是我的生日");
                    }
                    if(month==9)
                     switch(day)
                      {  
                       case 10:
                       printf(",这天是教师节");
                      }
                      if(month==10)
                       switch(day)
                        { 
                         case 1:
                         printf(",这天是国庆节");
                        }
    if(month==12)
    switch(day)
    {
    case 24:
    printf(",今天是平安夜");
    break;
    case 25:
    printf(",今天是圣诞节");
    }
    
                   
}
 
 
void setDay1(int year,int month,int day) /*通过键盘返回主菜单*/
{   char k;
   getch();
   k=getch();
 
     system("cls");
 getchar();
   }
   
 
 
 
void setDay2(int year,int month,int day) /*通过键盘"←""→"控制月历的变换*/
 { 
   char k;
   getch();
   k=getch();
   switch(k)
   {
     case KEYNUMLeft:                       /*"←"月份变小*/
          if(month<2)
          {
           month =12;
           year--;
           }
            if(year<1)
             { 
              system("cls");
              printf("  警告!超出范围!\n");
               break;
              }
            month--;
            display2(year , month);
            setDay2(year,month,day);
            break;
     case KEYNUMRight:/*"→"月份变小*/
          if(month>11)
           {
            month-=12;
            year ;
           }
            if(year<9999);
            month ;
            display2(year , month);
            setDay2(year,month,day);
            break;
      default: 
      system("cls");
   ;
     
   }
   
 }
 
 
 
void setDay3(int year,int month,int day)        /*通过键盘"↑""↓"控制日期的变换*/
{
    char k;
    getch();
    k=getch();
    switch(k)
    {
      case KEYNUMUp :                   /*"↑"日期变小*/
           if(day<2)
           {
            month--;
            day=maxDay(year,month);
            }
             if(month<1)
              {
               month =12;
               year--;
               }
                if(year<1)
                 {
                  system("cls");
                  printf(" 警告!超出范围!\n");
                  break;
                 }
                  day--;
                  display3(year , month,day);
                  setDay3(year,month,day);
                  break;
      case KEYNUMDown:               /*"↓"日期变大*/
           day ;
           if(day>maxDay(year,month))
           {
            day=1;
            month ;
           }
            if(month>12)
             {
               month-=12;
               year ;
             }
             if(year<10000);
                display3(year , month,day);
                setDay3(year,month,day);
                break;
       default: 
       system("cls");
       ;
   }
}
 
 
void getmenu() /* 显示菜单选择*/
{  
struct tm when;
  time_t now, result;
    int    days;
    time( &now );
  when = *localtime( &now );
  printf("                   ***************主菜单***************\n\n");
    printf("                   *        欢迎进入万年历系统        *\n\n");
  printf("                   *            现在时间是            *\n\n");
    printf("                         %s                            \n",asctime( &when ) );
   printf("                   *          1、日期查询             *\n\n");
   printf("                   *          2、月历查询             *\n\n");
   printf("                   *          3、日历查询             *\n\n");
   printf("                   *          4、退出系统             *\n\n");
   printf("                   ************************************\n\n");
 
}

标签: 万年历

实例下载地址

c++ 制作 万年历 实例源码(C语言基础巩固与提高)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警