| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 927 人关注过本帖, 1 人收藏
标题:贴一篇万年历
取消只看楼主 加入收藏
经典
Rank: 2
等 级:论坛游民
帖 子:17
专家分:10
注 册:2010-7-14
结帖率:50%
收藏(1)
已结贴  问题点数:1 回复次数:0 
贴一篇万年历
#include<stdio.h>
//************自定义函数声明************************
void screen();                            //系统主界面
void leapyear();                          //查询某年是否是闰年
int  IsLeapYear(int);                     //判断某年是否是闰年
void printmonthday();                     //查询某年某月的最大天数
int  everymonth(int,int);                  //计算每月的最大天数
void whatisit();                          //查询某年某月某日是星期几
int  whatisita(int,int);                   //计算当天是星期几
void printfyearday();                     //打印某年的全年日历
void printmonth(int,int);                 //打印某年某月月历
//*************主函数*******************************
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//定义全局变量每月的最大天数(不是闰年)
char *week[]={"日","一","二","三","四","五","六"};
void main()
{
    screen();                              //万年历主界面查询
                                      
}
//************万年历主界面查询********************
void screen()
{
    int n;
    while(1)
    {
        printf("\n*******************************\n");
        printf("*      万年历查询程序         *\n");
        printf("*  1.查询某年某月某日是星期几 *\n");
        printf("*  2.查询某年是否是闰年       *\n");
        printf("*  3.打印某年的全年日历       *\n");
        printf("*  4.查询某月的最大天数       *\n");
        printf("*  5.退出                     *\n");
        printf("*******************************\n");
        printf("    请输入要查询的选项:");
        scanf("%d",&n);                       //读取输入的数字
        switch(n)
        {
        case 1:
            whatisit();                     //查询某年某月某日是星期几                     
            break;
        case 2:
            leapyear();                      //查询某年是否是闰年
            break;
        case 3:
            printfyearday();                //打印某年的全年日历
            break;
        case 4:
            printmonthday();                 //查询某月的最大天数
            break;
        case 5:
            return;                         //退出
        default:
            printf("你输入错误,请按要求输入!\n");
            break;
        }
    }
}
//**************查询某年某月某日是星期几*******************
void whatisit()
{
    int y,m,d,s,k=1,sum,n,i;
    char yn;
    while(k)
    {
        printf("\n请输入年,月,日:\n");
        scanf("%d,%d,%d",&y,&m,&d);
        getchar();                         //吸收回车符
        s=0;
        for(i=1;i<m;i++)
            s=s+a[i];
        s=s+d;                            //累加天数
        if(IsLeapYear(y) && m>2)            //判断是否是闰年,且月份大于2
            s=s+1;
        sum=s;
        n=(y-1+(y-1)/4-(y-1)/100+(y-1)/400+sum)%7; //计算结果0-6
        printf("这天是%s\n",week[n]);              //显示星期几
        printf("是否继续查询(Y/N)?");
        scanf("%c",&yn);
        if(yn=='y'||yn=='Y')
            k=1;
        else
            k=0;
    }
}
//****************判断某年是否是闰年************************
int  IsLeapYear(int year)
{
    return(year%4==0&&year%100!=0||year%400==0);
}
//****************查询某年是否是闰年************************
void leapyear()
{
    int y,k=1;
    char yn;
    while(k)
    {
        printf("\n请输入要查询的年份:\n");
        scanf("%d",&y);
        getchar();                         //吸收回车符
        if(IsLeapYear(y))                  //判断是否是闰年
            printf("是闰年\n");
        else
            printf("不是闰年\n");
        printf("是否继续查询(Y/N)?");
        scanf("%c",&yn);
        if(yn=='y'||yn=='Y')
            k=1;
        else
            k=0;
    }
}
//*****************计算某月的最大天数******************************
int everymonth(int year,int month)
{
    int s;
    s=a[month];
    if(IsLeapYear(year)&&month==2)   //判断是否是闰年的2月份
        s=s+1;
    return s;
}
//*****************查询某年某月的最大天数**************************
void printmonthday()
{
    int y,m,value,k=1;char yn;
    while(k)
    {
        printf("\n请输入要查询的年份,月份:\n");
        scanf("%d,%d",&y,&m);
        getchar();                          //吸收回车符
        if(m<0||m>12)                       //判断输入的月份是否正确
        {
            printf("输入月份不对!!!\n");
            break;
        }
        value=everymonth(y,m);             //计算该年该月的最大天数
        printf("%d年%d月的最大天数为:%d\n",y,m,value);
        printf("是否继续查询(Y/N)?");
        scanf("%c",&yn);
        if(yn=='y'||yn=='Y')
            k=1;
        else
            k=0;
    }
}
//***************打印某年的全年日历*******************************
void printfyearday()
{
    int y,value,sum,i,k=1;
    char yn;
    while(k)
    {
        printf("\n请输入查询日历的年份:\n");
        scanf("%d",&y);
        getchar();                          //吸收回车符
        for(i=1;i<=12;i++)
        {
            printf("%d年%d月的信息:\n",y,i);
            value=whatisita(y,i);           //计算当天是星期几   
            sum=everymonth(y,i);            //计算某年某月最大天数
            printmonth(value,sum);          //打印一个月月历
            printf("\n");
        }
        printf("是否继续查询(Y/N)?");
        scanf("%c",&yn);
        if(yn=='y'||yn=='Y')
            k=1;
        else
            k=0;
    }
}
//*****************打印某年某月月历*************************
void printmonth(int value,int sum)
{
    int n,i=0,j;
    for(j=0;j<7;j++)
        printf(" %s",week[j]);            //显示"日-六"
    printf("\n");
    while(i<value)
    {
        printf("   ");                    //根据当月1号是星期几打印空格
        i++;
    }
    for(n=1;n<=7-value;n++)
        printf("  %d",n);                //打印当月的第一个星期
    while(n<sum)
    {
        if((n+value-1)%7==0)            //判断是否一周
            printf("\n"),printf(" ");  
         if(n/10>0)                     //判断是否大于10
            printf("%d ",n);            
        else
            printf("%d  ",n);
        n++;
    }
}
//**************计算当天星期几*******************
int whatisita(int y,int m)
{
    int n,i,s=0;
    for(i=1;i<m;i++)
        s=s+a[i];                       //累加天数
    if(IsLeapYear(y) && m>2)            //判断是否是闰年,且月份大于2
        s=s+1;
    n=(y-1+(y-1)/4-(y-1)/100+(y-1)/400+s+1)%7;
    return n;
}



2010-07-24 14:07
快速回复:贴一篇万年历
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017736 second(s), 10 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved