C语言综合训练谢海波报告.docx
《C语言综合训练谢海波报告.docx》由会员分享,可在线阅读,更多相关《C语言综合训练谢海波报告.docx(13页珍藏版)》请在冰点文库上搜索。
C语言综合训练谢海波报告
模拟时钟
谢海波
目录
摘要1
1.绪论1
2.系统分析1
2.1数据需求1
2.2功能需求1
2.3性能需求2
3.总体设计2
3.1功能设计2
3.2系统设计方案2
4.详细设计和实现3
4.1时钟上午时间设计3
4.2时钟下午时间设计3
4.3时钟表盘设计4
4.4时钟指针角度设计4
4.5时钟的指针长短设计4
4.6时针刻度设计5
5.调试与测试5
5.1调试5
5.2测试6
6.结论6
7.结束语7
参考文献7
附录1-源程序8
摘要
时钟在日常生活中是不可缺少的。
它可以让老师或同学更加的方便,的了解当前时间,以便更好的安排好自己的学习或工作,让自己的生活更加有序。
本系统使用C语言作为程序开发的语言,开发时钟,实现时钟表盘,时钟功能,并且能够准确得到当前系统时间,实现每秒走动效果。
本文从分析课题的题目背景、题目意义、题目要求等出发,分别从需求分析、总体设计、详细设计、测试等各个方面详细介绍了系统的设计与实现过程,最后对系统的完成情况进行了总结。
关键词:
时钟表盘;时钟;程序系统。
1.绪论
时钟在现代应用十分广泛,它应用于建筑标识,航空坐标,航海坐标,以及日常生活中的学校,办公室,广场,走廊,公园等它更加的方便,直观的了解当前时间。
以便于更快更有效的安排自己的工作,学习,时钟在现代生活中具有更加重要的意义。
根据课程设计任务书要求,本系统开发主要完成以下功能和性能。
(1)时钟盘系统:
包括电子钟的表盘,时针,分针,秒针,刻度等。
2.系统分析
本系统主要分为4个模块构成:
初始化屏幕画图模块、输出时钟一周整点数模块、输出分针秒针指向的位置模块、输出时间模块。
1、初始化屏幕画图模块:
该功能主要是画出时钟的外貌
2、输出时钟一周整点数模块:
主要是输出一周整点数(12,11,10。
。
。
3,2,1 )
3、输出分针秒针指向的位置模块:
主要是控制分针秒针的指向位置
2.1数据需求
本系统主要是以所取时间为系统当前时间,并每秒更新一次图象,形成时钟走动效果。
数据需要用到绘图函数,数学函数,要在DOS系统下运行,需要直角坐标系,图像显示函数,以及直线绘图函数,以及直线角度得计算,圆的绘图函数等。
2.2功能需求
本系统需要用时钟钟所取时间为系统的当前时间,背景颜色为黑色,时钟表盘为黄色,指针,刻度为紫色,并每秒更新一次图象,时钟在同一屏幕上,形成时钟走动效果。
2.3性能需求
在运行本程序时只要按照正确的操作方法不会出现无法运行的情况,系统稳定性好,安全,可靠,走时准确,刻度精确度高,时针,分针,秒针清晰区分,设计外观可爱。
3.总体设计
3.1功能设计
运用绘图函数实现该简易时钟,实现电子钟,石英钟在同一屏幕上,同步走动,并且该时钟所取时间为系统时间,没隔一秒更新一次图象。
模块图如图1所示。
图1功能模块图
3.2系统设计方案
定义了3个头文件,#include,#include,#include,分别使用了circle,lineto,outtextxy绘图函数,数学函数,在DOS系统下实现该功能。
先实现电子表得功能,上午时间如果小于10,则数字前加0,如果大于10,则正常输出,下午时间小于10,当前时间前加0,否则正常输出,没秒清屏一次,电子表则先确定坐标,再画圆,计算时针,分针,秒针长度,角度,最后根据坐标画刻度,把圆平均分成60分,画刻度。
4.详细设计和实现
4.1时钟上午时间设计
时钟上午时间流程图,如图2所示。
图2时钟上午时间流程图
开始,判断系统当前时间是否小于10点,若小于则时间则在当前时间前加0,如果系统时间不小于10,正常输出当前时间。
4.2时钟下午时间设计
时钟下午时间设计流程图,如图3所示。
图3时钟下午时间设计流程图
判断系统当前时间是否小于10点,若小于则时间前加0,否则正常输出,下午时间计算与上午相同。
4.3时钟钟表盘设计
以坐标(2,150)为圆点坐标画圆,用cricle语句画圆并显示,坐标轴中心在横坐标上,表盘平均分成60份,圆心坐标为(0,300)。
圆心半径为120,在屏幕中心显示该圆。
4.4时钟盘指针角度设计
秒针角度计算2*pi/60.0=0.1047197551;
分针角度计算2*pi/60+sec/60.0;
时针角度计算0.523598775+min/12.0;
4.5时钟的指针长短设计
设计时针长度
横坐标方向70*该方向的正弦值即end_x=mid_x+70*sin(th_hour);
纵坐标方向-70*该方向的余弦值即end_y=mid_y-70*cos(th_hour);
70时针长度
设计分针长度
横坐标方向110*该方向的余弦值即end_x=mid_x+110*sin(th_min);
横坐标方向-110*该方向的余弦值即end_y=mid_y-110*cos(th_min);
110为分针长度
设计秒针长度
横坐标方向140*该方向的余弦值即end_x=mid_x+140*sin(th_sec);
横坐标方向-140*该方向的余弦值即end_y=mid_y-140*cos(th_sec);
140为秒针长度
“-”表示相反方向的长度取值.
4.6时针刻度设计
根据坐标原点设计圆各点坐标位置
12点坐标(300,100)有语句outtextxy(300,100,"12");
1点坐标(360,120)有语句outtextxy(360,120,"1");
2点坐标(420,160)有语句outtextxy(420,160,"2");
3点坐标(440,240)有语句outtextxy(440,240,"3");
4点坐标(420,300)有语句outtextxy(420,300,"4");
5点坐标(360,340)有语句outtextxy(360,340,"5");
6点坐标(300,360)有语句outtextxy(300,360,"7");
7点坐标(240,320)有语句outtextxy(240,340,"7");
8点坐标(200,300);有语句outtextxy(200,300,"8");
9点坐标(120,240)有语句outtextxy(120,240,"9");
10点坐标(200,160)有语句outtextxy(200,160,"10");
11点坐标(240,120)有语句outtextxy(240,120,"11");
5.调试与测试
5.1调试
调试是软件开发过程中的一个重要环节,也是最复杂,对软件开发者来说也是最艰巨的任务。
调试的任务是及时改正测试过程中发现的软件错误。
具体地说,调试过程由两个步骤组成,它从表示程序中存在错误的某迹象开始,首先确定错误的准确位置,也就是找出哪个模块或哪个语句引起的错误。
然后仔细研究推断代码以确定问题的原因,并设法改正。
调试过程主要是运行编制好的程序,然后遇到错误后根据系统的提示,找到相关的问题所在。
本系统调试过程中遇到问题、原因和解决方法如下面介绍。
我的程序错误的原因是时钟不能够出现在同一屏幕上,错误的原因是因为我设定的清屏函数每次循环都清屏,将该函数程序末尾加上该函数,在这个程序整个运行后,再清屏一次,实现了该函数。
我的程序还有一处不足,编程过程中秒针不能走动,经过我的调试,发现错误是因为清屏函数没套在循环函数里面。
5.2测试
屏幕时钟,如图4所示。
图4屏幕时钟
运行结果
屏幕出现的时钟,所示时间为系统当前时间,每秒刷新一次屏幕。
6.结论
时钟程序分别从需求分析、总体设计、详细设计、测试等各个方面详细介绍了系统的设计与实现过程,最后对系统的完成情况进行了总结。
任务书中所提出的要求全部实现,每秒更新一次图象既有电子钟,又有时的实现,形成走动效果。
但不足的是没有语音定时功能,仍需日后完善。
(太少)在运行本程序时只要按照正确的操作方法不会出现无法运行的情况,系统稳定性好,安全,可靠,走时准确,刻度精确度高,时针,分针,秒针清晰区分,设计外观可爱。
7.结束语
为期一个星期的C语言综合课程设计,在这期间真正的学到了一些图象编辑的经验,不但能够熟练的掌握一些C语言的编程思路,能够熟练的运用绘图函数,学会了如何画圆,如何画直线,以及如何运用数学知识计算指针角度和如何将电子表,石英钟两函数融到同一函数中。
在曾经编写过的函数上加以修改实现了我期望实现的功能,知道学习编程必须亲手将每一个字符敲入电脑中这样才能真正的学到课本或一些理论中学不到的知识,我经过一周的努力,以及老师的帮助,终于较深刻的了解了C语言。
参考文献
[1]谭浩强.C语言程序设计(第三版).北京:
清华大学出版社,2005,7
[2]徐家福.C语言高级编程.北京:
人民邮电出版社,2006,7
[3]温江涛.课程设计安例精编.南京:
中国水利水电出版社,2006
[4]林震山.图形程序设计.湖南:
湖南大学出版,1996
[5]王为青,张圣亮.C语言实战105例.北京:
人民邮电出版社,2007,3
附录1-源程序
#include
#include
#include
#include
voidmain()
#definePI3.1416
#definemid_x320
#definemid_y240
intmain()
{
intgraphdriver=DETECT,graphmode;
intend_x,end_y;
structtimecurtime;
floatth_hour,th_min,th_sec;
{
gettime(&curtime);
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<10)printf("0");
printf("%.0f:
",(float)curtime.ti_hour);
}
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);
sleep
(1);
clrscr();
}
initgraph(&graphdriver,&graphmode,"e:
\\tc");
setbkcolor(0);
while(!
kbhit())
{
setcolor(14);
circle(mid_x,mid_y,150);
circle(mid_x,mid_y,2);
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;
end_x=mid_x+110*sin(th_min);
end_y=mid_y-110*cos(th_min);
setcolor(5);
line(mid_x,mid_y,end_x,end_y);
end_x=mid_x+70*sin(th_hour);
end_y=mid_y-70*cos(th_hour);
setcolor(5);
line(mid_x,mid_y,end_x,end_y);
end_x=mid_x+140*sin(th_sec);
end_y=mid_y-140*cos(th_sec);
setcolor(5);
line(mid_x,mid_y,end_x,end_y);
outtextxy(240,120,"11");
outtextxy(300,100,"12");
outtextxy(360,120,"1");
outtextxy(420,160,"2");
outtextxy(440,240,"3");
outtextxy(420,300,"4");
outtextxy(360,340,"5");
outtextxy(300,360,"6");
outtextxy(240,340,"7");
outtextxy(200,160,"10");
outtextxy(120,240,"9");
outtextxy(200,300,"8");
sleep
(1);
cleardevice();
clrscr();
}
closegraph();
return0;
}
完成日期:
2009年7月7日