C语言课程设计报告-模拟时钟转动程序_第1页
C语言课程设计报告-模拟时钟转动程序_第2页
C语言课程设计报告-模拟时钟转动程序_第3页
C语言课程设计报告-模拟时钟转动程序_第4页
C语言课程设计报告-模拟时钟转动程序_第5页
已阅读5页,还剩22页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、课程设计报告题目课 程 名 称 院 部 名 称专班业级学 生 姓 名 学号指 导 教 师金陵科技学院教务处制目 录第一章 课程设计的目的和要求.1.1 C语言课程设计的目的.1.2 C语言课程设计实现的要求.第二章 课程设计的任务内容.第三章 详细设计说明.3.1 程序系统的结构. 3.2 模块描述.3.2.1 指针式时钟.3.2.2 数字式时钟.3.3 输出项.3.4 算法.3.5 流程图.3.6 函数说明.3.7 接口.3.8 调试结果.第四章 软件使用说明.4.1 软件使用说明及出现的问题.4.2 运行结果.第五章 课程设计心得与体会.附录1:参考文献.附录I第一章 课程设计的目的和要求

2、1.1 C语言课程设计的目的加深对讲授内容的理解,尤其是一些语法规定。通过课程设计,自然地、熟练地掌表针时间。1.2 C语言课程设计实现的要求时钟的时间显示与指针式时钟显示一致;可以通过上下键改变当前的时、分、秒;改的时间是小时、分钟、还是秒数;通过 Tab 键切换按 Esc 时程序退出。1第二章 课程设计的任务内容要熟练掌握 C 语言的基本知识:数据类型(整形、实型、字符型、指针、数组、等。用 C 语言实现一个模拟时钟转动程序;Graphics 函数库。序的特点和难点。动时钟;程序界面设计合理,色彩得体大方,显示正确;各指针运动规律正确;数字式时钟的时间显示与指针式时钟显示一致;按任意键时程

3、序退出。模拟时钟是一种集计时器和时钟显示于一体的程序。编写一个指针式时钟程序,的时钟表盘为椭圆形或圆形,并且圆周上有分布均匀的 12 个刻度,刻度要求显示清且为顺时针。数字钟显示时间的格式是年月日时分秒,小时为 24 进制,分钟和秒是60 进制,指针式的时钟和数字式的时钟显示的时间同步,且两个时钟所显示的时间与计算机的系统时间一致。2第三章 详细设计说明3.1 程序系统的结构图 C3.2 模块描述3.2.1 指针式时钟指针式的时钟表盘为圆形,并且圆周上有分布均匀的 12 个较大刻度和六十个较小的刻度,刻度显示清楚,分别表示小时、分钟和秒数钟面上有长度不相同的指针,即时针、分针、秒针,指针的运动

4、具有规律性,为顺时针。3.2.2 数字式时钟 24 60 3间一致。3.3 输出项数字式时钟输出“%d时%d分%d秒”。3.4 算法#define宏定义部分定义变量。利用函数为半径。利用函数setbkcolor、setcolor设置颜色。gettime(t)获取电脑时间进行显示sound()、delay()函数设置表针走动声音对应走动刻度。应用c语言库函数弧度(一秒的角度)为基本单位,且都以表盘中心为转动圆心。计算指针端点(x,y)的公式如下:x=圆心x坐标 指针长度* cos (指针方向角)y =圆心y坐标 指针长度* sin (指针方向角)注重,指针长43.5 流程图)图 53.6 函数说

5、明绘制小时的圆点:的角度值,从 12 点开始,按顺时针重新排列三角函数值,加入对角度正负的校正。 6) r 中、和 首先定义一些时钟常用的宏和定义处理时钟的一些函数及保存数据的变量:7int keyhandle(int,int); /*键盘按键判断,并调用相关函数处理*/int timeupchange(int); /*处理上移按键*/int timedownchange(int); /*处理下移按键*/int digithour(double); /*将 double型的小时数转换成 int 型*/int digitmin(double); /*将 double型的分钟数转换成 int 型*

6、/int digitsec(double); /*将 double型的秒钟数转换成 int 型*/void digitclock(int,int,int ); /*在指定位置显示时钟或分钟或秒钟数*/void drawcursor(int); /*绘制一个光标*/void clearcursor(int);/*消除前一个光标*/void clockhandle(); /*时钟处理*/double h,m,s; /*全局变量:小时,分,秒*/double x,x1,x2,y,y1,y2; /*全局变量:坐标值*/struct time t1;/*定义一个time 结构类型的数组*/3.7 接口

7、和和C /* /* 8 C 数学函数库,一些数学计算的公式的具体实现是放在 math.h 里。 3.8 调试结果在多次尝试截屏无果后,痛下决定用相机拍下来了)9图 第四章 软件使用说明4.1 软件使用说明及出现的问题在Win TC 中新建一个cpp 源文件, 然后输入代码。运行后显示一个正在行走示,在屏幕的左半边为操作提示(Tab:Cursor Move ;Up: Time+;Down:Time-;ESC:Quit the System;)和一句警示语:Nothingis more important thantime,可根据提示进行你想要的操作。按ESC退出。4.2 运行结果图 第五章 课程

8、设计心得与体会经过一个半学期对课程设计的学习,我们学习了理论知识,了解了C 语加强。通过对模拟时钟的设计进一步的巩固了用 C 编写程序,并且有利于更好的掌语埋下伏笔。握好基础知识。还有体会到了成功的感觉!通过本项课程设计也培养了我独立思考、 综合运用所学有关相应知识的能力,关!由于 C 程序设计语言是近年在国内外得到迅速推广应用的一种语言。据 51CTO2010 的语言排行榜,C 语言是程序员使用率第二高的语言,仅次于面向对象的 Java语言,是使用率最高的面向结构的编程语言。它功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多

9、特点。通过这次的程序设计更加了解了语言设计的好处和其可用性!己能够成功时还可能会获得成功吗?在课程设计的过程中也知道了自己在以前的学习中有很大的不足导致在设计过身的修养,提高自己的能力!为以后的工作打下良好的知识基础和技能基础!附录 1:教材及参考书序 号书 名编 者版 本12 编 3附录二:/*电子时钟源代码*/#include#include#include#include#include #include #define PI 3.1415926 /*/#define UP 0 x4800 /*上移键:修改时间*/#define DOWN 0 x5000 /*下移键:修改时间*/#def

10、ine ESC 0 x11b /*ESC键 : 退出系统*/#define TAB 0 xf09 /*TAB键 : 移动光标*/*函数声明*/int keyhandle(int,int); /*键盘按键判断,并调用相关函数处理*/int timeupchange(int); /*处理上移按键*/int timedownchange(int); /*处理下移按键*/int digithour(double); /*将double型的小时数转换成 int型*/int digitmin(double); /*将double型的分钟数转换成 int型*/int digitsec(double); /*

11、将double型的秒钟数转换成int型*/void digitclock(int,int,int ); /*在指定位置显示时钟或分钟或秒钟数*/void drawcursor(int); /*绘制一个光标*/void clearcursor(int);/*/void clockhandle(); /*时钟处理*/double h,m,s; /*全局变量:小时,分,秒*/double x,x1,x2,y,y1,y2; /*全局变量:坐标值*/struct time t1;/*定义一个time*/main()int driver, mode=0,i,j;driver=DETECT; /*自动检测显

12、示设备*/initgraph(&driver, &mode, );/*初始化图形系统*/添加内容 :/*为防止图形初始化时发生异常出现错误时将出现有好的提示界面 */errorcode = graphresult()if (errorcode != grOk) /* 图形初始化时出现错误*/printf(Graphics error: %s/n, grapherrormsg(errorcode);printf(Press any key to halt:);getch();exit(1); /* return with error code */* setlinestyle(0,0,3); /

13、*设置当前画线宽度和类型:设置三点宽实线*/数名: setlinestyle功 能: 设置当前画线宽度和类型用 法: void far setlinestyle(int linestyle, unsigned pattern,int width);linestyle为整数型,用来定义所画直线类型pattern为无符号整数型,该参数在需要用户自定义线型时使用 ,如果是使用系统预定义的线型则参数取0值width为整数型,用来指定所画直线的粗细SOLID_LINE0实线点线DOTTED_LINECNTER_LINEDASHED_LINEUSERBIT_LINE12中心线3虚线4用户自定义线型此处我稍

14、作修改:*/setlinestyle(0,0,3); /*设置当前画线宽度和类型:设置四点宽点线线setbkcolor(0);/*用调色板设置当前背景颜色*/*可以让用户选择系统支持的颜色作为背景色*/int bkcol, maxcolor, x=10, y=10;char IsOK;maxcolor = getmaxcolor();for (bkcol=0; bkcol=maxcolor; bkcol+)/* 清理屏幕 */cleardevice();/* 设置新的背景色*/setbkcolor(bkcol);/* output a messsage */if (bkcol = WHITE)

15、setcolor(EGA_BLUE);sprintf(msg, Background color: %d, bkcol);outtextxy(x, y, msg);IsOK=getch();if(IsOK=Y)break;setcolor(9); /*设置当前画线颜色*/line(82,430,558,430);line(70,62,70,418);line(82,50,558,50);line(570,62,570,418);line(70,62,570,62);line(76,56,297,56);line(340,56,564,56); /*画主体框架的边直线*/*arc(int x,

16、int y, int stangle, int endangle, int radius)*/arc(82,62,90,180,12);arc(558,62,0,90,12);setlinestyle(0,0,3);arc(82,418,180,279,12);setlinestyle(0,0,3);arc(558,418,270,360,12); /*画主体框架的边角弧线*/setcolor(15);outtextxy(300,53,CLOCK); /*显示标题*/setcolor(7);rectangle(342,72,560,360); /*画一个矩形作为时钟的框架*/setwritem

17、ode(0); /*规定画线的方式。mode=0, 则表示画线时将所画位置的原来信息覆盖*/setcolor(15);outtextxy(433,75,CLOCK);/*时钟的标题*/setcolor(7);line(392,310,510,310);line(392,330,510,330);arc(392,320,90,270,10);arc(510,320,270,90,10); /*绘制电子动画时钟下的数字时钟的边框架*/*绘制数字时钟的时分秒的分隔符*/setcolor(5);for(i=431;i=470;i+=39)for(j=317;j=324;j+=7)setlinestyl

18、e(0,0,3);circle(i,j,1); /*以(i, 为圆心,1为半径画圆*/setcolor(15);line(424,315,424,325); /*在运行电子时钟前先画一个光标*/*绘制表示小时的圆点*/for(i=0,m=0,h=0;i=11;i+,h+)x=100*sin(h*60+m)/360*PI)+451;y=200-100*cos(h*60+m)/360*PI);setlinestyle(0,0,4);/在指针式时钟周围显示数字 ,使更易读数circle(x,y,2);setlinestyle(0,0,1);x=110*sin(h*60+m)/360*PI)+451;

19、/在半径的延伸处显示圆点代表的小时y=200-110*cos(h*60+m)/360*PI);if(h=0)h=12;char buffer110;outtextxy(x,y,buffer1);sprintf(buffer1,%d,h);outtextxy(x,y, buffer1);h=0;/不要忘记将 h再次赋值为 0elsechar buffer110;outtextxy(x,y,buffer1);sprintf(buffer1,%d,h);outtextxy(x,y, buffer1);/将表示小时的圆点用更大的圆点与画出/*绘制表示分钟或秒钟的圆点*/for(i=0,m=0;i=59

20、;m+,i+)x=100*sin(m/30*PI)+451;y=200-100*cos(m/30*PI);setlinestyle(0,0,1);circle(x,y,1);/*在电子表的左边打印帮助提示信息*/setcolor(4);outtextxy(184,125,HELP);setcolor(15);outtextxy(182,125,HELP);setcolor(5);outtextxy(140,185,TAB : Cursor move);outtextxy(140,225,UP : Time +);outtextxy(140,265,DOWN: Time -);outtextxy

21、(140,305,ESC : Quit system!);outtextxy(140,345,Version : 2.0);setcolor(12);outtextxy(150,400,Nothing is more important than time!);clockhandle();/*开始调用时钟处理程序*/closegraph(); /*关闭图形系统*/return 0; /*表示程序正常结束向操作系统返回一个 0值*/void clockhandle()int k=0,count;setcolor(15);gettime(t);/*取得系统时间保存在 time结构类型的数组变量中*

22、/h=t0.ti_hour;m=t0.ti_min;x=50*sin(h*60+m)/360*PI)+451; /*时针的 x坐标值*/y=200-50*cos(h*60+m)/360*PI); /*时针的 y坐标值*/line(451,200,x,y);/*在电子表中绘制时针*/x1=80*sin(m/30*PI)+451; /*分针的 x坐标值*/y1=200-80*cos(m/30*PI); /*分针的 y坐标值*/line(451,200,x1,y1); /*在电子表中绘制分针*/digitclock(408,318,digithour(h); /*在数字时钟中,显示当前的小时值*/d

23、igitclock(446,318,digitmin(m); /*在数字时钟中,显示当前的分钟值*/setwritemode(1);/*规定画线的方式如果 mode=1,则表示画线时用现在特性的线与所画之处原有的线进行异或(XOR)操作实际上画出的线是原有线与现在规定的线进行异或后的结果。因此, 当线的特性不变, 进行两次画线操作相当于没有画线,即在当前位置处清除了原来的画线*/for(count=2;k!=ESC;) /*开始循环,直至用户按下 ESC键结束循环*/setcolor(12);/*淡红色*/sound(500);/*以指定频率打开PC扬声器这里频率为 500Hz*/delay(

24、700);/*发一个频率为500Hz的音调维持 700*/sound(200);/*以指定频率打开PC扬声器这里频率为 200Hz*/delay(300);/呵呵 声音怪怪的sound(600);/*以指定频率打开PC扬声器这里频率为 500Hz*/delay(800);/*发一个频率为500Hz的音调维持 700*/sound(400);/*以指定频率打开PC扬声器这里频率为 200Hz*/delay(200);/*以上两种不同频率的音调,可仿真钟表转动时的嘀哒声*/nosound(); /*关闭 PC扬声器*/s=t0.ti_sec;m=t0.ti_min;h=t0.ti_hour;x2=

25、98*sin(s/30*PI)+451; /*秒针的 x坐标值*/y2=200-98*cos(s/30*PI); /*秒针的 y坐标值*/line(451,200,x2,y2);/*绘制秒针*/*利用此循环延时一秒*/while(t0.ti_sec=s&t0.ti_min=m&t0.ti_hour=h) gettime(t);/*取得系统时间*/if(bioskey(1)!=0)k=bioskey(0);count=keyhandle(k,count);if(count=5) count=1;setcolor(15);digitclock(485,318,digitsec(s)+1);/*数字

26、时钟增加秒*/setcolor(12); /*淡红色*/x2=98*sin(s/30*PI)+451;y2=200-98*cos(s/30*PI);line(451,200,x2,y2);/*用原来的颜色在原来位置处再绘制秒针,以达到清除当前秒针的目的*/*分钟处理*/if(t0.ti_min!=m) /*/*消除当前分针*/setcolor(15); /*白色*/x1=80*sin(m/30*PI)+451;y1=200-80*cos(m/30*PI);line(451,200,x1,y1);/*绘制新的分针*/m=t0.ti_min;digitclock(446,318,digitmin(

27、m); /*在数字时钟中显示新的分钟值*/x1=80*sin(m/30*PI)+451;y1=200-80*cos(m/30*PI);line(451,200,x1,y1);/*小时处理*/if(t0.ti_hour*60+t0.ti_min)!=(h*60+m) /*/*消除当前时针*/setcolor(15); /*白色*/x=50*sin(h*60+m)/360*PI)+451;/*50:时钟的长度(单位:像素),451:圆心的 x坐标值*/y=200-50*cos(h*60+m)/360*PI);line(451,200,x,y);/*绘制新的时针*/h=t0.ti_hour;digi

28、tclock(408,318,digithour(h);x=50*sin(h*60+m)/360*PI)+451;y=200-50*cos(h*60+m)/360*PI);line(451,200,x,y);int keyhandle(int key,int count) /*键盘控制 */ switch(key)case UP: timeupchange(count-1); /*因为 count的初始值为,所以此处减*/break;case DOWN:timedownchange(count-1); /*因为 count的初始值为,所以此处减*/break;case TAB:setcolor

29、(15);clearcursor(count); /*清除原来的光标*/drawcursor(count); /*显示一个新的光标*/count+;break;return count;int timeupchange(int count) /*处理光标上移的按键*/if(count=1)t0.ti_hour+;if(t0.ti_hour=24) t0.ti_hour=0;settime(t); /*设置新的系统时间*/if(count=2)t0.ti_min+;if(t0.ti_min=60) t0.ti_min=0;settime(t); /*设置新的系统时间*/if(count=3)t0.ti_sec+;if(t0.ti_sec=60) t0.ti_sec=0;settime(t); /*设置新的系统时间*/int timedownchange(int count) /*处理光标下移的按键*/if(count=1) t0.ti_

温馨提示

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

评论

0/150

提交评论