VC++ 和EasyX=電子時鐘

#include<graphics.h>
#include<stdio.h>
#include<iostream>
#include<math.h>
#include<conio.h>
#include<windows.h>
#include<time.h>
#include<stdlib.h>
#include<WINDOWS.H>
#define UP 38
#define DOWN 40
#define ESC 27
#define TAB 9
#define PI 3.1415926
double h,m,s;
double x,x1,x2,y,W,y2;
char ch1;
  
using namespace std;




void timeupchange(int);
void timedownchange(int);
   
    int digithour(double);
    int digitmin(double);
    int digitsec(double);
    void digitclock(int,int,int);
    void clearcursor(int);
    void drawcursor(int);
    void clockhandle();
struct ti
{
int ti_min;
int ti_hour;
int ti_sec;
}t[1],a;
 
void main()
{
    int i,j;
   
    initgraph(640,480);


    line(82,430,558,430);
    line(70,62,70,418);
    line(82,50,558,50);
    line(570,62,570,418);
    line(70,62,570,62);
line(310,48,310,35);
outtextxy(290,18,"CLOCK");


    


    arc(70,50,94,74,89,179);
arc(550,50,570,74,0,90);


    setcolor(0xC0C0C0);
rectangle(270,15,350,35);
    setcolor(0x800080);
rectangle(270,350,350,370);


    setcolor(0xFCFCFC);
    for(i=290;i<=335;i+=39)
    for(j=317;j<=324;j+=7)
    {
       
        circle(i,j,1);
    }


   


    for(i=0,m=0.0,h=0.0;i<=11;i++,h++)
    {
        x=100*sin((h*60+m)/360*PI)+310;
        y=200-100*cos((h*60+m)/360*PI);
        
        circle(x,y,1);
    }//時鐘圓點


    for(i=0,m=0.0;i<=59;m++,i++)
    {
        x=100*sin(m/30*PI)+310;
        y=200-100*cos(m/30*PI);
       
        circle(x,y,1);
    }
    //分針圓點
setlinestyle(PS_DASHDOT);
line(70,418,82,430);
setlinestyle(PS_DASHDOT);
line(570,418,558,430);
    setcolor(0xFCFCFC);
    outtextxy(120,340,"Tab :Cursor move");
    outtextxy(120,370,"Up  :Time + +");
    outtextxy(370,340,"Down:Time - -");
    outtextxy(370,370,"Esc :Quit system!");
    outtextxy(292,352,"HELP");
    settextstyle(15,0,_T("宋體"));
outtextxy(100,110,_T("write it on"));
    outtextxy(100,140,_T("your heart"));
    outtextxy(100,170,_T("that every"));
    outtextxy(100,200,_T("day is the"));
    outtextxy(100,230,_T("best  of "));
    outtextxy(100,260,_T("the year."));


    outtextxy(450,140,_T("銘記在心:"));
    outtextxy(450,170,_T("每一天都是"));
    outtextxy(450,200,_T("一年中最好"));
    outtextxy(450,230,_T("的日子。"));




for( i=0;i<12;i++) 


     { 


         x=310+(int)(105*sin(30*i*2*PI/360)); 


         y=200-(int)(105*cos(30*i*2*PI/360)); 


switch(i) 


         { 


         case 0:outtextxy(x-5,y-5,"12");break; 


         case 1:outtextxy(x-5,y-5,"1");break; 


         case 2:outtextxy(x-5,y-5,"2");break; 


         case 3:outtextxy(x-5,y-5,"3");break; 


         case 4:outtextxy(x-5,y-5,"4");break; 


         case 5:outtextxy(x-5,y-5,"5");break; 


         case 6:outtextxy(x-5,y-5,"6");break; 


         case 7:outtextxy(x-5,y-5,"7");break; 


         case 8:outtextxy(x-5,y-5,"8");break; 


         case 9:outtextxy(x-5,y-5,"9");break; 


         case 10:outtextxy(x-5,y-5,"10");break; 


         case 11:outtextxy(x-5,y-5,"11");break; 


         } 


     } 
int a,b,a1,b1,n=0; 


     for(n=0;n<60;n++) 


     { 


     a=310+(int)(95 * sin(n*2*PI/60)); 


     b=200-(int)(95 * cos(n*2*PI/60)); 


     a1=310+(int)(85 * sin(n*2*PI/60)); 


     b1=200-(int)(85 * cos(n*2*PI/60)); 


     if(n%5==0) 


        setlinestyle(PS_DASHDOT);


     else 


         setlinestyle(PS_DASHDOT); 


     line(a1,b1,a,b); 


     } 




    clockhandle();


   
    getch();
    closegraph();


 
}


void clockhandle()                   
{
  
 SYSTEMTIME xx; 
 // 定義變量保存當前時間 
  GetLocalTime(&xx);

t[0].ti_hour=xx.wHour;
t[0].ti_min=xx.wMinute;
t[0].ti_sec=xx.wSecond;
                //設置當前系統時
    int k=0,count;
  
    h=t[0].ti_hour;
    m=t[0].ti_min;
s=t[0].ti_sec;


    x=50*sin((h*60+m)/360*PI)+310; /*時針的x座標*/
    y=200-50*cos((h*60+m)/360*PI);/*時針的y座標*/


    setcolor(0xFCFCFC);
    line(310,200,x,y); /*繪製時針*/


    x1=80*sin(m/30*PI)+310;/*分針的x座標*/
    W=200-80*cos(m/30*PI);/*分針的y座標*/
    line(310,200,x1,W);/*繪製分針*/


    digitclock(260,314,digithour(h));/*顯示小時值*/
    digitclock(308,314,digitmin(m)); /*顯示分鐘值*/


       // 定義變量保存當前時間


    setwritemode(R2_XORPEN); // 設置 XOR 繪圖模式
    char ch;


    for( count=2;ch!=27;)/*按下Esc鍵結束循環*/
    {   
      if(kbhit())
 ch=getch();


        setcolor(0x0000A8);
        h=t[0].ti_hour;
        m=t[0].ti_min;
   s=t[0].ti_sec;


        x2=98*sin(s/30*PI)+310;/*秒針的x座標值*/
        y2=200-98*cos(s/30*PI);/*秒針的y座標值*/
        line(310,200,x2,y2);/*繪製秒針*/
           Sleep(1000);


                SYSTEMTIME yy; 
          // 定義變量保存當前時間 
          GetLocalTime(&yy);
         t[0].ti_hour=yy.wHour;
    t[0].ti_min=yy.wMinute;
    t[0].ti_sec=yy.wSecond;
       
         while(t[0].ti_sec==s&&t[0].ti_min==m&&t[0].ti_hour==h)
        {   
            ch1=getch();
            if(kbhit())//如果有按鍵值則執行if語句
{  
while(ch1!=27)//用ch=_getch();會等待你按下任意鍵之後,把該鍵字符所對應的ASCII碼賦給ch,再執行下面的語句。
{
               
if(ch1==38)
{


             if(count==1)
{
 
              t[0].ti_hour++;
             if( t[0].ti_hour==24)  t[0].ti_hour=0;
}
            if(count==2)
{  
            t[0].ti_min++;
            if(t[0].ti_min==60) t[0].ti_min=0;
 //設置新的系統時間
}
           if(count==3)
  {   
          t[0].ti_sec++;
          if(t[0].ti_sec==60) t[0].ti_sec=0;
//設置新的系統時間
  }
}
if(ch1==40)
                    {
              if(count==1)
 {   
                t[0].ti_hour--;
                if(t[0].ti_hour==0) t[0].ti_hour=23;
                 //設置新的系統時間
          
 }
                if(count==2)
{     
                  t[0].ti_min--;
                  if(t[0].ti_min==0) t[0].ti_min=59;
                    //設置新的系統時間
}
               if(count==3)
  {    
                 t[0].ti_sec--;
                 if(t[0].ti_sec==0) t[0].ti_sec=59;
                    //設置新的系統時間
  }
  
}
if(ch1==9)
{
setcolor(0xFCFCFC);clearcursor(count);
                    setcolor(0);drawcursor(count);
                     count++;
}

                if(count==5)count=1;
}
}
        }
        setcolor(0);
digitclock(340,314,digitsec(s));
setcolor(0xFCFCFC);
        digitclock(340,314,digitsec(s)+1);/*數字時針增加1秒*/


        setcolor(0x0000A8);
        x2=98*sin(s/30*PI)+310;
        y2=200-98*cos(s/30*PI);
        line(310,200,x2,y2);/*在原來的地方繪製秒針,清除當前秒針*/


        if(t[0].ti_min!=m)/*若分針有變化,則清除當前分針*/
{
setcolor(0xFCFCFC);
        x1=80*sin(m/30*PI)+310;
        W=200-80*cos(m/30*PI);
        line(310,200,x1,W);/*繪製新的分針*/
        
         setcolor(BLACK); 
         digitclock(308,314,digitmin(m));
         m=t[0].ti_min;


setcolor(0xFCFCFC); 
        digitclock(308,314,digitmin(m));//顯示數字分


x1=80*sin(m/30*PI)+310;
W=200-80*cos(m/30*PI);
line(310,200,x1,W);
}


if((t[0].ti_hour*60+t[0].ti_min)!=(h*60+m))
{
setcolor(0xFCFCFC);
x=50*sin((h*60+m)/360*PI)+310;
y=200-50*cos((h*60+m)/360*PI);
line(310,200,x,y);/*繪製新的時針*/


   setcolor(BLACK); 
  digitclock(260,314,digithour(h));


h=t[0].ti_hour;


         setcolor(0xFCFCFC); 
digitclock(260,314,digithour(h));//數字


x=50*sin((h*60+m)/360*PI)+310;
y=200-50*cos((h*60+m)/360*PI);
line(310,200,x,y);
}
}



}


void timeupchange(int count)//處理光標上移的按鍵
  {
       


      if(count==1)
      {
 
          t[0].ti_hour++;
          if( t[0].ti_hour==24)  t[0].ti_hour=0;
 


      }
      if(count==2)
      {  
          t[0].ti_min++;
          if(t[0].ti_min==60) t[0].ti_min=0;
 //設置新的系統時間
      }
      if(count==3)
      {   
          t[0].ti_sec++;
          if(t[0].ti_sec==60) t[0].ti_sec=0;
//設置新的系統時間
      }


  }
void timedownchange(int count) //處理光標下移的按鍵
  {
      if(count==1)
      {   
          t[0].ti_hour--;
          if(t[0].ti_hour==0) t[0].ti_hour=23;
           //設置新的系統時間
          
      }
      if(count==2)
      {     
          t[0].ti_min--;
          if(t[0].ti_min==0) t[0].ti_min=59;
            //設置新的系統時間
      }
      if(count==3)
      {    
          t[0].ti_sec--;
          if(t[0].ti_sec==0) t[0].ti_sec=59;
           //設置新的系統時間
      }
  
  }
    void digitclock(int x,int y,int clock)//在指定位置顯示數字時鐘
     {
         char buffer1[3]="";
         if(clock==60) clock=0;
         sprintf( buffer1,"%d",clock);//文件方式
         outtextxy(x,y,buffer1); //文字輸出
     }
      int digithour(double h)//將double型的小時數換成int型
      {
          int i;
          for(i=0;i<24;i++)
          {
              if(h==i) return i;
          }
      }
      int digitmin(double m)
      {
          int i;
          for(i=0;i<60;i++)
          {
              if(m==i) return i;
          }
      }
      int digitsec(double s)
      {
          int i;
          for(i=0;i<60;i++)
          {
              if(s==i) return i;
          }
      } 
       void drawcursor(int count)//根據count的值,畫一個光標
       {  
           switch(count)
           {
               case 1:setcolor(0xFCFCFC);line(284,315,284,325);break;
               case 2:setcolor(0xFCFCFC);line(325,315,325,325);break;
               case 3:setcolor(0xFCFCFC);line(365,315,365,325);break;
           }
       }
       void clearcursor(int count)//根據count的值,清除一個光標
       {  
         
          
           switch(count)
           { 
               case 1:setcolor(BLACK);line(284,315,284,325);break;
               case 2:setcolor(BLACK);line(325,315,325,325);break;
               case 3:setcolor(BLACK);line(365,315,365,325);break;
           }

       }

     學C語言半個學期,和同學一起做的課程設計,還有很多bug,但值得記錄第一次。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章