资源描述
2014-2015学年 第二学期 学号高级语言程序设计课程设计报告题目:图形模拟时钟专业:计算机科学与技术班级 :14级(2)班姓名:王欣指导教师:陈广宏成绩:计算机学院2015年5月20日目录1设 计 内 容 及 要求 21.1 设计要求21.2 程序结构流程图22概要设计 42.1 概要分析42.2 数据结构设计62.3 用法说明2.4 实验结果要求73设 计 结 果 与 分析 73.1 实验结果73.2 实验结果与分析74小结8致谢 8参考文献 码91 设计内容及要求1.1 设计要求模拟机械钟表行走;要准确地利用数字显示日期和时间;在屏幕上显示一个活动时钟;程序界面设计合理,色彩得体大方,显示正确;各指针运动规律正确;数字式时钟的时间显示与指针式时钟显示一致;按任意键时程序退出。 在屏幕上显示一个图形时钟 (用程序绘制一个班于时钟样式相似即可) , 时间与系统时间一致, 且要随着时间的走到准确的走动。1.2 程序结构流程图图 1:总程序流程图 2:指针转动流程图2 概要设计2.1 概要分析( 1) void Drawclock 函数void DrawClock(int x,int y,int color) int r=150;float th;setcolor(color);circle(x,y,r);circle(x,y,2);作用:画表盘( r 为表盘的半径, x , y 为圆心的坐标。)( 2) void DrawHand 函数void DrawHand(int x,int y,float th,int l,int color)int x1,y1;x1=x+l*sin(th);y1=y-l*cos(th);setcolor(color);line(x,y,x1,y1);作用:画指针x: 直线起点的横坐标y: 直线起点的纵坐标x1: 直线终点的横坐标y1: 直线终点的纵坐标3) void main() 函数Part :int gdriver=DETECT,gmode;struct time curtime; 类型和最高分辨率float th_hour,th_min,th_sec;initgraph(&gdriver,&gmode,);Graphdriver - - - 配适器graphmode - - - 显示模式Part :setbkcolor(0); 背景色Part :while(! kbhit()DrawClock(x0,y0,14); 函数gettime(&curtime); 得到当前系统时间gotoxy(35,20); 定位输出位置Part :if(float)curtime.ti_hour=12) 上午的时间处理printf(AM );if(float)curtime.ti_hour10) printf(0); 十点之前在小时数前加printf(%.0f:,(float)curtime.ti_hour); 输出小时else 下午的时间处理printf(PM );if(float)curtime.ti_hour-1210) printf(0);如果时间减去12 小时小于 10printf(%.0f:,(float)curtime.ti_hour-12); 输出小时Part :if(float)curtime.ti_min10) printf(0); 相当于小时的计算方法printf(%.0f:,(float)curtime.ti_min); 输出分钟 (同 part )if(float)curtime.ti_sec10) printf(0);printf(%.0f,(float)curtime.ti_sec);Part :以下三行计算表针转动角度,以竖直向上为起点,顺时针为正Part :画指针DrawHand(x0,y0,th_hour,70,2); 画时针DrawHand(x0,y0,th_min,110,3); 画秒针Part :settextstyle(2,0,3); 设置字体.2: 文字的字体;0: 文字的方向 ;3: 文字的大小outtextxy(270,160,MADE BY:SDW); 输出字体(270, 160)为字体的坐标Part :sleep(1); 延时一秒后刷新cleardevice(); 清除图形屏幕closegraph() 关闭图形系统,退出图形方式2.2 数据结构设计1) 是对时钟程序做全面的分析,即对程序要使用的编写方法功能,运行方式 进行分析,并做出正确的解决方案。2) 是程序的编写。由于该程序所涉及的信息内容比较广泛,所以程序的编写也有些复杂。 程序的编写是一项困难的任务, 完成此程序必须运用书中的大部分知识,而且要有清晰的思路和较强的语言组织能力。3) 是程序的检查和系统的调用。当程序运行后,显示出一个时钟。1.3 用法说明第一步,用编辑程序把编制的源程序按照一定的书写格式送到计算机中;第二步,把送入的源程序 翻译成机器语言,即用编译程序对源程序进行语法并将符合语法规则源程序语句翻译成计算机能识别的“语言”;第三步,使用计算机中的连接程序,把翻译好的计算机语言程序连接起来,并扶植成一个计算机能真正运行的程序;第四步,将修改后的程序运行;第五步,以后使用时双击clock.exe 文件即科。1.4 试验结果要求在屏幕上显示一个时钟,(包括:时针,分针,秒针) 时针所显示的时间 为 系统时间,用户可以通过修改系统的时间来修改时钟的时间。3 设计结果与分析3.1 实验结果图 4:实验结果3.2 实验结果分析与讨论问题 :程序清单中某个符号添加错误,导致编译时出现错误,执行不出结果。分析:经小组讨论分析与搜索,源程序中符号“:”无意义,删除程序清单中所有“:”符号,在编译时,无错误。4 小结刚开始做时基本上什么都不懂,用TC做,我更不会。不过参考了很多资料, 到网上查,泡了几天图书馆,差不多能写出基本程序,虽然很多是借鉴别人的,不过能写成这样,我心里还是挺高兴的。有了一点成功我就很兴奋,这是动力。程序很奇特,很多问题都可以用程序编写,看到那些大型程序我就感觉我也能写出这样的程序。程序设计主要靠理解与运用,有些没有学过的知识不一定要懂得彻底,只要会运用就行。不足之处也很多,程序思路不太清晰可能有些混乱。有很多程序设计使用并不熟练,甚至有些方法掌握不了,更容易忘记。算法结构了解并不深入,独立自主的想法占据总体达不到要求。需要加强练习和对知识的理解与掌握。通过上机实验加深对课内所学的C和C+邮言函数图形编程基本操作的理解,熟练掌握常见的绘图函数,并熟悉和熟练掌握TC 的应用和开发环境,在图像编辑也有了很大的进步,在图形程序设计方法,图形生成算法以及 C和C+邮言编程环境, 程序的调试额测试方面受到比较系统和严格的训练。 我看到了计算机编程这门课中有意义的一面, 增加了我学习这门课程的兴趣, 计算机编程大大简化了我们生活中的很多复杂的工作, 也使我们的生活更加方便, 简单。 提高了生活的效率, 加快了生活的节奏。 计算机在现在必将方便生活, 为人民带来高质量的生活。 这也让我对自己的专业课充满了信心和对该课程的爱好, 我一定会积极的学习专业课知识, 充分发挥该门课程的作用, 查找更多的专业资源, 用来补偿我的不足。在以后的学习中我会更加努力,更多动手,多学习。致谢在这次C语言课程设计中,我的老师和同学给了我及大的帮助。特别是我的指导老师陈广宏老师, 还有我的小组组长仇媛媛的耐心帮助, 在此, 我对他们表示感谢 ! 感谢他们在我面对困难时给了我帮助和支持。也感谢那些给我帮助的所有同学!参考文献1 张基温 .C 语言程序设计案例教程. 清华大学出版社, 20052 王德银实用 C 语言程序设计 . 人民邮电出版社, 20053 谭浩强 .C 语言程序设计教程. 高等教育出版社, 20064 段兴 .C 言实用程序设计10 100 例.人民邮电出版社, 20025 杨旭 .C 语言程序设计案例教程. 中国铁道工业出版社,2004源代码# include # include # include # define pi 3.1415926void draw(int a, int b, int c)float x, y;x=a*cos(b*c*pi/180-pi/2)+300; /*确定横坐标*/y=a*sin(b*c*pi/180-pi/2)+240; /*确定纵坐标*/line(300, 240, x, y);/* 绘制时针或分针或秒针*/void init() /* 划时钟边框函数*/int i,l,x1,x2,y1,y2;circle(300,240,200);/* 以( 300, 240)为圆心,200 为半径画圆 */circle(300,240,5);/* 以( 300, 240)为圆心,5 为半径画圆 */for(i=0;i60;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,i;int gdriver, gmode;unsigned char h, m, s;struct time t1;初始化 */gdriver = DETECT;initgraph(&gdriver, &gmode, ); /* for(i=0;i=6;i+)outtextxy(300,80,12) ;outtextxy(300,390,6);outtextxy(140,230,9);outtextxy(460,230,3);init(); /* 调用 init ()函数 */setwritemode(1);/* 将当前线与原有的线进行异或操作*/gettime(t); /* 将计算机时间写入结构体t 中*/h = t0.ti_hour; /*h m = t0.ti_min; /*m s = t0.ti_sec; /*s setcolor(7);draw(150, h, 30); /* setcolor(14);draw(170, m, 6); /* setcolor(4);draw(190, s, 6); /* while (!kbhit()赋初值当前时数*/赋初值当前分数*/赋初值当前秒数*/画时针 */画分针*/画秒针*/清除前面画的秒针*/画秒针 */清除前面画的分针 */画分针 */清除前面画的时针 */画时针 */while (t0.ti_sec = s) gettime(t);setcolor(4);draw(190, s, 6); /*s = t0.ti_sec;draw(190, s, 6); /*if (t0.ti_min != m)setcolor(14);draw(170, m, 6); /* m = t0.ti_min;draw(170, m, 6); /*if (t0.ti_hour != h)setcolor(7);draw(150, h, 30); /* h = t0.ti_hour;draw(150, h, 30); /* getch();closegraph(); /* 退出图形界面*/
展开阅读全文