'시계'에 해당되는 글 1건

  1. 2009.09.16 C언어를 이용한 디지털 시계 만들기
posted by 알 수 없는 사용자 2009. 9. 16. 20:28

  우연히 고등학교 동창의 부탁으로 약 2주간 프로그래밍 과제를 도와주었습니다
  (엄밀히 따지면 다 제가 짠거라는.. ㄷㅅㄷ <<?!)
  군제대 이후에 C언어에 생각보다 많이 감이 떨어졌었는데
  아는 한도 내에서 코드를 짜다보니까
  코딩하는 감각은 좀 돌아온것 같네요. ^^
  C++이나 .NET같은경우 아직 손도 안대봐서
  GUI를 만드는법을 모르는데도, 그래픽 형식의 시계를 만들어야 하다보니
  GUI를 대신할 문자조합에서 엄청난 양의 코드가 들어가 버렸습니다
  지금 제가 봐도 좀 한심하다고 느껴질정도??
 
  출력화면은 다음과 같습니다
 
사용자 삽입 이미지
   뭐랄까, 숫자 하나하나를 문자조합으로 만들다보니, 코드가 쓸데없이 늘어나버렸지만
   나름 만들어서 실행시켜보니 뿌듯합니다. ㅎㅎ
   당연히, 디스플레이 부분을 제외하면 코드가 엄청 짧은 편입니다
   time.h 헤더파일을 불러오면,  헤더파일 내부의 구조체를 이용하여
   간단하게 시스템의 현재시간을 불러올 수 있고,
   이부분을 약간만 변형시켜서 조작해주면 이런 화면을 뽑을수 있습니다. ^^

    time.h 헤더에서 시간에 사용되는 요소들
struct tm
 {
  int tm_sec;   // Seconds
  int tm_min;   // Minutes
  int tm_hour;  // Hour (0--23)
  int tm_mday;  // Day of month (1--31)
  int tm_mon;   // Month (0--11)
  int tm_year;  // Year (calendar year minus 1900)
  int tm_wday;  // Weekday (0--6; Sunday = 0)
  int tm_yday;  // Day of year (0--365)
  int tm_isdst; // 0 if daylight savings time is not in effect)
};

   제가 Dev C++로 코딩하기 때문에 컴파일러 특성을 약간 탑니다.
   뭐 크게 상관은 없지만요 ㅎㅎ

#include<time.h>
#include<stdio.h>
#include<windows.h>

void gotoxy(int xpos, int ypos);
int select_num(int time_num,int pos_num);
int print_num(int printn, int loca_num);
int print_blank(void);

int main(void)
{
    int x, i;                                                                     
    int time_num[3] ;
       
    for(;;)                                                                    
    {  
        time_t timer;                                                             
        struct tm *t;                                                           
        timer = time(NULL);                                                     
        t = localtime(&timer);                                                    

        time_num[0] = t->tm_hour;                                                
        time_num[1] = t->tm_min;                                                 
        time_num[2] = t->tm_sec;                                                 

        gotoxy(0,3);
        if(time_num[0]>=13)                                                      
        {
             time_num[0] = time_num[0]-12;                                       
        }

        for(i = 0 ; i < 3 ; i++)                                              
        {
              x = time_num[i];                                                   
             select_num(x,i);                                                  
        }
        print_blank();  
        Sleep(1000);                                                                
     }
    System("PAUSE");                                                             
    return 0;
}
    출력부 함수까지 넣으면 상당히 복잡하고 지저분해 보이기 때문에 <<어이!
    출력부는 생략하구요.. (^^ 직접 한번 구현해 보세요, 제껀 부끄러워서. ㅠㅠ)
    출력에 쓰이는 함수가 3개, 화면에 뿌려주는 좌표를 위해서 gotoxy()를 사용하였습니다.
    time.h 헤더가 있으면 이렇게 간단하게 시간값을 불러와서 조정 할 수 있습니다.