《c语言课程设计——图形时钟》由会员分享,可在线阅读,更多相关《c语言课程设计——图形时钟(8页珍藏版)》请在金锄头文库上搜索。
1、7 C语言程序设计课程设计 实验报告 C语言程序设计课程设计 实验报告题目: 图形时钟 班级:电气工程及其自动化1401学号: 姓名: 指导教师: 2015 .1 . 8 目录1.系统功能要求 P32.程序结构(画流程图) P3-43.概要设计 P44.试验结果 P65.体会 P66.参考文献 P67.附录:源程序 P7-81.系统功能要求 在屏幕上显示一个图形时钟(用程序绘制一个与时钟样式相似即可),时间与系统时间一致,且要随着时间的走动准确的走动。2.程序设计3.概要设计(1)voidinit()/*划时钟边框函数*/ inti,l,x1,x2,y1,y2;circle(320,240,2
2、00);/*以(320,240)为圆心,200为半径画圆*/ circle(320,240,199);/*以(320,240)为圆心,199为半径画圆*/ circle(320,240,201);/*以(320,240)为圆心,201为半径画圆*/ circle(320,240,1,);/*以(320,240)为圆心,1为半径画圆*/ circle(320,240,2,)/*以(320,240)为圆心,2为半径画圆*/ circle(320,2403,);/*以(320,240)为圆心,3为半径画圆*/for(i=0;i60;i+)/*划钟点上的短线*/ if(i%5=0) l=15; els
3、e l=5; x1=200*sin(i*6*pi/180)+320/*画线函数*/ y1=200*cos(i*6*pi/180)+240; x2=(200-l)*sin(i*6*pi/180)+320; y2=(200-l)*cos(i*6*pi/180)+240; line(x1,y1,x2,y2); (2)voidDrawHand函数/*画指针*/ voidDrawHand(intx,inty,floatth,intl,intcolor) intx1,y1; x1=x+l*sin(th); y1=y-l*cos(th); setcolor(color); line(x,y,x1,y1);
4、x:直线起点的横坐标 y:直线起点的纵坐标x1:直线终点的横坐标y1:直线终点的纵坐标(3)voidmain()函数Part:intgdriver=DETECT,gmode; structtimecurtime;.类型和最高分辨率 floatth_hour,th_min,th_sec; initgraph(&gdriver,&gmode,); Graphdriver-配适器graphmode-显示模式Part: setbkcolor(0);.背景色Part: while(!kbhit() Init().函数(1)setwritemode(1); gettime(&curtime);.得到当前系
5、统时间 gotoxy(35,20);.定位输出位置Part: if(float)curtime.ti_hour=12).上午的时间处理printf(AM); if(float)curtime.ti_hour10)printf(0);.十点之前在小时数前加零 printf(%.0f:,(float)curtime.ti_hour);.输出小时 else.下午的时间处理printf(PM); if(float)curtime.ti_hour-1210)printf(0);.如果时间减去12小时小于10 printf(%.0f:,(float)curtime.ti_hour-12);.输出小时 Pa
6、rt: if(float)curtime.ti_min10)printf(0);.相当于小时的计算方法 printf(%.0f:,(float)curtime.ti_min);.输出分钟(同part) if(float)curtime.ti_sec10)printf(0); printf(%.0f,(float)curtime.ti_sec);Part:以下三行计算表针转动角度,以竖直向上为起点,顺时针为正 th_sec=(float)curtime.ti_sec*0.;- - -(2/60=0.) th_min=(float)curtime.ti_min*0.+th_sec/60.0; th
7、_hour=(float)curtime.ti_hour*0.+th_min/12.0;-*(2/12=0.)Part:画指针 DrawHand(x0,y0,th_hour,70,2);.画时针 DrawHand(x0,y0,th_min,110,3);.画秒针Part:settextstyle(2,0,3);.设置字体 2:文字的字体;0:文字的方向;3:文字的大小 outtextxy(300,80,12); outtextxy(460,220,3); outtextxy(315,370,6); outtextxy(160,220,9);Part:sleep(1);.延时一秒后刷新 clea
8、rdevice();.清除图形屏幕 closegraph().关闭图形系统,退出图形方式4.试验结果5.体会 刚开始做时基本上什么都不懂,参考了很多资料,到网上查,差不多能写出基本程序,虽然很多是借鉴别人的,不过能写成这样,我心里还是挺高兴的。程序设计主要靠理解与运用,有些没有学过的知识不一定要懂得彻底,只要会运用就行。尤其是设计显示上、下午的数字时间和让时针正常运转而不是从3不动,然后直接跳到4上,我下了很大功夫,找了好多资料,最终一知半解,好在成功运行了。 不足之处也很多,程序思路不太清晰可能有些混乱。有很多程序设计使用并不熟练,甚至有些方法掌握不了,更容易忘记。算法结构了解并不深入,独立
9、自主的想法占据总体达不到要求。需要加强练习和对知识的理解与掌握。通过这次设计,让我学习程序的热情大涨,相信以后会做的更好!6. 参考文献1谭浩强.C语言程序设计(第四版).清华大学出版社,20102李丽娟,马淑萍.C语言程序设计(第二版).中国铁道出版社,20093李丽娟,张奋.C语言程序设计实验教程(第二版).中国铁道出版社,20094张基温.C语言程序设计案例教程.清华大学出版社,20055网络,百度知道,贴吧等,20147.附录:源程序#include#include#include#define PI 3.#define x0 320#define y0 240void init()
10、int i,l,x1,x2,y1,y2; circle(320,240,200); circle(320,240,201); circle(320,240,199); circle(320,240,1); circle(320,240,2); circle(320,240,3); for(i=0;i60;i+) if(i%5=0)l=15; elsel=5; x1=200*sin(i*6*PI/180)+320; y1=200*cos(i*6*PI/180)+240; x2=(200-l)*sin(i*6*PI/180)+320; y2=(200-l)*cos(i*6*PI/180)+240; line(x1,y1,x2,y2); void DrawHand(int x,int y,float th,int l,int color) int xp,yp; xp=x+l*sin(th); yp=y-l*cos(th); setcolor(color); line(x,y,xp,yp);void main() int gdriver=DETECT,gmode; struct time curtime; float th_hour,th_m