VC++ 和EasyX=电子时钟

#include
#include
#include
#include
#include
#include
#include
#include
#include
#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,但值得记录第一次。

你可能感兴趣的:(C语言课程设计)