论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

万年历,可查看任何日期对应的星期

文章类别:C语言程序设计 | 发表日期:2008-9-24 14:43:29

注重:下面的程序需要以命令行的格式运行,例如,把编绎好的可执行文件的名字为 filename,那要查看某2002/01/01就输入 filename 2002/02/01,要查看2002年1月份就输入filename 2002/01或filename2002/01/0。

 /*** 万年历 ***/
 
 /*** 命令行:
      若查看某一天,例如  calen 2001/12/28
      若查看某个月,例如  calen 2001/12/0  或  calen 2001/12
 ***/ 
 /**************************************************
        1. 以2000/01/01日为星期六为基准。
        2. dy为该年 1月1号 到2000年1月1号的 " 星期差 "
        3. dm为该月以前的月所引起的 " 星期差 "
  4. m2为二月所引起的 " 星期差 "
 **************************************************/

 main(int x,char **date)
  {
   int year=0,month=0,day=0,week;
   int d,i,dm,dy,m2;
   char WEEK[9];
   if (x==1)
    {
     printf ("\n ERROR! you forgot to enter the date you want to view\n");
     exit (0);
    }
   i=0; d=-1;
   while (date[1][i])
    {
     if ((date[1][i]=='/'||date[1][i]=='.')&&d==-1) { d=0; i++; continue; }
     if ((date[1][i]=='/'||date[1][i]=='.')&&d==0) { d=1; i++; continue; }
     if (d==-1) year=year*10+(date[1][i]-'0');
     if (d==0) month=month*10+(date[1][i]-'0');
     if (d==1) day=day*10+(date[1][i]-'0');
     i++;
    }
   if (month<1||month>12)
    { printf ("\n ERROR! the entered MONTH is invalid\n"); exit (0); }
   if (year==2000) { dy=0; m2=1; goto la_100; }
   if (year>2000) d=(year-1-2000)/4-(year-1-2000)/100+(year-1-2000)/400+1;
   else d=(year-2000)/4-(year-2000)/100+(year-2000)/400;
   dy=(year-2000)+d;     /*** 该年 1月1号 到2000年1月1号的 " 星期差 " ***/
   if((year%4==0&&year%100!=0)||(year%100==0&&year%400==0))
    m2=1; else m2=0;  /*** 该年是否润 ***/

   la_100:                    /**** la_100 ****/

          /*** 该月以前的月所引起的 " 星期差 " ***/
   switch (month)
    {
     case 1: dm=0; month=31; break;   /*** month 在此存放该月天数 ***/
     case 2: dm=3; month=d==1? 29:28; break;
     case 3: dm=3+m2; month=31; break;
     case 4: dm=6+m2; month=30; break;
     case 5: dm=1+m2; month=31; break;
     case 6: dm=4+m2; month=30; break;
     case 7: dm=6+m2; month=31; break;
     case 8: dm=2+m2; month=31; break;
     case 9: dm=5+m2; month=30; break;
     case 10: dm=m2; month=31; break;
     case 11: dm=3+m2; month=30; break;
     case 12: dm=5+m2; month=31; break;
    }
   if (day<0||day>month)
    { printf ("\n ERROR! the entered DAY is invalid\n"); exit (0); }
   week=(dy+dm+day-1+6)%7; if(week<0) week+=7;

   if (day>0)       /*** 判定查看类型 ***/
    {
     switch (week)
      {
       case 0: strcpy (WEEK,"SUNDAY"); break;
       case 1: strcpy (WEEK,"MONDAY"); break;
       case 2: strcpy (WEEK,"TUESDAY"); break;
       case 3: strcpy (WEEK,"WEDNESDAY"); break;
       case 4: strcpy (WEEK,"THURSDAY"); break;
       case 5: strcpy (WEEK,"FRIDAY"); break;
       case 6: strcpy (WEEK,"SATURDAY"); break;
       }
     printf ("\n this day is %s  \( %d \)\n\n OK!\n",WEEK,week);
    }
   else
    {
     week=++week%7;
     printf ("\n the calender of this month as following\n");
     printf ("\n *********************************\n");
     printf (" SUN  MON  TUE  WEN  THU  FRI  STA\n");
     for (i=0;i<week;i++) printf ("     ");
     for (i=1;i<=month;i++)
      { printf (" %2d  ",i); week++; if (week%7==0&&i!=month) printf ("\n"); }
     printf ("\n *********************************\n");
     printf ("\n OK!\n");
    }
  }

上一篇:{实例}与系统时间严格同步的手表 人气:6003
下一篇:{实例}合并文件程序 人气:4770
视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058