图形模拟时钟C语言课程设计_第1页
图形模拟时钟C语言课程设计_第2页
图形模拟时钟C语言课程设计_第3页
图形模拟时钟C语言课程设计_第4页
图形模拟时钟C语言课程设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机学院 高级语言程序设计课程设计报告学号2014-2015学年 第二学期1308210118高级语言程序设计课程设计报告题目:图形模拟时钟专业:计算机科学与技术班级:13计科2班姓名:指导教师:陈广宏成绩:计算机学院2015 年 4月 30 日 目 录1 设计内容及要求11.1 设计内容11.2 设计目的及意义12 概要设计12.1功能简介12.2功能说明:12.3 总体程序框图23 设计过程33.1各个模块程序流程图33.2运行界面及关键代码44设计结果与分析64.1设计结果64.2分析65 总结76 参考文献7附程序清单及源程序81 设计内容及要求1.1 设计内容通过编程最终使电脑屏幕

2、显示模拟时钟,并正常运行显示表针时间,电脑上呈现一个图种的模型表示电脑上的时间,并可以模拟时钟走动。1.2 设计目的及意义设计目的及意义:熟悉Visual c+ 6.0软件的应用,C语言相关函数,语句的学习,查找资料代码等,编程、调试、运行、效果显示调整,完成上传,熟悉编程语言,了解程序运行以及图像显示等C语言的应用,通过编程实现既定功能。培养自学能力,独立思考能力,将理论形成实际运用,同时可以掌握下列运算符的使用:1 .数据类型(整形、实型、字符型、指针、数组、结构等)。2 .运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等)。3 .程序结构(顺序结构、判断选择结构、循环结构)5 .复

3、杂任务功能分解方法(自顶向下逐步求精、模块化设计、信息隐藏等)。6 .学会编制结构清晰、风格良好、数据结构适当的C语言程序。2 概要设计2.1功能简介实现功能如下:(1)在屏幕上最终显示一个图形时钟(用程序绘制一个与时钟样式相似即可),能模拟机械钟表行走。(2)数字式显示时间与指针式显示时间一致,且各指针运动规律正确。(3)能准确的利用数字显示时间和日期。(4)按ESC可以退出程序。2.2功能说明:内容:指针式时钟模块完成在屏幕上显示一个活动时钟,模拟机械钟表行走,时针,分针,秒针不同颜色且顺时针旋转,获取系统时间;数字式时钟模块完成显示时间格式年月日时分秒,小时为24小时制,分和秒为60进制

4、与指针式的时钟显示时间同步并获取系统时间。说明:指针顺时针旋转;指针式的时钟表盘为圆形;圆周上分布均匀的12个刻度;有3个长度不同的指针,即时针,分针,秒针的运动具有规律性;数字钟显示时间格式年月日时分秒,小时为24进制,分和秒为60进制;指针式的时钟与数字式的时钟显示时间同步;其主要的设计思想如下:1 . 确定秒针的走时,将圆分成60份每过一秒,秒重要转过1/60个园,即一等份。2 . 确定分针真的走时,将圆分成60份每过一分,分针要转过1/60个圆,即一等份分针自己走过的再加秒针的,才是此四分钟的位置。 3 . 时钟走动与系统时间联系:每过一秒画出秒针,并且除去前一秒的秒针,分针和 秒针一

5、样,画线函数与时间联系使用变量。4 . 设置横纵坐标及表针:X = a*cos(b*pi/180)+300;Y=a*sin(b*pi/180)+240;2.3 总体程序框图模拟时钟转动程序指针式时钟数字式时钟(系统模块图)首先,先画出个钟的大致轮廓。从输出数字到画出外轮廓,到标出短线到画出时针、分针、秒针。这个轮廓就已经完成了。然后,为了更加这个钟的实用性。就通过获取系统时间来结合实际意义,这是最简单,最好的方法。从应用上,它显示的是实际的时间,增强了可用性;从编程上,不用再复杂地再编一个更时间一样的函数来,减少程序的篇幅、复杂性和编程者的工作量。接着顺带利用时间的变量名来画时针,分针,秒针。

6、最后,为了让时针,分针,秒针让观察者看起来是连续的变化,即形象地模拟真实的机械钟表那样运动。3 设计过程3.1各个模块程序流程图Start初始化图形系统设置窗体的背景色、前景色及画笔画出主体框架的边直线、边角弧线画出时钟的框架、标题及时分秒的刻度;绘制数字式时钟下的数字时钟的边框架调用时钟处理程序获取当前时间并显示调用消息处理函数刷新窗口显示(1秒)创建数字钟字体对数字钟进行输出判断修改是增加还是减少Esc(任意键)调出digitalClockEnd3.2运行界面及关键代码3.2.1运行结果在桌面显示一个模拟的时钟,时钟的秒针、分针与时针随着时间的推移而不断移动就像我们经常看见的圆形电子时钟一

7、样。我们可以通过程序随意改动时钟的背景颜色以及指针的颜色和表盘大小等问题,同时还能在桌面显示一些简单的英文以及图案等。3.2.2关键代码分析及说明(1)本系统中主要的数据结构就是time结构体struct time unsigned char m;/*分钟*/ unsigned char h/*小时*/ unsigned char s/*秒*/time结构体定义在dos.h文件中,可用来保存系统的当前时间,其中各字段的值的含义如下。·unsigned char m:保存分钟值。·unsigned char h:保存小时值。·unsigned char s:保存秒数

8、。(2)全局变量下面对程序用到的全局变量及数组进行说明。·int h,m,s:此3个全局变量分别用来保存小时、分钟、秒数。·int x,x1,x2,y,y1,y2:保存数字时钟中小时、分、秒在屏幕中显示的坐标值。·struct time t1:定义一个time结构类型的数组,此数组只有t0一个元素。(3)程序流程系统的执行应从运行开始,显示界面正常运行,直到用户选择退出系统为止。(4)流程图功能描述画圆模板: #inlude “graphics.h” #inlude ”math.h ” Void init()Circle(300,240,200); 画时间刻线模块

9、:For(i=0;i<=60;i+)If(i%5=0)L=15;elseL=5;X1=200*sin()+300;Y1=200*cos()+240;时间模块:Gettime(d)4设计结果与分析4.1设计结果运行程序后在屏幕上显示出一时钟,钟上的时间与电脑上的时间完全一样,并且在秒针运行的同时伴随声音如同下图一样的图案:4.2分析在桌面会显示一个模拟的时钟,时钟的秒针、分针与时针随着时间的推移而不断移动就像我们经常看见的圆形电子时钟一样。我们可以通过程序随意改动时钟的背景颜色以及指针的颜色和表盘大小等问题,同时还能在桌面显示一些简单的英文以及图案等。因为是程序控制时钟的,所以起始时间是通

10、过程序控制的,要想改动还是需要通过改变程序获得,并不是随系统时间而确定起始时间的。5 总结通过本次的课程设计,我深刻的体会到了C语言的强大。虽然本次的课程设计对我来说有一定的难度,但是在朋友的帮助下我还是很好地完成了(自我感觉)。从而也认识到了程序的内涵,使我对编程产生了很大的兴趣。其实编程很好玩的,在编程中不但可以完成一些现实中从在的东西,还可以制作出很多意想不到东西。还有对于此次课程设计让我深刻的认识到自己学得的远远还太少,需要我们自发的去学习知识才可以成长的更快!其次,对于此次设计我得坦诚一件事,那就是我一开始选的TC程序,运行的时候总是要我输入参数,由于自己的知识局限,总是敲不出结果,

11、所以我又去百度文库搜了一个vc程序,虽然最终使运行出来了,可是这次事件让我认识自身知识的不足,所以,这次过后会更加认真的学习一些书面没有的知识,充实自己。6 参考文献C语言程序设计(第二版)M.北京:清华大学出版社 谭浩强 1999数据结构(C语言版)M.北京:清华大学出版社 严魏敏,吴伟民 1997C语言程序设计M. 黄明等.大连理工大学出版社,2005C语言课程设计案例精编. 郭翠英 . 中国水利水电出版 . 2004年3月C语言程序设计教程 曾春平,朱小谷,晏海华.北京希望电子出版社 . 2005年3月C语言课程设计案例精编清华大学出版社 姜灵芝、余健 2008.1C语言程序设计西安电子

12、科技大学出版社田祥宏主编2007.12附程序清单及源程序(1)TC2.0上的源程序#include"graphics.h"#include"math.h"#include"dos.h"#define pi 3.1415926#define X(a,b,c) x=a*cos(b*c*pi/180-pi/2)+300#define Y(a,b,c) y=a*sin(b*c*pi/180-pi/2)+240#define d(a,b,c) X(a,b,c);Y(a,b,c);line(300,240,x,y)void init() /*划时

13、钟边框函数*/int i,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;elsel=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()int x,y,

14、i,k=1;int gdriver=9,gmode=2;unsigned char h,m,s;int o,p,q;float n;struct time t1;struct date d1;initgraph(&gdriver,&gmode,"c:tc");initgraph(&gdriver,&gmode,"c:tc");for(i=0;i<=6;i+)settextstyle(TRIPLEX_FONT,HORIZ_DIR,i); /*控制输出字符的字体,方向,大小*/cleardevice();settextj

15、ustify(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");outtex

16、txy(380,370,"5");outtextxy(220,370,"7");outtextxy(160,160,"10");outtextxy(160,310,"8");init();setwritemode(1); /*设置画线的输出模式*/if(k!=0)getdate(d); /*获得系统日期函数*/o=d0.da_year;p=d0.da_mon;q=d0.da_day;gettime(t); /*获得系统时间函数*/h=t0.ti_hour;m=t0.ti_min;s=t0.ti_sec;setcol

17、or(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(t0.ti_sec=s)gettime(t);gotoxy(44,18); /*使光标移动到指定坐标*/printf("bbbbbbbbb"); /*退格,使表示时间的字符串不断变化*/sound(400); /

18、*按给定的频率打开PC扬声器*/delay(70); /*中断程序的执行,时间为70毫秒*/sound(200);delay(30);nosound(); /*按给定的频率关闭PC扬声器*/setcolor(4);d(190,s,6);s=t0.ti_sec;d(190,s,6);if(t0.ti_min!=m)setcolor(14);d(170,m,6);m=t0.ti_min;d(170,m,6);if(t0.ti_hour!=h)setcolor(7);d(150,h,30);h=t0.ti_hour;d(150,h,30);sound(1000);delay(240);nosound

19、();delay(140);sound(2000);delay(240);nosound();if(s<10) /*用字符的形式输出时间*/ if(m<10)printf("%u:0%u:0%u",h,m,s);elseprintf("%u:%u:0%u",h,m,s);else if(m<10)printf("%u:0%u:%u",h,m,s);elseprintf("%u:%u:%u",h,m,s);gotoxy(34,19); /*在指定坐标上输出日期*/printf("%d年%d

20、月%d日",o,p,q);printf("bbbbbbbbb");getch();closegraph();(2)visual c+ 6.0上运行的源程序#define _CRT_SECURE_NO_WARNINGS#include <windows.h>#include <math.h>#include <time.h>#pragma comment(lib, "user32.lib")#pragma comment(lib, "gdi32.lib")#pragma comment(li

21、nker, "/SUBSYSTEM:Windows") void GetPos(double degree, int len, int* x, int* y) *x = len * sin(degree); *y = len * cos(degree); void DrawClock(HWND hw, HDC h, int hour, int minute, int second) HDC bufdc = CreateCompatibleDC(h); HBITMAP buf = CreateCompatibleBitmap(bufdc, 200, 200); RECT cr

22、; HBRUSH bBg = CreateSolidBrush(RGB(255, 255, 255); GetClientRect(hw, &cr); SelectObject(bufdc, bBg); SelectObject(bufdc, buf); FillRect(bufdc, &cr, bBg); int sx, sy, ex, ey; int i; for(i = 0; i < 12; +i) GetPos(2*3.14159/12*i, 85, &sx, &sy); GetPos(2*3.14159/12*i, 95, &ex, &a

23、mp;ey); MoveToEx(bufdc, 100+sx, 100-sy, 0); LineTo(bufdc, 100+ex, 100-ey); int hx, 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

24、/ 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); Dele

25、teObject(bBg); DeleteObject(buf); LRESULT CALLBACK WndProc(HWND h, UINT m, WPARAM w, LPARAM l) switch(m) case WM_CREATE: SetTimer(h, 1, 1000, 0); return 0; case WM_ERASEBKGND: return 1; case WM_TIMER: InvalidateRect(h, 0, FALSE); return 0; case WM_PAINT: PAINTSTRUCT ps; HDC dc = BeginPaint(h, &p

26、s); time_t t; struct tm* pst; time(&t); pst = localtime(&t); DrawClock(h, dc, pst->tm_hour, pst->tm_min, pst->tm_sec); EndPaint(h, &ps); return 0; case WM_DESTROY: KillTimer(h, 1); PostQuitMessage(0); return 0; default: return DefWindowProc(h, m, w, l); int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPre

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论