当前位置:文档之家› C语言课程设计——图形时钟

C语言课程设计——图形时钟

C语言课程设计——图形时钟
C语言课程设计——图形时钟

《C语言程序设计》课程设计

实验报告

题目:图形时钟

班级:电气工程及其自动化1401

学号:

姓名:

指导教师:

——2015 .1 . 8

目录

§1. 系统功能要求﹣﹣﹣﹣P3 §2. 程序结构(画流程图)

﹣﹣﹣P3-4 §3. 概要设计﹣﹣﹣P4

§4. 试验结果﹣﹣﹣P6 §5.体会﹣﹣﹣P6

§6.参考文献﹣﹣﹣P6 §7.附录:源程序﹣﹣﹣P7-8

§1. 系统功能要求

在屏幕上显示一个图形时钟(用程序绘制一个与时钟样式相似即可),时间与系统时间一致,且要随着时间的走动准确的走动。

§2.程序设计

§3. 概要设计

(1)void init() /*划时钟边框函数*/

int i,l,x1,x2,y1,y2;

circle(320,240,200);/*以(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;i<60;i++) /*划钟点上的短线*/

{

if(i%5==0)

l=15;

else

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) void DrawHand 函数 /*画指针*/

void DrawHand(int x,int y,float th,int l,int color)

{

int x1,y1;

x1=x+l*sin(th);

y1=y-l*cos(th);

setcolor(color);

line(x,y,x1,y1);

}

x:直线起点的横坐标y:直线起点的纵坐标 x1:直线终点的横坐标 y1:直线终点的纵坐标(3) void main() 函数

Part ①: int gdriver=DETECT,gmode;

struct time curtime; ..............类型和最高分辨率

float th_hour,th_min,th_sec;

initgraph(&gdriver,&gmode,"");

Graphdriver - - -配适器 graphmode - - - 显示模式

Part ②: setbkcolor(0); ....................背景色

Part ③: while(! kbhit())

{

Init() ..................函数(1)

setwritemode(1);

gettime(&curtime); .........得到当前系统时间

gotoxy(35,20); ...............定位输出位置

Part ④: if((float)curtime.ti_hour<=12) .............上午的时间处理 {printf("AM ");

if((float)curtime.ti_hour<10) printf("0");.... 十点之前在小时数前加零

printf("%.0f:",(float)curtime.ti_hour);...........输出小时 }

else ............下午的时间处理 {printf("PM ");

if((float)curtime.ti_hour-12<10) printf("0");.........如果时间减去12小时小于10

printf("%.0f:",(float)curtime.ti_hour-12);.......... 输出小时

}

Part ⑤: if((float)curtime.ti_min<10) printf("0");......... 相当于小时的计算方法

printf("%.0f:",(float)curtime.ti_min); ....... 输出分钟(同part ④)

if((float)curtime.ti_sec<10) printf("0");

printf("%.0f",(float)curtime.ti_sec);

Part ⑥: 以下三行计算表针转动角度,以竖直向上为起点,顺时针为正

th_sec=(float)curtime.ti_sec*0.1047197551; -- - - - - - -(2π/60=0.1047197551)th_min=(float)curtime.ti_min*0.1047197551+th_sec/60.0;

th_hour=(float)curtime.ti_hour*0.523598775+th_min/12.0; - - - - *(2π/12=0.5235987755) 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); ...........延时一秒后刷新

cleardevice(); ............. 清除图形屏幕 }

closegraph() ... ....关闭图形系统,退出图形方式

4.试验结果

5.体会

刚开始做时基本上什么都不懂,参考了很多资料,到网上查,差不多能写出基本程序,虽然很多是借鉴别人的,不过能写成这样,我心里还是挺高兴的。程序设计主要靠理解与运用,有些没有学过的知识不一定要懂得彻底,只要会运用就行。尤其是设计显示上、下午的数字时间和让时针正常运转而不是从3不动,然后直接跳到4上,我下了很大功夫,找了好多资料,最终一知半解,好在成功运行了。。。。。。

不足之处也很多,程序思路不太清晰可能有些混乱。有很多程序设计使用并不熟练,甚至有些方法掌握不了,更容易忘记。算法结构了解并不深入,独立自主的想法占据总体达不到要求。需要加强练习和对知识的理解与掌握。通过这次设计,让我学习程序的热情大涨,相信以后会做的更好!

6.参考文献

1谭浩强.C语言程序设计(第四版).清华大学出版社,2010

2李丽娟,马淑萍.C语言程序设计(第二版).中国铁道出版社,2009

3李丽娟,张奋.C语言程序设计实验教程(第二版).中国铁道出版社,2009

4张基温.C 语言程序设计案例教程.清华大学出版社,2005 5网络,百度知道,贴吧等,2014

7.附录:源程序

#include

#include

#include

#define PI 3.1415926

#define x0 320

#define y0 240

void init()

{

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;i<60;i++)

{

if(i%5==0)

l=15;

else

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);

}

}

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_min,th_sec;

initgraph(&gdriver,&gmode,"");

setbkcolor(0);

while(! kbhit())

{

init();

setwritemode(1);

gettime(&curtime);

gotoxy(35,20);

if((float)curtime.ti_hour<=12)

{ printf("AM ");

if((float)curtime.ti_hour<10)

printf("0");

printf("%.0f:",(float)curtime.ti_hour);

}

else

{

printf("PM ");

if((float)curtime.ti_hour-12<10)

printf("0");

printf("%.0f:",(float)curtime.ti_hour-12);

}

if((float)curtime.ti_min<10)

printf("0");

printf("%.0f:",(float)curtime.ti_min);

if((float)curtime.ti_sec<10)

printf("0");

printf("%.0f",(float)curtime.ti_sec);

th_sec=(float)curtime.ti_sec*0.1047197551;

th_min=(float)curtime.ti_min*0.1047197551+th_sec/60.0; th_hour=(float)curtime.ti_hour*0.523598775+th_min/12.0; DrawHand(x0,y0,th_hour,70,2);

DrawHand(x0,y0,th_min,110,3);

DrawHand(x0,y0,th_sec,140,12);

setcolor(13);

settextstyle(2,0,12);

outtextxy(300,80,"12");

outtextxy(460,220,"3");

outtextxy(315,370,"6");

outtextxy(160,220,"9");

sleep(1);

cleardevice();

}

closegraph();

}

相关主题
文本预览
相关文档 最新文档