时钟图形模拟.docx

上传人:b****3 文档编号:6562310 上传时间:2023-05-10 格式:DOCX 页数:15 大小:106.31KB
下载 相关 举报
时钟图形模拟.docx_第1页
第1页 / 共15页
时钟图形模拟.docx_第2页
第2页 / 共15页
时钟图形模拟.docx_第3页
第3页 / 共15页
时钟图形模拟.docx_第4页
第4页 / 共15页
时钟图形模拟.docx_第5页
第5页 / 共15页
时钟图形模拟.docx_第6页
第6页 / 共15页
时钟图形模拟.docx_第7页
第7页 / 共15页
时钟图形模拟.docx_第8页
第8页 / 共15页
时钟图形模拟.docx_第9页
第9页 / 共15页
时钟图形模拟.docx_第10页
第10页 / 共15页
时钟图形模拟.docx_第11页
第11页 / 共15页
时钟图形模拟.docx_第12页
第12页 / 共15页
时钟图形模拟.docx_第13页
第13页 / 共15页
时钟图形模拟.docx_第14页
第14页 / 共15页
时钟图形模拟.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

时钟图形模拟.docx

《时钟图形模拟.docx》由会员分享,可在线阅读,更多相关《时钟图形模拟.docx(15页珍藏版)》请在冰点文库上搜索。

时钟图形模拟.docx

时钟图形模拟

 

《高级语言程序设计》

课程设计报告

 

题目:

图形模拟时钟

专业:

班级:

姓名:

指导教师:

成绩:

 

计算机与信息工程系

2014年6月20日

1设计内容及要求

1.1设计内容

通过编程最终使电脑屏幕显示模拟时钟,并正常运行显示表针时间,电脑上呈现一个图种的模型表示电脑上的时间,并可以模拟时钟走动。

1.2设计目的及意义

设计目的及意义:

熟悉Visualc++6.0软件的应用,C语言相关函数,语句的学习,查找资料代码等,编程、调试、运行、效果显示调整,完成上传,熟悉编程语言,了解程序运行以及图像显示等C语言的应用,通过编程实现既定功能。

培养自学能力,独立思考能力,将理论形成实际运用,同时可以掌握下列运算符的使用:

1.数据类型(整形、实型、字符型、指针、数组、结构等)。

2.运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等)。

3.程序结构(顺序结构、判断选择结构、循环结构)

5.复杂任务功能分解方法(自顶向下逐步求精、模块化设计、信息隐藏等)。

6.学会编制结构清晰、风格良好、数据结构适当的C语言程序。

2概要设计

2.1功能简介

实现功能如下:

(1)在屏幕上最终显示一个图形时钟(用程序绘制一个与时钟样式相似即可),能模拟机械钟表行走。

(2)数字式显示时间与指针式显示时间一致,且各指针运动规律正确。

(3)能准确的利用数字显示时间和日期。

(4)按ESC可以退出程序。

2.2功能说明:

内容:

指针式时钟模块完成在屏幕上显示一个活动时钟,模拟机械钟表行走,时针,分针,秒针不同颜色且顺时针旋转,获取系统时间;数字式时钟模块完成显示时间格式年月日时分秒,小时为24小时制,分和秒为60进制与指针式的时钟显示时间同步并获取系统时间。

说明:

指针顺时针旋转;指针式的时钟表盘为圆形;圆周上分布均匀的12个刻度;有3个长度不同的指针,即时针,分针,秒针的运动具有规律性;数字钟显示时间格式年月日时分秒,小时为24进制,分和秒为60进制;指针式的时钟与数字式的时钟显示时间同步;其主要的设计思想如下:

1.确定秒针的走时,将圆分成60份每过一秒,秒重要转过1/60个园,即一等份。

2.确定分针真的走时,将圆分成60份每过一分,分针要转过1/60个圆,即一等份分针自己走过的再加秒针的,才是此四分钟的位置。

3.时钟走动与系统时间联系:

每过一秒画出秒针,并且除去前一秒的秒针,分针和秒针一样,画线函数与时间联系使用变量。

4.设置横纵坐标及表针:

X=a*cos(b*pi/180)+300;Y=a*sin(b*pi/180)+240;

2.3总体程序框图

(系统模块图)

首先,先画出个钟的大致轮廓。

从输出数字到画出外轮廓,到标出短线到画出时针、分针、秒针。

这个轮廓就已经完成了。

然后,为了更加这个钟的实用性。

就通过获取系统时间来结合实际意义,这是最简单,最好的方法。

从应用上,它显示的是实际的时间,增强了可用性;从编程上,不用再复杂地再编一个更时间一样的函数来,减少程序的篇幅、复杂性和编程者的工作量。

接着顺带利用时间的变量名来画时针,分针,秒针。

最后,为了让时针,分针,秒针让观察者看起来是连续的变化,即形象地模拟真实的机械钟表那样运动。

3设计过程

3.1各个模块程序流程图

3.2运行界面及关键代码

3.2.1运行结果

在桌面显示一个模拟的时钟,时钟的秒针、分针与时针随着时间的推移而不断移动就像我们经常看见的圆形电子时钟一样。

我们可以通过程序随意改动时钟的背景颜色以及指针的颜色和表盘大小等问题,同时还能在桌面显示一些简单的英文以及图案等。

3.2.2关键代码分析及说明

(1)本系统中主要的数据结构就是time结构体

structtime

{

unsignedcharm;/*分钟*/

unsignedcharh/*小时*/

unsignedchars/*秒*/

}

time结构体定义在dos.h文件中,可用来保存系统的当前时间,其中各字段的值的含义如下。

·unsignedcharm:

保存分钟值。

·unsignedcharh:

保存小时值。

·unsignedchars:

保存秒数。

(2)全局变量

下面对程序用到的全局变量及数组进行说明。

·inth,m,s:

此3个全局变量分别用来保存小时、分钟、秒数。

·intx,x1,x2,y,y1,y2:

保存数字时钟中小时、分、秒在屏幕中显示的坐标值。

·structtimet[1]:

定义一个time结构类型的数组,此数组只有t[0]一个元素。

(3)程序流程

系统的执行应从运行开始,显示界面正常运行,直到用户选择退出系统为止。

(4)流程图功能描述

①画圆模板:

#inlude“graphics.h”

#inlude”math.h”

Voidinit()

Circle(300,240,200);

②画时间刻线模块:

For(i=0;i<=60;i++)

{

If(i%5==0)

L=15;else

L=5;

X1=200*sin()+300;

Y1=200*cos()+240;

}

③时间模块:

Gettime(d)

 

4设计结果与分析

4.1设计结果

运行程序后在屏幕上显示出一时钟,钟上的时间与电脑上的时间完全一样,并且在秒针运行的同时伴随声音

如同下图一样的图案:

4.2分析

在桌面会显示一个模拟的时钟,时钟的秒针、分针与时针随着时间的推移而不断移动就像我们经常看见的圆形电子时钟一样。

我们可以通过程序随意改动时钟的背景颜色以及指针的颜色和表盘大小等问题,同时还能在桌面显示一些简单的英文以及图案等。

因为是程序控制时钟的,所以起始时间是通过程序控制的,要想改动还是需要通过改变程序获得,并不是随系统时间而确定起始时间的。

 

5总结

通过本次的课程设计,我深刻的体会到了C语言的强大。

虽然本次的课程设计对我来说有一定的难度,但是在朋友的帮助下我还是很好地完成了(自我感觉)。

从而也认识到了程序的内涵,使我对编程产生了很大的兴趣。

其实编程很好玩的,在编程中不但可以完成一些现实中从在的东西,还可以制作出很多意想不到东西。

还有对于此次课程设计让我深刻的认识到自己学得的远远还太少,需要我们自发的去学习知识才可以成长的更快!

其次,对于此次设计我得坦诚一件事,那就是我一开始选的TC程序,运行的时候总是要我输入参数,由于自己的知识局限,总是敲不出结果,所以我又去XX文库搜了一个vc程序,虽然最终使运行出来了,可是这次事件让我认识自身知识的不足,所以,这次过后会更加认真的学习一些书面没有的知识,充实自己。

6参考文献

《C语言程序设计》(第二版)[M].北京:

清华大学出版社谭浩强1999

《数据结构》(C语言版)[M].北京:

清华大学出版社严魏敏,吴伟民1997

《C语言程序设计》[M].黄明等.大连理工大学出版社,2005

《C语言课程设计案例精编》.郭翠英.中国水利水电出版.2004年3月

《C语言程序设计教程》曾春平,朱小谷,晏海华.北京希望电子出版社.2005年3月

《C语言课程设计案例精编》清华大学出版社﹒姜灵芝、余健﹒2008.1

《C语言程序设计》西安电子科技大学出版社﹒田祥宏主编﹒2007.12

 

附程序清单及源程序

(1)TC2.0上的源程序

#include"graphics.h"

#include"math.h"

#include"dos.h"

#definepi3.1415926

#defineX(a,b,c)x=a*cos(b*c*pi/180-pi/2)+300

#defineY(a,b,c)y=a*sin(b*c*pi/180-pi/2)+240

#defined(a,b,c)X(a,b,c);Y(a,b,c);line(300,240,x,y)

voidinit()/*划时钟边框函数*/

{

inti,l,x1,x2,y1,y2;

setbkcolor

(1);

circle(300,240,200);

circle(300,240,205);

circle(300,240,5);

for(i=0;i<60;i++)/*划钟点上的短线*/

{

if(i%5==0)

l=15;

else

l=5;

x1=200*sin(i*6*pi/180)+300;

y1=200*cos(i*6*pi/180)+240;

x2=(200-l)*sin(i*6*pi/180)+300;

y2=(200-l)*cos(i*6*pi/180)+240;

line(x1,y1,x2,y2);

}

}

main()

{

intx,y,i,k=1;

intgdriver=9,gmode=2;

unsignedcharh,m,s;

into,p,q;

floatn;

structtimet[1];

structdated[1];

initgraph(&gdriver,&gmode,"c:

\\tc");

initgraph(&gdriver,&gmode,"c:

\\tc");

for(i=0;i<=6;i++)

{

settextstyle(TRIPLEX_FONT,HORIZ_DIR,i);/*控制输出字符的字体,方向,大小*/

cleardevice();

settextjustify(1,1);/*在指定坐标上输出字符串*/

outtextxy(300,80,"12");

outtextxy(300,390,"6");

outtextxy(140,230,"9");

outtextxy(460,230,"3");

outtextxy(380,100,"1");

outtextxy(220,100,"11");

outtextxy(430,160,"2");

outtextxy(430,310,"4");

outtextxy(380,370,"5");

outtextxy(220,370,"7");

outtextxy(160,160,"10");

outtextxy(160,310,"8");

}

init();

setwritemode

(1);/*设置画线的输出模式*/

if(k!

=0)

{

getdate(d);/*获得系统日期函数*/

o=d[0].da_year;

p=d[0].da_mon;

q=d[0].da_day;

gettime(t);/*获得系统时间函数*/

h=t[0].ti_hour;

m=t[0].ti_min;

s=t[0].ti_sec;

}

setcolor(7);/*设置时针颜色*/

n=(float)h+(float)m/60;

d(150,n,30);/*画出时针*/

setcolor(14);/*设置分针颜色*/

d(170,m,6);/*画出分针*/

setcolor(4);/*设置秒针颜色*/

d(190,s,6);/*画出秒针*/

while(!

kbhit())/*控制程序按下任意键退出*/

{

while(t[0].ti_sec==s)

gettime(t);

gotoxy(44,18);/*使光标移动到指定坐标*/

printf("\b\b\b\b\b\b\b\b\b");/*退格,使表示时间的字符串不断变化*/

sound(400);/*按给定的频率打开PC扬声器*/

delay(70);/*中断程序的执行,时间为70毫秒*/

sound(200);

delay(30);

nosound();/*按给定的频率关闭PC扬声器*/

setcolor(4);

d(190,s,6);

s=t[0].ti_sec;

d(190,s,6);

if(t[0].ti_min!

=m)

{

setcolor(14);

d(170,m,6);

m=t[0].ti_min;

d(170,m,6);

}

if(t[0].ti_hour!

=h)

{

setcolor(7);

d(150,h,30);

h=t[0].ti_hour;

d(150,h,30);

sound(1000);

delay(240);

nosound();

delay(140);

sound(2000);

delay(240);

nosound();

}

if(s<10)/*用字符的形式输出时间*/

{if(m<10)

printf("%u:

0%u:

0%u",h,m,s);

else

printf("%u:

%u:

0%u",h,m,s);

}

else

{if(m<10)

printf("%u:

0%u:

%u",h,m,s);

else

printf("%u:

%u:

%u",h,m,s);

}

gotoxy(34,19);/*在指定坐标上输出日期*/

printf("%d年%d月%d日",o,p,q);

printf("\b\b\b\b\b\b\b\b\b");

}

getch();

closegraph();

}

(2)visualc++6.0上运行的源程序

#define_CRT_SECURE_NO_WARNINGS

#include

#include

#include

#pragmacomment(lib,"user32.lib")

#pragmacomment(lib,"gdi32.lib")

#pragmacomment(linker,"/SUBSYSTEM:

Windows")

voidGetPos(doubledegree,intlen,int*x,int*y)

{

*x=len*sin(degree);

*y=len*cos(degree);

}

voidDrawClock(HWNDhw,HDCh,inthour,intminute,intsecond)

{

HDCbufdc=CreateCompatibleDC(h);

HBITMAPbuf=CreateCompatibleBitmap(bufdc,200,200);

RECTcr;

HBRUSHbBg=CreateSolidBrush(RGB(255,255,255));

GetClientRect(hw,&cr);

SelectObject(bufdc,bBg);

SelectObject(bufdc,buf);

FillRect(bufdc,&cr,bBg);

{

intsx,sy,ex,ey;

inti;

for(i=0;i<12;++i){

GetPos(2*3.14159/12*i,85,&sx,&sy);

GetPos(2*3.14159/12*i,95,&ex,&ey);

MoveToEx(bufdc,100+sx,100-sy,0);

LineTo(bufdc,100+ex,100-ey);

}

}

{

inthx,hy,mx,my,sx,sy;

GetPos(2*3.14159/24*(hour+(double)minute/60+(double)second/3600),50,&hx,&hy);

GetPos(2*3.14159/60*(minute+(double)second/60),65,&mx,&my);

GetPos(2*3.14159/60*second,80,&sx,&sy);

MoveToEx(bufdc,100,100,NULL);

LineTo(bufdc,100+hx,100-hy);

MoveToEx(bufdc,100,100,NULL);

LineTo(bufdc,100+mx,100-my);

MoveToEx(bufdc,100,100,NULL);

LineTo(bufdc,100+sx,100-sy);

}

BitBlt(h,0,0,200,200,bufdc,0,0,SRCCOPY);

DeleteDC(bufdc);

DeleteObject(bBg);

DeleteObject(buf);

}

LRESULTCALLBACKWndProc(HWNDh,UINTm,WPARAMw,LPARAMl)

{

switch(m){

caseWM_CREATE:

SetTimer(h,1,1000,0);

return0;

caseWM_ERASEBKGND:

return1;

caseWM_TIMER:

InvalidateRect(h,0,FALSE);

return0;

caseWM_PAINT:

{

PAINTSTRUCTps;

HDCdc=BeginPaint(h,&ps);

{

time_tt;

structtm*pst;

time(&t);

pst=localtime(&t);

DrawClock(h,dc,pst->tm_hour,pst->tm_min,pst->tm_sec);

}

EndPaint(h,&ps);

return0;

}

caseWM_DESTROY:

KillTimer(h,1);

PostQuitMessage(0);

return0;

default:

returnDefWindowProc(h,m,w,l);

}

}

intAPIENTRYWinMain(HINSTANCEhInst,HINSTANCEhPrev,LPSTRszCmd,INTnShow)

{

WNDCLASSwc;

ZeroMemory(&wc,sizeof(wc));

wc.style=CS_HREDRAW|CS_VREDRAW;

wc.lpfnWndProc=WndProc;

wc.hInstance=hInst;

wc.hbrBackground=(HBRUSH)COLOR_WINDOW;

wc.lpszClassName=TEXT("MYCLOCK");

if(RegisterClass(&wc)!

=0){

MSGm;

HWNDhw=CreateWindow(TEXT("MYCLOCK"),TEXT("Clock"),WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInst,0);

if(hw!

=NULL){

RECTr;

GetWindowRect(hw,&r);

r.right=r.left+200;

r.bottom=r.top+200;

AdjustWindowRect(&r,WS_OVERLAPPEDWINDOW,FALSE);

MoveWindow(hw,r.left,r.top,r.right-r.left,r.bottom-r.top,FALSE);

ShowWindow(hw,SW_SHOWNORMAL);

UpdateWindow(hw);

while(GetMessage(&m,0,0,0)>0){

TranslateMessage(&m);

DispatchMessage(&m);

}

return0;

}

return1;

}else

return1;

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2