1 /********************************************
2 * 程序名称:MR.DUAN 的数字时钟
3 * 作 者:WindAutumn <duanxu@outlook.com>
4 * 最后修改:2012-7-25-PM
5 * 版 本 号:1.0
6 *
7 * //仅显示时钟
8 *
9 * 以后有空再修改
10 * *****************************************/
11
12 #include<stdio.h>
13 #include<Windows.h>
14 #include<time.h>
15
16 #define X_OFFSET 5
17 #define Y_OFFSET 5
18 #define MAXWIDE 80
19 #define MAXHIGH 24
20
21 void InitScreen(HANDLE hClock);
22 void HideCursor(HANDLE hClock);
23 void GotoXY(HANDLE hClock, int x, int y);
24 void PrintNumber(HANDLE hClock, int x, int y, int n, int mode);
25 void PrintTime(HANDLE hClock);
26
27 const char number[11][5]= {{0xe0,0xa0,0xa0,0xa0,0xe0},{0x20,0x20,0x20,0x20,0x20},
28 {0xe0,0x20,0xe0,0x80,0xe0},{0xe0,0x20,0xe0,0x20,0xe0},
29 {0xa0,0xa0,0xe0,0x20,0x20},{0xe0,0x80,0xe0,0x20,0xe0},
30 {0xe0,0x80,0xe0,0xa0,0xe0},{0xe0,0x20,0x20,0x20,0x20},
31 {0xe0,0xa0,0xe0,0xa0,0xe0},{0xe0,0xa0,0xe0,0x20,0xe0},
32 {0x00,0x40,0x00,0x40,0x00}
33 };
34
35 void main()
36 {
37 HANDLE hClock = GetStdHandle(STD_OUTPUT_HANDLE);
38 system("color 7b");
39 SetConsoleTitle("MR.DUAN 的时钟");
40 HideCursor(hClock);
41 InitScreen(hClock);
42 PrintTime(hClock);
43 }
44
45 void InitScreen(HANDLE hClock)// 打印周围红框框
46 {
47 int i;
48 SetConsoleTextAttribute(hClock, FOREGROUND_INTENSITY | FOREGROUND_RED |
49 BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED);// 红色字体,白色背景
50 GotoXY(hClock, 0, 0);
51 printf("╔");
52 for(i=1; i<(MAXWIDE-1)/2; i++)
53 printf("═");
54 printf("╗");
55
56 for(i=1; i< MAXHIGH; i++)
57 {
58 GotoXY(hClock, 0, i);
59 printf("║");
60 GotoXY(hClock, MAXWIDE-2, i);
61 printf("║");
62 }
63
64 GotoXY(hClock, 0, MAXHIGH);
65 printf("╚");
66 for(i=1; i<(MAXWIDE-1)/2; i++)
67 printf("═");
68 printf("╝");
69
70 GotoXY(hClock, 0, 0);
71 }
72
73 void HideCursor(HANDLE hClock)
74 {
75 CONSOLE_CURSOR_INFO cursor_info = {1, 0};
76 SetConsoleCursorInfo(hClock, &cursor_info);
77 }
78
79 void GotoXY(HANDLE hClock, int x, int y)
80 {
81 COORD coord;
82 coord.X = x;
83 coord.Y = y;
84 SetConsoleCursorPosition(hClock, coord);
85 }
86
87 void PrintNumber(HANDLE hClock, int x, int y, int n, int mode)
88 {
89 int i,j;
90 char temp;
91 char * string = mode? "□":" ";
92 for(i=0; i<5; i++)
93 {
94 GotoXY(hClock,x,y+i);
95 for(j=0; j<3; j++)
96 {
97 temp = number[n][i]<<j & 0x80;
98 if(temp == (char) 0x80)
99 printf(string);
100 else printf(" ");
101 }
102 }
103 }
104
105 void PrintTime(HANDLE hClock)
106 {
107 time_t rawtime = time(0);
108 struct tm * timenow = localtime(&rawtime);
109 SetConsoleTextAttribute(hClock,FOREGROUND_INTENSITY | FOREGROUND_BLUE |
110 BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED);
111 while(1)
112 {
113 while(rawtime != time(0))
114 {
115 rawtime = time(0);
116 timenow = localtime(&rawtime);
117
118 PrintNumber(hClock,X_OFFSET,Y_OFFSET,timenow->tm_hour/10,1);
119 PrintNumber(hClock,X_OFFSET+7,Y_OFFSET,timenow->tm_hour%10,1);
120 PrintNumber(hClock,X_OFFSET+14,Y_OFFSET,10,timenow->tm_sec%2);
121 PrintNumber(hClock,X_OFFSET+21,Y_OFFSET,timenow->tm_min/10,1);
122 PrintNumber(hClock,X_OFFSET+28,Y_OFFSET,timenow->tm_min%10,1);
123 PrintNumber(hClock,X_OFFSET+36,Y_OFFSET,10,timenow->tm_sec%2);
124 PrintNumber(hClock,X_OFFSET+42,Y_OFFSET,timenow->tm_sec/10,1);
125 PrintNumber(hClock,X_OFFSET+49,Y_OFFSET,timenow->tm_sec%10,1);
126 }
127 }
128 }