




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课 程 设 计 报 告课程名称 c语言程序设计 课题名称 机械时钟的设计 专 业 电子信息 班 级 学 号 姓 名 指导教师 湖南工程学院课 程 设 计 任 务 书课程名称 c语言程序设计 课 题 机械时钟设计 专业班级 学生姓名 学 号 指导老师 审 批 一、设计内容与设计要求1 设计内容:机械时钟系统在屏幕上实现一个机械时钟,并且能够通过键盘上的按键完成时间的修改。目 录1.需求分析12程序总体设计13.程序详细设计24.程序运行结果115.参考资料136.总结体会137.程序源代码134机械时钟程序报告一、 需求分析根据老师的要求,要在屏幕上显示一个机械时钟并且显示当前的数字时钟以及日历。根据老师的要求,本程序要显示机械时钟就必须通过画图函数将机械表画出来。另外,本程序还用到延时函数,实现秒针,分针,时针的转动。树立起总体思想就开始设计整个程序。二、 程序总体设计本程序包含了一个主函数和六个子函数,主函数完成初始化时间(获取系统时间)以及时钟与日历的进制,同时还是调节六个子函数共同完成整个程序功能的实现。六个子函数分别完成显示机械表针和数字时钟、显示界面上的文字、显示日历、做表盘、做刻度以及重新设置程序的时间与日历。流程图如下:主函数,获取系统时间,完成时钟日历进制,设置画图窗口。做表盘,做刻度,做画图界面上一些无需变化的文字。画表针,显示数字时钟,显示日历延时一秒。时钟的秒数加一,并按时间进制控制其他时间项目输入现在的时间,并将该程序时钟的时间改成输入的时间擦去表针,擦去数字时针,擦去日历上回随时间变化的东西。按r键,进入修改界面三、 程序的详细设计1、画表盘、做刻度、显示界面上一些无需改动的文字void fun2()/做表盘setcolor(white);circle(220,240,180);circle(220,240,170);circle(220,240,2);circle(220,240,110);void fun3()/做刻度int i,ix,iy,ix1,iy1;double i1;for(i=0;i9)outtextxy(450,200,str3);elseouttextxy(450,200,0);outtextxy(465,200,str3);outtextxy(490,200,:);if(m9)outtextxy(510,200,str2);elseouttextxy(510,200,0);outtextxy(525,200,str2);outtextxy(550,200,:);if(s9)outtextxy(570,200,str1);elseouttextxy(570,200,0);outtextxy(585,200,str1);void fun5(int d,int e,int f,int g) /日历的显示char c1=年,c2=月,c3=日;setfont(30,22,宋体);tchar str15,str25,str35;_stprintf(str1,%d,d);_stprintf(str2,%d,e);_stprintf(str3,%d,f);setfont(35,25,宋体);setcolor(red);outtextxy(440,70,str1);outtextxy(550,70,c1);setfont(20,18,宋体);setcolor(white);if(e10)outtextxy(445,120,0);outtextxy(465,120,str2);elseouttextxy(445,120,str2);outtextxy(480,120,c2);if(f10)outtextxy(520,120,0);outtextxy(540,120,str3);elseouttextxy(520,120,str3);outtextxy(560,120,c3);setcolor(cyan);switch(g)case 1: outtextxy(460,160,星期一);break;case 2: outtextxy(460,160,星期二);break;case 3: outtextxy(460,160,星期三);break;case 4: outtextxy(460,160,星期四);break;case 5: outtextxy(460,160,星期五);break;case 6: outtextxy(460,160,星期六);break;case 7: outtextxy(460,160,星期日);break;通过获取的系统时间,计算出个表针的角度以及表针的终点,画出表针,并设置不同的大小、长度与颜色,以便用户的区分。在机械时钟的右侧,显示出从系统获得的日历。3、修改部分void fun6(int *a,int *b,int *c,int *d,int *e,int *f,int *g)/重新设定时间日期int m,n;printf(请问你是要修改时间还是修改日期n);printf(*n);printf(* 修改时间请按“1”,然后回车 *n);printf(* 修改日期请按“2”,然后回车 *n);printf(* 退出请按“3”,然后回车 *n);printf(*n);scanf(%d,&m);switch(m)case 1:printf(请输入当前是几点几分几秒,用逗号隔开n);scanf(%d,%d,%d,a,b,c);printf(请问是否继续修改日期n);printf(*n);printf(*继续修改请按“1”,退出请按“2”*n);printf(*n);scanf(%d,&n);if(n=2)break;case 2: printf(请输入当前是哪年哪月哪日星期几,用逗号隔开n); scanf(%d,%d,%d,%d,d,e,f,g); break; 通过使用指针,更该当前时钟程序的当前时间与日历,并将其反馈到主函数。4、主函数void main() /主函数 获取系统时间 给各个函数传送相关的时间信息int a=0,b=0,c=0,d,e,f,g,h=1;systemtime t;getlocaltime(&t); a=t.whour;b=t.wminute;c=t.wsecond;d=t.wyear;e=t.wmonth;f=t.wday;g=t.wdayofweek;initgraph(640, 480);fun3();fun2();fun4();setwritemode(r2_xorpen);while(h=1)fun1(a,b,c);fun5(d,e,f,g);sleep(1000);fun1(a,b,c);fun5(d,e,f,g);c+;if(c%60=0)b+;if(b%60=0)a+;if(a%24=0)f+;g+;if(e%2=1&e7)&f=31)/日历进制e+;if(e%2=0&e7)&f=30)e+;if(e%2=1&e7)&f31)f=f%31;if(e%2=0&e7)&f30)f=f%30;char str;if(kbhit()!=0)str=getch();if(str=r|str=r)closegraph();fun6(&a,&b,&c,&d,&e,&f,&g);initgraph(640, 480);fun3();fun2();fun4();setwritemode(r2_xorpen);else h+;closegraph(); e=e%12;主函数,获取系统时间,完成各个函数之间的数据交换,实现各个函数之间所要求的功能。四、 程序的运行结果1、 时钟界面,在设置的画图窗口中显示出机械时钟,数字时钟,日历,以及其他一些文字说明。运行图如下:上图即为运行程序是的结果2、 当运行程序后按r键,程序立刻进入时间修改界面,运行图如下:输入上图数字后,回车,可得下图该图为修改后机械时钟的界面。五、 参考资料c语言程序设计方法邓文心 张宏烈主编哈尔滨工业大学出版社出版六、 总结体会本次程序设计按照老师的要求是未完成一个机械时钟的现实,由于我所学c语言知识的局限,基本不知道该从何下手。但是我根据程序的要求首先从简单地方开始入手,即搜集此次程序设计需要用到的库函数。于是我从网络上找到了延时是函数sleep(),并且知道c语言上有一个画图函数库,其头文件是graphics.h,该头文件没有包含在我所使用的v里面,经过经一步的搜索,我从网上得知知要在上安装easyx程序即可使我使用的能够正常的使用画图函数库里的函数,我半信半疑的按照网上的说法做了,并达到了预期的效果。其实,我在一开始便在网上搜到了一个机械时钟的模板,但是由于画图函数库不能通过,模板也不能运行。但是,自我安装了easyx程序后我在网上搜的程序已经能够正常运行,这使我非常欣喜。我浏览了一下模板程序,其实,我主要是看了它的一些注释和一些特殊的函数,然后我便开始编程了。我在图书馆接了一本语言程序设计,那本书讲的是在上编译的,但是里面有一章专门讲的是语言画图,里面提到了许多用于画图的库函数,我仔细的看了那一章,体会了那些函数的用法,到此,我的前期准备工作算是做完了。老实说,此次程序设计我感觉像是对画图函数的一种深刻的理解吧。基本上我做的一切都建立在画图界面上。或许是因为准备充分,很快,我就完成了机械时钟的设计,并开始设计其他东西。一天老师检查成果,听到我说参考了网上的模板,不怎么高兴,说如果什么都去网上查不自己动脑想想,怎么能得到进步了,于是便对我提了进一步的要求,即显示数字时钟与日历,还要完成时钟日历的修改功能。在完成机械时钟后这些好像对我来说不是什么难题了,不久我便完成了整个程序的设计。在本次的程序设计中,我的确收益匪浅。通过对语言的进一步了解,我开始明白我在书上学到的知识是十分有限的,要想提高自己的编程能力,不仅要扎实语言的基础,同时还要更多阅读其他的相关资料,丰富自己的知识,这样在编程方面才可能得到进一步的提高。七、 源程序#include /图形库头文件#include/输入输出头文件#include #include #define pi 3.1415926void fun1(int h,int m,int s)/画时钟、分钟、秒钟,显示数字时钟double h1,m1,s1;int hx,hy,mx,my,sx,sy;s=s%60;m=m%60;h=h%24;s1=s*pi/30;m1=m*pi/30;h1=(h%12)*pi/6+m*pi/360;hx=int(220+100*sin(h1);hy=int(240-100*cos(h1);mx=int(220+140*sin(m1);my=int(240-140*cos(m1);sx=int(220+160*sin(s1);sy=int(240-160*cos(s1);setlinestyle(ps_solid, null, 2); setcolor(red);line(220,240,sx,sy);setlinestyle(ps_solid, null, 6); setcolor(lightgray);line(220,240,mx,my);setlinestyle(ps_solid, null, 10); setcolor(white);line(220,240,hx,hy);tchar str15,str25,str35;setfont(20,18,宋体);_stprintf(str1,%d,s);_stprintf(str2,%d,m);_stprintf(str3,%d,h);setfont(20,16,宋体);if(h9)outtextxy(450,200,str3);elseouttextxy(450,200,0);outtextxy(465,200,str3);outtextxy(490,200,:);if(m9)outtextxy(510,200,str2);elseouttextxy(510,200,0);outtextxy(525,200,str2);outtextxy(550,200,:);if(s9)outtextxy(570,200,str1);elseouttextxy(570,200,0);outtextxy(585,200,str1);void fun4()/做界面上的文字char s1=机械时钟,s2=按r键重设时间,s3=按其他键退出,s4=制作人杨自然;setfont(50,40,黑体);setcolor(red);outtextxy(80,0,s1);setfont(22,16,宋体);setcolor(blue);outtextxy(420,250,s2);outtextxy(420,300,s3);setcolor(blue);setfont(18,12,宋体);outtextxy(400,455,s4);void fun5(int d,int e,int f,int g) /日历的显示char c1=年,c2=月,c3=日;setfont(30,22,宋体);tchar str15,str25,str35;_stprintf(str1,%d,d);_stprintf(str2,%d,e);_stprintf(str3,%d,f);setfont(35,25,宋体);setcolor(red);outtextxy(440,70,str1);outtextxy(550,70,c1);setfont(20,18,宋体);setcolor(white);if(e10)outtextxy(445,120,0);outtextxy(465,120,str2);elseouttextxy(445,120,str2);outtextxy(480,120,c2);if(f10)outtextxy(520,120,0);outtextxy(540,120,str3);elseouttextxy(520,120,str3);outtextxy(560,120,c3);setcolor(cyan);switch(g)case 1: outtextxy(460,160,星期一);break;case 2: outtextxy(460,160,星期二);break;case 3: outtextxy(460,160,星期三);break;case 4: outtextxy(460,160,星期四);break;case 5: outtextxy(460,160,星期五);break;case 6: outtextxy(460,160,星期六);break;case 7: outtextxy(460,160,星期日);break;void fun2()/做表盘setcolor(white);circle(220,240,180);circle(220,240,170);circle(220,240,2);circle(220,240,110);void fun3()/做刻度int i,ix,iy,ix1,iy1;double i1;for(i=0;i60;i+)i1=i*pi/30;ix=int(220+165*sin(i1);iy=int(240-165*cos(i1);ix1=int(220+105*sin(i1);iy1=int(240-105*cos(i1);setcolor(white);if(i%15=0)bar(ix-5,iy-5,ix+5,iy+5);elsecircle(ix,iy,2);if(i%5=0)circle(ix1,iy1,5);circle(ix,iy,5);void fun6(int *a,int *b,int *c,int *d,int *e,int *f,int *g)/重新设定时间日期int m,n;printf(请问你是要修改时间还是修改日期n);printf(*n);printf(* 修改时间请按“1”,然后回车 *n);printf(* 修改日期请按“2”,然后回车 *n);printf(* 退出请按“3”,然后回车 *n);printf(*n);scanf(%d,&m);switch(m)case 1:printf(请输入当前是几点几分几秒,用逗号隔开n);scanf(%d,%d,%d,a,b,c);printf(请问是否继续修改日期n);printf(*n);printf(*继续修改请按“1”,退出请按“2”*n);p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年A特种设备《电梯安全管理》考试题库及答案(完整版)
- 2025年初级会计师考试财务成本管理模拟题及答案详解
- 2025年大学入学物理考试模拟题与答案解析科学新篇章的敲门砖
- 2025年零售业经理面试笔试题预测试题集
- 株洲研学课件
- 公务员面试题及答案
- 2025年工业自动化专家认证题库自动化控制高级工程师笔试预测题
- 公务员考试面试题及答案
- 公务员返聘面试题及答案
- 2025年机械工程设计师面试模拟题与答案手册
- 仓储主管考试试卷及答案
- 地理探索之旅:初中研学旅行方案策划
- 妇联开展宣讲活动方案
- 母婴保健培训课件学习
- 2025年6月22日四川省市直事业单位遴选笔试真题及答案解析
- 公安涉密载体管理制度
- 2025年中国蛇养殖行业市场前景预测及投资价值评估分析报告
- JG/T 536-2017热固复合聚苯乙烯泡沫保温板
- T/CSIQ 8008-2018正装鞋
- 视唱练耳讲课课件
- 酒店管理安全总监岗位职责
评论
0/150
提交评论