1、程序设计基础课程设计报告书doc湖北第二师范学院程序设计基础课程设计报告书 题 目: 模拟时钟 系 部: 计算机 专 业: 嵌入式方向 班 级: 13计科3班 姓 名: 罗曼 学 号: 1350340098 同组人员: 无 指导老师: 邓芳 设计时间:2014年05月24日2014年06月14日 1. 课程设计计划(根据自己的实际情况来写)序号起始日期工作内容15月24日5月31日在网上查找资料 并写出大概的代码26月1日6月7日修改代码,让程序能运行出来36月8日6月10日完善代码,找出小错误,让代码更完美简洁46月11日6月14日总结分析,吸取经验2. 前言(主要叙述本课题的意义、研究范围
2、及要求达到的技术参数;简述本课题应解决的主要问题。)1. 进一步掌握和利用语言进行课程设计的能力2. 进一步理解和运用结构化程序设计的思想和方法3. 初步掌握开发一个小型实用系统的基本方法4. 学会调试一个较长程序的基本方法5. 学会利用流程图和图表示算法6. 掌握书写程序设计开发文当的能力3. 需求分析(主要内容包括本课程设计题目、课程设计任务、课程设计思想、软硬件运行环境及开发工具。)1、 编写完成相应题目的程序2、 编写课程设计报告,课程设计报告应该包含以下部分1) 需求分析:包括设计题目、设计要求以及系统功能需求分析2) 总体设计:包括系统总体设计框架和系统功能模块图3) 详细设计:包
3、括主要功能模块的算法设计思路以及对应的工作流程图4) 调试分析过程描述:包括测试数据、测试输出结果以及对程序测试过程中存在问题进行思考(主要问题的出错现象、出错原因、解决方法及其效果等,相应效果截图)5) 总结:课程设计完成了哪些主要功能,是否有扩展功能?还有哪些地方需要改进?课程设计的学习与体会?有哪些合理化建议? 6) 在实验室建立程序运行环境,并在指导教师的监督下,独立解决问题,运行程序和回答教师的提问。4. 概要设计(主要叙述本课题设计的流程图(各功能模块)、主要的数据结构、主要函数功能介绍、函数间的调用关系等,附main( )函数源代码或伪代码。)/程序名称:模拟时钟程序 /编译环境
4、:Visual C+ 6.0,Easyx库 #include #include #include #include graphics.h#define PI 3.1415926int main(void) /*函数原型声明*/ void DralDial(); /画表盘函数 void DrawDecoration(); /化装饰的函数 void DrawHand(int hour, int minute, int second); /画指针的函数 initgraph(600, 600); /初始化600600的绘图窗口(就是类似于ps中的画布大小) setbkcolor(RGB(153, 20
5、4, 255); /设置背景色 cleardevice(); /清空屏幕? DrawDecoration(); /画装饰(网状线条) DralDial(); /画表盘(圆) /刻名字(roman) setcolor(RED); setfont(32, 0, 华文新魏); outtextxy(260, 130, Roman); /在指定的位置输出一字符串 setwritemode(R2_XORPEN); /设置异或绘图方式 SYSTEMTIME t; /定义变量保存当前时间 while(!kbhit() /kbhit用来检测键盘是否有按键,有则返回1,没有则返回0.所以while(!kbhit(
6、).就是没有按键的时候进行循环 GetLocalTime(&t); /获取当前时间(计算机的时间) DrawHand(t.wHour, t.wMinute, t.wSecond); /画表针 Sleep(1000); /让函数滞留一秒 DrawHand(t.wHour, t.wMinute, t.wSecond); /擦表针 closegraph(); /关闭绘图窗口 return 0;/*画表盘*/void DralDial() /定义DralDial()函数 int i; int x1, y1, x2, y2, x3, y3, x4, y4, x5, y5; /表心坐标系坐标 char r
7、ome3= 12,1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ; /表盘数字 /画四个圆 setcolor(LIGHTGRAY); circle(300, 300, 250); /前两个数值确定坐标后一个数值是圆的半径 circle(300, 300, 30); circle(300, 300, 260); circle(300, 300, 270); for(i = 0; i 59; i+) / 画60条短线 setcolor(LIGHTGRAY); x1 = (int)(300 + (sin(i * PI / 30) * 250); y1 = (int)(300 -
8、 (cos(i * PI / 30) * 250); x2 = (int)(300 + (sin(i * PI / 30) * 260); y2 = (int)(300 - (cos(i * PI / 30) * 260); line(x1, y1, x2, y2); /画12个三角形 setfillstyle(GREEN); /设置填充图样和颜色函数 if(i % 5 = 0) /每12个间隔画一个图形 x3 = (int)(x1 + sin(i + 5) * PI / 30) * 12 ); y3 = (int)(y1 - cos(i + 5) * PI / 30) * 12 ); x4
9、= (int)(x1 + sin(i - 5) * PI / 30) * 12 ); y4 = (int)(y1 - cos(i - 5) * PI / 30) * 12 ); x5 = (int)(290 + (sin(i - 0.2) * PI / 30) * 220); y5 = (int)(290 - (cos(i - 0.2) * PI / 30) * 220); int triangle6 = x1, y1, x3, y3, x4, y4; /三角形三顶点坐标 setcolor(YELLOW); /三角形的颜色 fillpoly(3, triangle); /画并填充一个多边形的函
10、数 /写表盘数字 setcolor(RED); /颜色 setfont(24, 0, 黑体); /字体 outtextxy(x5 , y5, romei / 5); /字符的位置 / 画装饰(网状线)void DrawDecoration() /定义DrawDecoration()函数 double i; int x1, y1, x2, y2; /表心坐标系坐标 /极坐标系,画函数图像 setcolor(RGB(250, 225, 222); for(i = 0; i 10 * PI ; i += 0.4) x1 = (int)(300 + (250 * sin(2.4 * i); y1 =
11、(int)(300 - (250 * cos(2.4 * i); x2 = (int)(300 + (250 * sin(2.4 * (i + 1); y2 = (int)(300 - (250 * cos(2.4 * (i + 1); line(x1, y1, x2, y2); /画指针void DrawHand(int hour, int minute, int second) int xhour, yhour, xminute, yminute, xsecond, ysecond; /表心坐标系指针坐标 xhour = (int)(130 * sin( hour * PI / 6 + m
12、inute * PI / 360 + second * PI / 1800); yhour = (int)(130 * cos( hour * PI / 6 + minute * PI / 360 + second * PI / 1800); xminute = (int)(145 * sin( minute * PI / 30 + second * PI / 1800); yminute = (int)(145 * cos( minute * PI / 30 + second * PI / 1800); xsecond = (int)(200 * sin( second * PI / 30)
13、; ysecond = (int)(200 * cos( second * PI / 30); /画时针 setlinestyle(PS_SOLID, 10); /线的样式 setcolor(LIGHTGRAY); /线的颜色 line(300 + xhour, 300 - yhour, 300 -xhour / 6, 300 + yhour / 6); /线的位置 /画分针 setlinestyle(PS_SOLID, 7); setcolor(RGB(222, 158, 107); line(300 + xminute, 300 - yminute, 300 -xminute / 4, 3
14、00 + yminute / 4); /画秒针 setlinestyle(PS_SOLID, 3); setcolor(RED); line(300 + xsecond, 300 - ysecond, 300 -xsecond / 3, 300 + ysecond / 3); 5. 详细设计(主要内容:自己所负责的模块数据流程图、主要技术源代码以及注释、用户界面及用户使用手册等)首先,先画出个钟的大致轮廓。从输出数字到画出外轮廓,到标出短线到画出时针、分针、秒针。这个轮廓就已经完成了。然后,为了更加这个钟的实用性。就通过获取系统时间来结合实际意义,这是最简单,最好的方法。从应用上,它显示的是实
15、际的时间,增强了可用性;从编程上,不用再复杂地再编一个更时间一样的函数来,减少程序的篇幅、复杂性和编程者的工作量。接着顺带利用时间的变量名来画时针,分针,秒针。最后,为了让时针,分针,秒针让观察者看起来是连续的变化,即形象地模拟真实的机械钟表那样运动,就用函数让时针,分针,秒针跟着时间一齐走动。1. 画出钟表的轮廓:1)钟表的外轮廓 circle(320,240,189); circle(320,240,180);2)画出钟内的短线x1=180*sin(i*6*pi/180)+320; y1=180*cos(i*6*pi/180)+240; x2=(180-l)*sin(i*6*pi/180)
16、+320; y2=(180-l)*cos(i*6*pi/180)+240; line(x1,y1,x2,y2);3)画出时针、分针、秒针d(120,n,30);d(140,m,6);d(160,s,6);2. 获取系统时间:getdate(d);gettime(t);3. 时间和声音的表达:1)时间时针d(120,h,30); h=t0.ti_hour; d(120,h,30);分针d(140,m,6); m=t0.ti_min; d(140,m,6);秒针d(160,s,6); s=t0.ti_sec; d(160,s,6);2)声音delay()sound()6. 技术难点与分析(主要内容
17、:本课题在设计过程中所遇到的技术难点及解决方法。)在这次模拟时钟转动程序设计中,我遇到了很多困难,通过查资料,向同学、师兄、老师请教,才一一得到解决。比如刚开始无法运行,后来查资料知道是因为C+无法运行图形库。后来在同学和老师的帮助下,找到了解决方法。下载easyX,问题就得到了解决。还有过程中的许多小错误,比如遗漏分号,等等。是我认识到作为程序员一定要细心认真。C语言的设计必须结合实际,充分考虑界面友好等人性化设置,这就要求我们要多观察,敢创新。另外上机实验是必不可少的,理论的东西学得再好,不结合实验区验证始终只能停留在理论阶段。7. 心得体会(主要对本课题开发过程进行归纳和总结,还应包括所
18、得结果与已有结果的比较和本课题尚存在的问题,以及进一步开发的见解与建议。感谢对本课程设计完成过程中曾直接给予帮助的人员)我发现平时自学到的知识太少了,“书到用时方恨少”,今后我要把更多时间用在基础学习上,利用课余时间多看课外书籍,拓宽知识面。通过此次实战演练,我还学到很重要的一点,就是要虚心请教他人,个人的力量总是有限的,只有发挥众人的智慧才能把任务完成的更好,这在今后的工作中也是相当重要的。 8. 致谢(以简短的文字对在设计研究和设计报告撰写过程中曾直接给予帮助的人员表示自己的谢意)感谢刘波同学和老师对我们的帮助9. 参考文献(在课程设计过程中曾参考或引用过的书籍、文献以及网络资源列表)1 谭浩强程序设计(第三版)北京:清华大学出版社,2005年9月2 谭浩强程序设计题解与上机指导(第三版)北京:清华大学出版社,2005年7月3 夏宝岚 张慕蓉 夏耘.程序设计教程(第二版)M,上海:华东理工出版社,2003.14 陈锦昌 赵明秀.C语言计算机绘图教程(第一版)M,广州:华南理工大学出版社,1998.9