论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: 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:30

 /*** 与系统时间严格同步 并且可调时间 的电子表 ( MADE IN 127 ) ***/

  /*** ! 在程序运行过程中不要切换窗口,否则,会出错 . ***/

 #include<graphics.h>
 #include<math.h>
 #include<time.h>
 #define STEP 6.283183/60
 #define PI 3.141592

 #define X 307
 #define Y 150          /*** 中心坐标 ***/
 #define R 100
 #define R_OUT (R+4)    /*** 内外半径 ***/
 #define R_S (R-20)
 #define R_M (R-35)
 #define R_H (R-50)     /*** 各指针半径 ***/

 #define MIN 60                 /*** 设定延时 (分钟) ***/

 #define C_I 9

 int HH=0,MM=0;
 main()
  {
   int gd=DETECT,gm,second,record_s,minite,record_m,hour,i,pc=60;
   time_t t; float temp; char ch='#';
   int int_M=MIN;  pc=(MIN-int_M)*60;
   initgraph (&gd,&gm,""); setbkcolor (0);

   /*** 外观设计 ***/
   circle (X,Y,R); setfillstyle (1,2); floodfill (X,Y,15);
   circle (X,Y,R_OUT); setfillstyle (1,8); floodfill (X+R_OUT-1,Y,15);
   rectangle (X-2,Y-R+8-4,X+2,Y-R+8+4);
   rectangle (X-2,Y+R-8-4,X+2,Y+R-8+4);
   rectangle (X-R+8-4,Y-2,X-R+8+4,Y+2);
   rectangle (X+R-8-4,Y-2,X+R-8+4,Y+2);
   for (i=1;i<=60;i++)
    if (i!=15&&i!=30&&i!=45&&i!=60)
     if (i%5!=0) circle (X+(R-10)*cos(i*STEP),Y+(R-10)*sin(i*STEP),1);
     else circle (X+(R-10)*cos(i*STEP),Y+(R-10)*sin(i*STEP),2);
   rectangle (X+R_OUT,Y-6,X+R_OUT+6,Y+6);
   setfillstyle (1,8); floodfill (X+R_OUT+3,Y,15);
   temp=R_OUT*0.866;
   line (X-R_OUT/2-5,Y-temp+2,X-R_OUT/2,Y-temp-30);
   line (X-R_OUT/2+5,Y-temp-2,X-R_OUT/2+5,Y-temp-30);
   line (X+R_OUT/2-5,Y-temp-2,X+R_OUT/2-5,Y-temp-30);
   line (X+R_OUT/2+5,Y-temp+2,X+R_OUT/2,Y-temp-30);
   line (X-R_OUT/2,Y-temp-30,X-R_OUT/2+5,Y-temp-30);
   line (X+R_OUT/2-5,Y-temp-30,X+R_OUT/2,Y-temp-30);
   line (X-R_OUT/2+5,Y-temp-25,X+R_OUT/2-5,Y-temp-25);
   line (X-R_OUT/2+5,Y-temp-22,X+R_OUT/2-5,Y-temp-22);
   floodfill (X-R_OUT/2-2,Y-temp,15);
   floodfill (X+R_OUT/2+2,Y-temp,15);
   floodfill (X,Y-R_OUT-10,15);

   line (X-R_OUT/2-5,Y+temp-2,X-R_OUT/2,Y+temp+30);
   line (X-R_OUT/2+5,Y+temp+2,X-R_OUT/2+5,Y+temp+30);
   line (X+R_OUT/2-5,Y+temp+2,X+R_OUT/2-5,Y+temp+30);
   line (X+R_OUT/2+5,Y+temp-2,X+R_OUT/2,Y+temp+30);
   line (X-R_OUT/2,Y+temp+30,X-R_OUT/2+5,Y+temp+30);
   line (X+R_OUT/2-5,Y+temp+30,X+R_OUT/2,Y+temp+30);
   line (X-R_OUT/2+5,Y+temp+25,X+R_OUT/2-5,Y+temp+25);
   line (X-R_OUT/2+5,Y+temp+22,X+R_OUT/2-5,Y+temp+22);
   floodfill (X-R_OUT/2-2,Y+temp,15);
   floodfill (X+R_OUT/2+2,Y+temp,15);
   floodfill (X,Y+R_OUT+10,15);

   for (i=1;i<=MIN*60+1;i++)   /*** 该循环严格一秒一次 ( 捕捉系统时间 ) ***/
    {
     setcolor (15);
     circle (X,Y,5);  circle (X,Y,2); setfillstyle (1,0); floodfill (X,Y,15);
     settextstyle (2,0,0); setcolor (8); outtextxy (X-13,Y-52,"FIYTA");
     outtextxy (X-30,Y+35,"MADE IN 127"); setcolor (2);

     time (&t);      /*** 获取系统时间 ***/
     hour=(ctime(&t)[11]-'0')*10+(ctime(&t)[12]-'0');
     minite=(ctime(&t)[14]-'0')*10+(ctime(&t)[15]-'0');
     second=(ctime(&t)[17]-'0')*10+(ctime(&t)[18]-'0');
     if (ch==C_I) { HH=HH-hour; MM=MM-minite; }
     hour=(hour+HH)%24; minite=(minite+MM)%60;

     window (22,22,80,22); printf (" The current time is  ");
     if (hour<10) printf ("0"); printf ("%d : ",hour);
     if (minite<10) printf ("0"); printf ("%d : ",minite);
     if (second<10) printf ("0"); printf ("%d",second);
     window (35,20,80,20);
     printf (" "); if (int_M<10) printf ("0"); printf ("%d : ",int_M);
     if (pc<10) printf ("0"); printf ("%d ",pc);

     record_m=minite;
     hour=10*hour+minite/6-30;
     minite=2*minite+second/30-30;
     second-=15; record_s=second;

     setcolor (0);     /*** 写指针 ***/
     line (X+7*cos(PI+hour*STEP/2),Y+7*sin(PI+hour*STEP/2),X+R_H*cos(hour*STEP/2),Y+R_H*sin(hour*STEP/2));
     setcolor (1);
     line (X+13*cos(PI+minite*STEP/2),Y+13*sin(PI+minite*STEP/2),X+R_M*cos(minite*STEP/2),Y+R_M*sin(minite*STEP/2));
     setcolor (4);
     line (X+20*cos(PI+second*STEP),Y+20*sin(PI+second*STEP),X+R_S*cos(second*STEP),Y+R_S*sin(second*STEP)); record_s=second;

     ch='#';
     while (second==record_s)   /*** 此循环用来 " 监视 " 系统秒针的变化 ***/
      {
       time (&t); second=(ctime(&t)[17]-'0')*10+(ctime(&t)[18]-'0')-15;
       if (bioskey(1)&&(ch=getch())==C_I||ch==27)
        {
  if (ch==27) { closegraph (); exit (0); }
  window (22,22,80,22); printf ("     PLS enter the time : ");
  window (48,22,80,22);
  while (!bioskey(1))
  { printf ("00:00   \b\b\b\b\b\b\b\b"); delay (25000); printf ("        \b\b\b\b\b\b\b\b"); delay (25000); }
  scanf ("%d:%d:%d",&HH,&MM);
  if (HH<=23&&HH>=0&&MM>=0&&MM<=59) break; else { ch='#'; HH=0; MM=0; }
       }
      }

     setcolor (2);      /*** 覆盖指针 ( 由秒控制 ) ***/
     if ((record_m*60+60+second+15)%360==0||ch==C_I)
      line (X+7*cos(PI+hour*STEP/2),Y+7*sin(PI+hour*STEP/2),X+R_H*cos(hour*STEP/2),Y+R_H*sin(hour*STEP/2));
     if ((second+15)%30==0||ch==C_I)
      line (X+13*cos(PI+minite*STEP/2),Y+13*sin(PI+minite*STEP/2),X+R_M*cos(minite*STEP/2),Y+R_M*sin(minite*STEP/2));
     if (i!=60*MIN+1||ch==C_I)
      line (X+20*cos(PI+record_s*STEP),Y+20*sin(PI+record_s*STEP),X+R_S*cos(record_s*STEP),Y+R_S*sin(record_s*STEP));
     if (pc==0&&int_M!=0) pc=60; pc--; if (pc==59) int_M--;
    }

   window (20,22,80,22);
   printf (" The watch time out! Press any key ... "); getch ();

   closegraph ();
  }

视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058