电子时钟课程设计Word下载.docx
- 文档编号:17970758
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:22
- 大小:318.70KB
电子时钟课程设计Word下载.docx
《电子时钟课程设计Word下载.docx》由会员分享,可在线阅读,更多相关《电子时钟课程设计Word下载.docx(22页珍藏版)》请在冰豆网上搜索。
3.2整个函数流程图4
3.3初始时间模块流程图5
3.4更新时间模块流程图6
3.5时间显示模块流程图7
第四章软件使用说明8
4.1使用说明8
4.2程序运行图8
附录1参考文献13
附录2程序清单14
第一章课程设计目的和要求
1.1C++课程设计的目的
本次课程设计使得课堂教学与实验实践之间关系更为密切,让我认识到必须重视实践环节,多读程序,多编写程序,多上机实践。
进一步培养结构化程序设计的思想,加深对高级语言要素和控制结构的理解,针对C++中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序风格。
本次课程设计着眼于知识的运用,把平常学的知识运用到课程时间中来,考察我们知识运用能力,对我们所学的理论知识进一步深化。
本课程设计的目的:
巩固和加深学生对C++语言课程的基本知识的理解和掌握;
掌握C++语言编程和程序调试的基本技能;
掌握利用C++语言进行软件设计的方法;
提高书写程序设计说明文档的能力;
提高运用C++语言解决实际问题的能力。
1.2C++课程设计的要求
1.分析课程设计题目的要求。
2.对系统功能模块进行分析,写出详细设计说明文档。
3.编写程序代码,代码量要求不少于300行。
调试程序使其能正确运行。
4.设计完成的软件要便于操作和使用。
5.设计完成后提交课程设计报告。
第二章课程设计任务内容
2.1功能需求
用C++实现时钟系统,时钟系统包括时、分、秒。
该系统主要有以下功能:
1.可以获取当前系统的显示时间。
能准确地利用数字显示日期和时间,在屏幕上显示一个运行的电子时钟,按任意键时程序退出。
2.能够自由地设置时间,按“Tab”在“时”、“分”、“秒”之间切换,按“↑”、“↓”进行选中对象的调整,并在时钟显示区域内进行变动。
3.以一个走动的时钟显示时间。
2.2性能要求
1.系统易操作性
该系统运行后能够简单的进行一系列操作,显示当前系统时间,更新时间。
2.系统具有可维护性
为了使系统运作的更好,可以对系统数据及简单的功能进行简单的维护及调整。
3.该系统能够在开发的硬件系统中运行不会因外部系统的不同面做不同的修改。
第三章详细设计说明
3.1模块
3.1.1函数功能模块图
图3-1-1函数功能模块图
3.1.2模块描述
1.初始时间模块:
可以获取当前系统所显示的时间,此时间相当的精确,与当前系统所显示的时间相比无误,时间由时、分、秒构成。
2.时间更新模块;
能够自由地设置时间,按“Tab”在“时”、“分”、“秒”之间切换,按“↑”、“↓”进行选中对象的调整,并在时钟显示区域内进行变动。
3.时间显示模块
自由设置好的时间将以一个走动的时钟显示出来,该界面清晰美观。
3.2整个函数流程图
图3-2整个函数的流程图
3.3初始时间模块流程图
3.3初始时间模块流程图
3.4更新时间模块流程图
3.4初始时间模块流程图
3.5时间显示模块流程图
第四章软件使用说明
4.1使用说明
该程序可以实现电子时钟走动的功能,安装VisualC++6.0中文版后,在工具栏“文件”中单击“新建”选项,单击“文件”菜单,选择“C++Sourcefile”输入文件名“电子时钟系统”,开始输入程序,程序输入完成,单击“组建”工具栏,待程序无误后,开始执行程序。
界面显示后,按要求首先按所提示键开始进行系统工作。
编码操作完成后,先静态检查一下有没有语法错误,然后进行编译,更深一步检查语法错误。
待编译通过时,运行程序,观察是否能够正常运行,如果有问题,再去修改源程序,直至达到了预期的效果。
按照要求(输入数据的要求:
时分秒均为0~60)输入数据(例如18:
55:
29)便可得到如下图的电子时钟。
该程序中的数据(必须严格按照输入数据的要求)可改动,得到的是从相应时间开始走动的电子时钟。
4.2程序运行图
程序运行之后的图为图4-2-1:
此时显示的是当前系统的时间18:
55:
29,随着时间的改变,显示也在改变。
如图:
图4-2-2此时时间显示为14:
28:
12,按“Tab”使由时针切换到分针,更新后的时间为图4-2-3时间显示为14:
45:
36
图4-2-2
图4-2-3
图4-2-4此时时间显示为22:
29:
01,按“Tab”使由时针切换到分针,更新后的时间为图4-2-5时间显示为14:
44
图4-2-4
图4-2-5
第五章课程设计心得与体会
通过将近三个星期的上机实践学习,使我对C++有了更进一步的认识和了解,通过实践,我也发现我的好多不足之处,在这过程中我认识到如果想有效的进行程序设计,正确地应用程序设计语言表达算法,必须准确的运用程序设计语言,掌握其语法知识。
同时学习程序设计必须重视时间环节,多读程序,多编写程序,多上机实践。
这次的课程设计就使得课堂教学、式样和实践之间的关系更为紧密。
通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习C++语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己更好地学好计算机。
对于这次程序我设计的是电子时钟而不是机械表走动,在系统分析和设计的部分仍然花了比较多的时间。
模块设计部分因为涉及功能的实现,要从抽象的设计转化成实际的代码,因此对于某项功能的实现方法都思考得比较详尽。
加上在开发系统之前,我阅读很多与本系统有相关内容的书籍以做参考,使得此次系统编写能顺利进行。
由于班里每个人都需要做一份设计,所以我们经常互相交流。
在交流的时候经常能够互相提出更好的建议。
从拿到题目到完成整个编程,从理论到实践可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在课程设计中也难免会遇到过各种各样的问题,同时在设计的过程中也发现了自己的不足之处,对所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把所学过的知识重新温故。
经过对电子时钟系统设计的分析与编写,我得到了很大的收获。
自主学习的必要性更是解决问题的基础。
这次设计使我重温了以前学过的各科知识,让我对C编程有了更深刻的认识。
除了对系统作出正确的分析,实际的调查工作对系统的整体设计有着至关重要的作用。
也因为这样,如何编写代码逐渐变得明朗。
每一个功能模块经过调查后,各个功能逐渐显露出来,然后,反复探讨,验证这项功能是否有存在的必要,是否可以改进得更好。
在这样的前提下,虽然遇到不少难题,但最后还是顺利完成了这份设计。
这次程序设计作业,提升了我分析问题和思考问题的逻辑能力,更明白实际调研的重要性。
从这次设计学到的东西,相信会对我们日后的学习工作起到很大的指导作用。
附录1参考文献
[1]、谭浩强编著:
C++程序设计,北京:
清华大学出版社,2004
[2]、(美)戴特尔(Deitel,H.M.)等编著,张引等译:
C++大学基础教程(第五版),北京:
电子工业出版社,2006.6
[3]、夏云庆编著:
VisualC++6.0数据库高级编程,北京:
希望电子出版社2002
[4]、伍俊良编著:
VisualC++6.0课程设计与系统开发案例,北京:
清华大学出版社,2002.11
附录2程序清单
#include<
graphics.h>
stdio.h>
math.h>
dos.h>
#definePI3.1415926/*定义常量*/
#defineUP0x4800/*上移↑键:
修改时间*/
#defineDOWN0x5000/*下移↓键:
#defineESC0x11b/*ESC键:
退出系统*/
#defineTAB0xf09/*TAB键:
移动光标*/
/*函数声明*/
intkeyhandle(int,int);
/*键盘按键判断,并调用相关函数处理*/
inttimeupchange(int);
/*处理上移按键*/
inttimedownchange(int);
/*处理下移按键*/
intdigithour(double);
/*将double型的小时数转换成int型*/
intdigitmin(double);
/*将double型的分钟数转换成int型*/
intdigitsec(double);
/*将double型的秒钟数转换成int型*/
voiddigitclock(int,int,int);
/*在指定位置显示时钟或分钟或秒钟数*/
voiddrawcursor(int);
/*绘制一个光标*/
voidclearcursor(int);
/*消除前一个光标*/
voidclockhandle();
/*时钟处理*/
doubleh,m,s;
/*全局变量:
小时,分,秒*/
doublex,x1,x2,y,y1,y2;
坐标值*/
structtimet[1];
/*定义一个time结构类型的数组*/
main()
{
intdriver,mode=0,i,j;
driver=DETECT;
/*自动检测显示设备*/
initgraph(&
driver,&
mode,"
"
);
/*初始化图形系统*/
setlinestyle(0,0,3);
/*设置当前画线宽度和类型:
设置三点宽实线*/
setbkcolor(0);
/*用调色板设置当前背景颜色*/
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(intx,inty,intstangle,intendangle,intradius)*/
arc(82,62,90,180,12);
arc(558,62,0,90,12);
arc(82,418,180,279,12);
arc(558,418,270,360,12);
/*画主体框架的边角弧线*/
setcolor(15);
outtextxy(300,53,"
CLOCK"
/*显示标题*/
setcolor(7);
rectangle(342,72,560,360);
/*画一个矩形,作为时钟的框架*/
setwritemode(0);
/*规定画线的方式。
mode=0,则表示画线时将所画位置的原来信息覆盖*/
outtextxy(433,75,"
/*时钟的标题*/
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){
circle(i,j,1);
/*以(i,y)为圆心,1为半径画圆*/
}
line(424,315,424,325);
/*在运行电子时钟前先画一个光标*/
/*绘制表示小时的圆点*/
for(i=0,m=0,h=0;
=11;
i++,h++){
x=100*sin((h*60+m)/360*PI)+451;
y=200-100*cos((h*60+m)/360*PI);
circle(x,y,1);
/*绘制表示分钟或秒钟的圆点*/
for(i=0,m=0;
=59;
m++,i++){
x=100*sin(m/30*PI)+451;
y=200-100*cos(m/30*PI);
setlinestyle(0,0,1);
/*在电子表的左边打印帮助提示信息*/
setcolor(4);
outtextxy(184,125,"
HELP"
outtextxy(182,125,"
outtextxy(140,185,"
TAB:
Cursormove"
outtextxy(140,225,"
UP:
Time++"
outtextxy(140,265,"
DOWN:
Time--"
outtextxy(140,305,"
ESC:
Quitsystem!
outtextxy(140,345,"
Version:
2.0"
setcolor(12);
outtextxy(150,400,"
Nothingismoreimportantthantime!
clockhandle();
/*开始调用时钟处理程序*/
closegraph();
/*关闭图形系统*/
return0;
/*表示程序正常结束,向操作系统返回一个0值*/
voidclockhandle()
intk=0,count;
gettime(t);
/*取得系统时间,保存在time结构类型的数组变量中*/
h=t[0].ti_hour;
m=t[0].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));
/*在数字时钟中,显示当前的小时值*/
digitclock(446,318,digitmin(m));
/*在数字时钟中,显示当前的分钟值*/
setwritemode
(1);
/*规定画线的方式,如果mode=1,则表示画线时用现在特性的线
与所画之处原有的线进行异或(XOR)操作,实际上画出的线是原有线与现在规定
的线进行异或后的结果。
因此,当线的特性不变,进行两次画线操作相当于没有
画线,即在当前位置处清除了原来的画线*/
for(count=2;
k!
=ESC;
){/*,直至用户按下ESC键结束循环*/
/*淡红色*/
sound(500);
/*以指定频率打开PC扬声器,这里频率为500Hz*/
delay(700);
/*发一个频率为500Hz的音调,维持700毫秒*/
sound(200);
/*以指定频率打开PC扬声器,这里频率为200Hz*/
delay(300);
/*以上两种不同频率的音调,可仿真钟表转动时的嘀哒声*/
nosound();
/*关闭PC扬声器*/
s=t[0].ti_sec;
x2=98*sin(s/30*PI)+451;
/*秒针的x坐标值*/
y2=200-98*cos(s/30*PI);
/*秒针的y坐标值*/
line(451,200,x2,y2);
/*绘制秒针*/
/*利用此循环,延时一秒*/
while(t[0].ti_sec==s&
&
t[0].ti_min==m&
t[0].ti_hour==h)
{gettime(t);
/*取得系统时间*/
if(bioskey
(1)!
=0){
k=bioskey(0);
count=keyhandle(k,count);
if(count==5)count=1;
digitclock(485,318,digitsec(s)+1);
/*数字时钟增加1秒*/
/*淡红色*/
/*用原来的颜色在原来位置处再绘制秒针,以达到清除当前秒针的目的*/
/*分钟处理*/
if(t[0].ti_min!
=m){/*若分钟有变化*/
/*消除当前分针*/
/*白色*/
/*绘制新的分针*/
/*在数字时钟中显示新的分钟值*/
/*小时处理*/
if((t[0].ti_hour*60+t[0].ti_min)!
=(h*60+m)){/*若小时数有变化*/
/*消除当前时针*/
/*50:
时钟的长度(单位:
像素),451:
圆心的x坐标值*/
/*绘制新的时针*/
intkeyhandle(intkey,intcount)/*键盘控制*/
{switch(key)
{caseUP:
timeupchange(count-1);
/*因为count的初始值为2,所以此处减1*/
break;
caseDOWN:
timedownchange(count-1);
caseTAB:
setcolor(15);
clearcursor(count);
/*清除原来的光标*/
drawcursor(count);
/*显示一个新的光标*/
count++;
returncount;
inttimeupchange(intcount)/*处理光标上移的按键*/
if(count==1){
t[0].ti_hour++;
if(t[0].ti_hour==24)t[0].ti_hour=0;
settime(t);
/**/
if(count==2){
t[0].ti_min++;
if(t[0].ti_min==60)t[0].ti_min=0;
/*设置新的系统时间*/
if(count==3){
t[0].ti_sec++;
if(t[0].ti_sec==60)t[0].ti_sec=0;
inttimedownchange(intcount)/*处理光标下移的按键*/
if(count==1){
t[0].ti_hour--;
if(t[0].ti_hour==0)t[0].ti_hour=23;
/*设置新的系统时间*/
if(count==2){
t[0].ti_min--;
if(t[0].ti_min==0)t[0].ti_min=59;
if(count==3){
t[0].ti_sec--;
if(t[0].ti_sec==0)t[0].ti_sec=59;
intdigithour(doubleh)/*将double型的小时数转换成int型*/
{inti;
for(i=0;
=23;
i++)
{if(h==i)returni;
}
intdigit
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 时钟 课程设计