哇咔咔,今(那)天第二个程序——指针时钟(1.0)
2013-06-27 23:17
267 查看
效果图:(其实还可以再美观一点 o(∩_∩)o 。。。)
/******************************************** * 程序名称:MR.DUAN 的模拟时钟 * 作 者:WindAutumn <duanxu@outlook.com> * 最后修改:2012-8-9-PM * 版 本 号:1.0 * * 以后有空再修改 * *****************************************/ #include<stdio.h> #include<Windows.h> #include<time.h> #include<math.h> #define MAXWIDE 50 #define MAXHIGH 24 #define CENTER_X 25 #define CENTER_Y 12 #define CALENDA_Y_OFFSET 1 #define TIME_OFFSET_X MAXWIDE + 1 #define TIME_OFFSET_Y CALENDA_Y_OFFSET + 13 #define PI 3.1415926 void InitScreen(HANDLE hClock); void HideCursor(HANDLE hClock); void GotoXY(HANDLE hClock, int x, int y); void PrintCalendar(HANDLE hClock, int x, int y, time_t * p_rawtime); void PrintClock(HANDLE hClock, time_t * p_rawtime); void PrintTime(HANDLE hClock, time_t * p_rawtime); void main() { time_t rawtime = time(0); HANDLE hClock = GetStdHandle(STD_OUTPUT_HANDLE); system("color 7b"); SetConsoleTitle("MR.DUAN 的时钟"); HideCursor(hClock); InitScreen(hClock); PrintCalendar(hClock, MAXWIDE+1, CALENDA_Y_OFFSET, &rawtime); PrintClock(hClock, &rawtime); } void InitScreen(HANDLE hClock) // 打印周围红框框 { int i; SetConsoleTextAttribute(hClock, FOREGROUND_INTENSITY | FOREGROUND_RED | BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED); // 红色字体,白色背景 GotoXY(hClock, 0, 0); printf("╔"); for(i=1; i<(MAXWIDE-1)/2; i++) printf("═"); printf("╗"); for(i=1; i< MAXHIGH; i++) { GotoXY(hClock, 0, i); printf("║"); GotoXY(hClock, MAXWIDE-2, i); printf("║"); } GotoXY(hClock, 0, MAXHIGH); printf("╚"); for(i=1; i<(MAXWIDE-1)/2; i++) printf("═"); printf("╝"); GotoXY(hClock, 0, 0); } void HideCursor(HANDLE hClock) { CONSOLE_CURSOR_INFO cursor_info = {1, 0}; SetConsoleCursorInfo(hClock, &cursor_info); } void GotoXY(HANDLE hClock, int x, int y) { COORD coord; coord.X = x; coord.Y = y; SetConsoleCursorPosition(hClock, coord); } void PrintCalendar(HANDLE hClock, int x, int y, time_t * p_rawtime) { int i; struct tm * timenow = localtime(p_rawtime); int year = timenow->tm_year+1900 , years; int month = timenow->tm_mon + 1; int day = timenow->tm_mday; int week,centry; int mon[12]= {31,28,31,30,31,30,31,31,30,31,30,31}; if(year%400==0||year%4==0&&year%100!=0) mon[1]++; if ( month < 3 ) { year -= 1; month += 12; } centry = year/100; years = year-centry*100; week = (centry/4)-2*centry+(years+years/4)+(26*(month+1)/10); week = (week%7+7)%7; GotoXY(hClock, x,y++); printf("Sun Mon Tue Wed Thu Fri Sat"); GotoXY(hClock, x,y); for(i=0; i<week; i++) printf(" "); for(i=1; i<=mon[month-1]; i++) { if(day==i) { SetConsoleTextAttribute(hClock,FOREGROUND_INTENSITY | FOREGROUND_BLUE | BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED); printf("%3d ",i++); SetConsoleTextAttribute(hClock,FOREGROUND_INTENSITY | FOREGROUND_RED | BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED); } printf("%3d ",i); if((i+week)%7==0) GotoXY(hClock, x,y+=2); } } void PrintClock(HANDLE hClock, time_t * p_rawtime) { struct tm * timenow = localtime(p_rawtime); int board_degree=0, hour_degree=0, min_degree=0, sec_degree=0,i,R=11; SetConsoleTextAttribute(hClock,FOREGROUND_INTENSITY | FOREGROUND_BLUE | BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED); for(i=1; i<=12; i++) // 打印周围的数字1-12 { GotoXY(hClock,CENTER_X + R*2*sin(PI*i/6), CENTER_Y - R*cos(PI*i/6)); printf("%d",i); } while(1) { while(*p_rawtime != time(0)) { *p_rawtime = time(0); timenow = localtime(p_rawtime); hour_degree = timenow->tm_hour % 12 * 30; min_degree = timenow->tm_min * 6; sec_degree = timenow->tm_sec * 6; PrintTime(hClock, p_rawtime); for(i=1; i<11; i++) { SetConsoleTextAttribute(hClock,FOREGROUND_INTENSITY | FOREGROUND_BLUE | BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED); GotoXY(hClock,CENTER_X + i*2*sin(PI*(sec_degree-6)/180), CENTER_Y - i*cos(PI*(sec_degree-6)/180)); printf(" "); GotoXY(hClock,CENTER_X + i*2*sin(PI*sec_degree/180), CENTER_Y - i*cos(PI*sec_degree/180)); printf("+"); } for(i=1; i<8; i++) { SetConsoleTextAttribute(hClock,FOREGROUND_INTENSITY | FOREGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED); if(0==timenow->tm_sec) { GotoXY(hClock,CENTER_X + i*2*sin(PI*(min_degree-6)/180), CENTER_Y - i*cos(PI*(min_degree-6)/180)); printf(" "); } GotoXY(hClock,CENTER_X + i*2*sin(PI*min_degree/180), CENTER_Y - i*cos(PI*min_degree/180)); printf("*"); } for(i=1; i<5; i++) { SetConsoleTextAttribute(hClock,FOREGROUND_INTENSITY | FOREGROUND_RED | BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED); if(0==timenow->tm_min) { GotoXY(hClock,CENTER_X + i*2*sin(PI*(hour_degree-30)/180), CENTER_Y - i*cos(PI*(hour_degree-30)/180)); printf(" "); } GotoXY(hClock,CENTER_X + i*2*sin(PI*hour_degree/180), CENTER_Y - i*cos(PI*hour_degree/180)); printf("#"); } } } } void PrintTime(HANDLE hClock, time_t * p_rawtime) { struct tm * timenow = localtime(p_rawtime); SetConsoleTextAttribute(hClock,FOREGROUND_INTENSITY | FOREGROUND_BLUE | BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED); GotoXY(hClock,TIME_OFFSET_X,TIME_OFFSET_Y); printf("当前系统时间:"); GotoXY(hClock,TIME_OFFSET_X,TIME_OFFSET_Y + 1); printf("%4d 年 %2d 月 %2d 日",1900+timenow->tm_year,timenow->tm_mon,timenow->tm_mday); GotoXY(hClock,TIME_OFFSET_X,TIME_OFFSET_Y + 2); printf("%4d 时 %2d 分 %2d 秒",timenow->tm_hour,timenow->tm_min,timenow->tm_sec); }
相关文章推荐
- python写的一个时钟程序(指针类的)
- 工作札记(二):设置Embeded QT程序鼠标指针为透明
- 经典指针程序,互换两个数字
- 利用字符串指针编写以程序求所有不超过200的N值,N的平方是具有对称性的回文数
- 单片机时钟程序(10)timing.c
- 【转】JAVA下的多线程程序造成系统时钟变快
- 编写程序STUDENT *Create(STUDENT studs[],int n)。STUDENT是一个结构类型,包含姓名、成绩和指针域。studs数组中存储了n个STUDENT记录。create函
- 链表程序引发的指针思考
- 第二个程序:判断闰年
- c和指针的第一个例子程序
- 一个测试结构体和结构体指针的小程序
- 第八周 阅读程序 这里运用了this指针 Sample(*this.x+s.x)
- 系统小闹钟V1.0 C#程序小例
- [C#] 调试silverlight的时候,总是报“向占位程序传送了空的索引指针”
- 有意思的小程序之悬挂指针
- 从一个很很简单的程序看指针
- 孙鑫视频教程里第三章的this指针小测试程序
- 转一篇c++指针的文章(虽然程序不是很规范,但是介绍的不错)
- 在C++动态库中释放调用动态库程序中生成的指针new和delete 或 malloc和free
- 454ITS数据按barcode和primer分类程序v1.0