《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();
}