| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3066 人关注过本帖, 1 人收藏
标题:求万年历的代码!这个好像是高手的活
只看楼主 加入收藏
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
以下是引用唏嘘草在2011-6-5 23:03:50的发言:

还要问一下啊那个predays=..+..+..看不懂呢

平年一年有365天。闰年的规则是每4年一闰,逢百年不闰,逢4百年又闰。
/4的部分计算有多少个4年一闰。这里包含了逢百不闰的部分,所以又减去/100,但这又多减了逢4百又闰的部分,所以再加/400。

呵呵,我还没见过别人给我的代码加的注释呢,介意发上来让我看看么?
既然你能加注释说明你懂了那段代码,那它也就是你的了,我不会和你争版权的
我比较反感的是拿走别人的代码自己毫不理解却在另一处炫耀的人。

重剑无锋,大巧不工
2011-06-05 23:17
bccn_2012
Rank: 6Rank: 6
等 级:侠之大者
帖 子:158
专家分:447
注 册:2011-5-14
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>



void Time();                //获取当前系统时间
void whatisit();            //查询某年某月某日是星期几
void leapyear();            //查询某年是否是闰年
int isleapyear(int);        //判断某年是否为闰年
int whatisita(int ,int );   //判断当天是星期几
void printyearday();        //打印某年全年月历
int everymonth(int,int);    //查询某月天数
void printmonth(int,int);   //打印月历
void printmonthday();       //打印某年某月月历
char *week[]={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};

void Time()
{
       time_t rawtime; 
       struct tm * timeinfo;               //struct tm 时间结构
       time ( &rawtime );                  // 获取系统时间
       timeinfo = localtime ( &rawtime );  //转换为当地时间
       printf( "          当前时间为: %4d-%02d-%02d %02d:%02d:%02d\n", 1900+timeinfo->tm_year,1+timeinfo->tm_mon,timeinfo->tm_mday,
        timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec ); 
      
}
    


void main()
{ 
    int n;
    Time();
    printf("          欢迎使用万年历系统! \n");
  while(1)
  {
   
   printf("          -----------------------------------\n");
   printf("          1. 查询某年某月某日是星期几\n");
   printf("          2. 查询某年是否是闰年      \n");
   printf("          3. 打印某年全年月历        \n");
   printf("          4. 打印某年某月月历        \n");
   printf("          0. 退出                    \n");
   printf("          -----------------------------------\n");
   printf("请选择操作:");
   scanf("%d",&n);
   switch(n)
   { case 1:whatisit();break;
     case 2: leapyear();break;
     case 3:printyearday();break;
     case 4:printmonthday();break;
     case 0:printf("感谢您的使用!\n");exit(0);
     default:printf("您的输入错误,请按要求输入!\n");break;
         }

  }

 
}


//-------------------------
void whatisit()
{ int y,m,d,s,sum,n,i,k=1;
  int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
  while(k)
  { printf("请依次输入年 月 日:");
    scanf("%d %d %d",&y,&m,&d);
    if(m<1||m>12||d<1||d>31){ printf("输入错误,请重新输入!\n");continue;}
    s=0;
    for(i=1;i<m;i++)
       s=s+a[i];
    s=s+d;
    if(isleapyear(y)&&m>2) s=s+1;
    sum=s;
    n=(y-1+(y-1)/4-(y-1)/100+(y-1)/400+sum)%7;
    printf("这天是:%s\n",week[n]);
    printf("是否继续查询(Y/N)?:");
    getchar();
    if((getchar())=='y'||(getchar())=='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;
   while(k)
   {
    printf("请输入年份:");
    scanf("%d",&y);
    if(isleapyear(y))  printf("%d年是闰年!\n",y);
    else printf("%d年不是闰年!\n",y);
    printf("是否继续查询(Y/N)?:");
    getchar();
    if((getchar())=='y'||(getchar())=='Y') k=1;
    else k=0;
   }
}
//----------------------
int whatisita(int y,int m)
{ int n,i,s=0;
  int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
  for(i=1;i<m;i++)
      s=s+a[i];
  if(isleapyear(y)&&m>2) s=s+1;
  s=s+1;
  n=(y-1+(y-1)/4-(y-1)/100+(y-1)/400+s)%7;
  return n;
}
//----------------------
void printyearday()
{ int y,val,sum,i,k=1;
  while(k)
  { printf("请输入要查询的年份:");
    scanf("%d",&y);
    for(i=1;i<=12;i++)
    { printf("%d年%d月:\n",y,i);
      val=whatisita(y,i);
      sum=everymonth(y,i);
      printmonth(val,sum);
      printf("\n");
      printf("\n");
    }
    printf("是否继续查询(Y/N)?:");
    getchar();
    if((getchar())=='y'||(getchar())=='Y') k=1;
    else k=0;
  }
}
//------------------------
int everymonth(int year,int month )
{  int s;
   int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
   s=a[month];
   if(isleapyear(year)&&month==2) s=s+1;
   return s;
}
//--------------------------
void printmonth(int val,int sum)
{ int n=1,i,j=0;
   char *x[7]={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
   for(i=0;i<7;i++)
    printf(" %s",x[i]);
    printf("\n");
    while(j<val) {printf("       ");j++;}
    while(n<=sum)
    { if((n+val-1)%7==0)
      printf("\n");
      printf("%7d",n);
      n++;
    }
}
//-----------------------
void printmonthday()
{ int y,val,sum,m,k=1;
  while(k)
  { printf("请输入要查询的年份 月份:");
    scanf("%d %d",&y,&m);
     printf("%d年%d月:\n",y,m);
      val=whatisita(y,m);
      sum=everymonth(y,m);
      printmonth(val,sum);
      printf("\n");
    printf("是否继续查询(Y/N)?:");
    getchar();
    if((getchar())=='y'||(getchar())=='Y') k=1;
    else k=0;
  }
}

//----------------------------------------


之前刚好写过。。应该符合你的要求。
2011-06-06 00:00
Seven1993Lee
Rank: 1
来 自:安徽省
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-6-6
收藏
得分:0 
路过。~小弟刚学C、想借鉴下大虾们的经验呐。。~
2011-06-06 01:30
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:0 
学习了

[ 本帖最后由 hjywyj 于 2011-6-6 06:53 编辑 ]
2011-06-06 06:51
唏嘘草
Rank: 2
等 级:论坛游民
帖 子:128
专家分:93
注 册:2011-6-4
收藏
得分:0 
回复 21楼 beyondyf
我已经发上去了
2011-06-06 11:09
唏嘘草
Rank: 2
等 级:论坛游民
帖 子:128
专家分:93
注 册:2011-6-4
收藏
得分:0 
回复 22楼 bccn_2012
我们只是学到指针,一些系统命令都没学!发给老师他坑定不信的
2011-06-06 11:11
bccn_2012
Rank: 6Rank: 6
等 级:侠之大者
帖 子:158
专家分:447
注 册:2011-5-14
收藏
得分:0 
回复 26楼 唏嘘草
你可以删去一些不用的啊!晕。。。
2011-06-06 11:38
bccn_2012
Rank: 6Rank: 6
等 级:侠之大者
帖 子:158
专家分:447
注 册:2011-5-14
收藏
得分:0 
回复 26楼 唏嘘草
把#inculde<time.h>
...
void Time();
...
void Time()
{
...

就是把有关Time()函数的
这部分删去就可以了啊!
2011-06-06 11:41
read_you
Rank: 1
等 级:新手上路
帖 子:9
专家分:4
注 册:2011-5-27
收藏
得分:0 
/*
选择功能:
1.查询某一年日历;
2.查询某一月日历;
3.查询某一天日历;
*/
#include<stdio.h>
int main()
{   
    void print_star();
    void print_star1();
    int range(int x,int y);
    long b[500][12][42];
    int k,j,q,m,n,i,s,t,judge=1;
    char *zodiac[12]={"鸡年","狗年","猪年","鼠年","牛年","虎年","兔年","龙年","蛇年","马年","羊年","猴年"};
    struct cricle
    {
        int a;
        struct cricle *next;
    };
    struct cricle a[7],*p,*head;
    head=&a[2];
    p=head;
    for(i=1;i<7;i++)
    {
        a[i-1].next=&a[i];
        a[i].a=i;
    }
    a[6].next=&a[0];
    a[0].a=0;
    for(k=0;k<500;k++)
    {
        for(j=0;j<12;j++)
        {
            m=p->a;
            n=range((k+1901),(j+1));
            for(i=m,q=1;q<=n;i++,q++)
            {
                b[k][j][i]=q;
                p=p->next;
            }
            for(;i<42;i++)
            {
                b[k][j][i]=0;
            }
            for(i=m-1;i>=0;i--)
            {
                b[k][j][i]=0;
            }
        }
    }
    while(judge)
    {
        printf("选择功能:\n1.查询某一年日历;\n2.查询某一月日历;\n3.查询某一天日历;\n选择:");
        scanf("%d",&s);
        if(s==1)
        {
            printf("\n请输入1901-2400年中要查询的年数(如2011):\n");
            scanf("%d",&k);
            if(k>2400||k<=1900)
            {continue;}
            print_star1();
            printf("          *    %d年   %s  *\n",k,zodiac[k%12-1]);
            print_star1();
            printf("\n\n");
            k-=1901;
            for(j=0;j<12;j++)
            {   
                print_star();
                printf("             *  %d年%d月  *\n",k+1901,(j+1));
                print_star();
                printf("                      六\n");
                for(i=0;i<42;i++)
                {
                   if(!(i%7))
                   printf("\n");
                   if(b[k][j][i]==0)
                   printf("      ");
                   else
                   printf("%6d",b[k][j][i]);
                }
                printf("\n\n\n");
               
            }
        }
        if(s==2)
        {
            printf("\n请输入1901-2400年中要查询的年月数(如2011.1):\n");
            scanf("%d.%d",&k,&j);
            if(k>2400||k<=1900)
            {continue;}
            printf("\n\n");
            print_star();
            printf("           *  %d年 %s %d月  *\n",k,zodiac[k%12-1],j);
            print_star();
            printf("                      六\n");
            k-=1901;
            j--;
            for(i=0;i<42;i++)
            {
                if(!(i%7))
                printf("\n");
                if(b[k][j][i]==0)
                printf("      ");
                else
                printf("%6d",b[k][j][i]);
            }
             printf("\n\n\n");
        }
        if(s==3)
        {   
            printf("\n请输入1901-2400年中要查询的年月及天数(如2011.1.1):\n");
            scanf("%d.%d.%d",&k,&j,&t);   
            if(k>2400||k<=1900)
            {continue;}
            k-=1901;
            j--;
            for(i=0;i<42;i++)
            {
                if(b[k][j][i]==t)
                    break;
            }
            k+=1901;
            ++j;
            if(!(i%7))
            {    printf("\n\n\n\n");
                print_star1();
                printf("         %d年 %s %d.%d日 星期天\n",k,zodiac[k%12-1],j,t);
                print_star1();
                printf("\n\n\n\n");
            }
            else
            {
                printf("\n\n\n\n");
                print_star1();
                printf("         %d年 %s %d.%d日 星期%d\n",k,zodiac[k%12-1],j,t,i%7);
                print_star1();
                printf("\n\n\n\n");
            }

        }
        printf("继续与否:\n\n继续请输入非0数,结束请输入0:\n");
        scanf("%d",&judge);
        if(!judge)
        {
            printf("\n\n");
            print_star1();
               printf("                 谢谢使用\n");
            print_star1();
            printf("\n\n\n\n");
        }
    }
    return 0;   
}   

int range(int x,int y)
{
    int n;
    if(y==1||y==3||y==5||y==7||y==8||y==10||y==12)
        n=31;
    else if(y==4||y==6||y==9||y==11)
        n=30;
    else
        if(((x%4==0)&&(x%100!=0))||(x%400==0))
          n=29;
        else
          n=28;
    return n;
}
void print_star()
{
    printf("********************************************\n");
}
void print_star1()
{
    printf("        *************************\n");
}



2011-06-06 14:41
唏嘘草
Rank: 2
等 级:论坛游民
帖 子:128
专家分:93
注 册:2011-6-4
收藏
得分:0 
回复 29楼 read_you
强悍的
2011-06-06 15:17
快速回复:求万年历的代码!这个好像是高手的活
数据加载中...
 
   



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

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025964 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved