



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.计算机程序设计 (C 语言 )课程设计报告题目:电子动画时钟学院:机电工程学院专业:班级: 090109 班学号:指导教师:设计日期:.一、概述选题背景:随着社会的进步和科技的发展,电子钟表逐渐成为了人们生活中不可缺少的一部分。设计思路: (一)功能模块设计,1.电子时钟执行主流程2.电子时钟界面显示3.电子时钟按键控制模块4.时钟动画处理模块(二)数据结构 设 计1.time结 构 体2. 全 局 变 量 ( 三 ) 函 数 功 能 描 述1.keyhandle()2.timeupchange()3.timedownchange()4.digitclock()5.drawcursor()6
2、.clearcursor()7.void clockhandle()8.main() (四)程序实现(五)运行结果。二、概要设计2.1、数据结构此程序中,使用了C 语言的 time 结构体和几个全局变量,1.time 结构体struct timeunsigned char ti_min;/* 分钟 */unsigned char ti_hour;/* 小时 */unsigned char ti_hund;/* 百分之一秒 */unsigned char ti_sec;/* 秒*/;time 结构体定义在 dos.h 文件中,可用来保存系统的当前时间,其中各字段的值的含义如下。1.unsigne
3、d char ti_min: 保存分钟值。.2.unsigned char ti_hour: 保存小时。3.unsigned char ti_hund: 保存百分之一秒,例如,ti_hund=500 ,表示 1/500秒。4.unsigned char ti_sec:保存秒数。2.2、全局变量下面对程序用到的全局变量及数组进行说明.1. double h,m,s: 此 3 个全局变量分别用来保存小时,分钟,秒数。2. double x,x1,x2,y,y1,y2:保存数字时钟中小时,分,秒在屏幕中显示的坐标值。3.struct time t1: 定义一个 time 结构类型的数组,此数组只有t
4、0 一个元素。2.3 模块列表1.时钟动画处理模块时钟动画处理模块主要由clockhandle() 函数来实现,程序中旧时钟指针的擦除是借助setwritemode(mode) 函数设置画线的方式来实现。如果mode=1 ,则表示画线时用现在特性的线所画之处原有的线性异或(XOR)操作,实际上画出的线是原有线与现在规定的线进行异或后的结果。因此,当线的特性不变时, 进行两次画线操作相当于没有画线,即在当前位置处清除了原来的画线。2.时钟按键控制模块在电子时钟中,按键控制模块最主要的工作就是必须能读取用户按键,对按键值进行判断,并调用相应函数来执行相关操作。3.数字时钟处理模块(1)调用 dig
5、itclock(int x,int y,int clock) 函数。在数字时钟 r 指定位置显示时,分,秒,其中 digithour(double h),int digitour(double h)和 digitsec(doubles) 用于完成数值的 double 型向 int 型转换。(2)调用 drawcursor(int count),clearcursor(int count) 函数来完成旧光标的擦除和新光标的绘制。2.4、程序结构图(也就是模块之间的关系)电子时钟界按模 时数块 钟字面显键动时控示画钟模模模处块块块理.三 、详细设计3.1 程序预处理模块。 包括加载头文件, 定义常
6、量,变量,结构体数组和函数原型声明。3.2主控 模块main().main() 函数主要 实现 了对电子 时钟 的初 始化工作 ,及clockhandle() 函数的调用。3.3 时钟动画处理模块。3.4 时针按键控制模块。 在电子时钟中,按键控制模块最主要的工作就是必须能读取用户按键,对按键值进行判断,并调用相应函数来执行相关操作。流程图如下。3.5 数字时针处理模块。 在数字时钟处理模块中, 主要实现数字时钟的显示和数字的时钟修改。其中,在数字时钟的修改中,用户可以按Tab 键定位需要修改的内容的位置,然后通过按光标上移或下移键来修改时间。.四、调试程序错误 1:错误现象: Declara
7、tion syntan error错误原因:声明错误,缺分号。修改方法:在声明语句后添加分号。错误 2:错误现象: Two few parameters in call to setlinestyle in function main错误原因:语句缺少参数。修改方法:在 main() 函数中找到缺少参数的语句添加相应的参数。错误 3:错误原因: Function call missing) in function clockhandle错误原因:在 clockhandle函数调用的是后函数表达式缺少一个) 。修改方法:找到错误语句添加缺少的表达式符号。五、心得总结程序优点:本程序旨在训练学生的
8、基本编程能力,本程序中涉及时间结构体, 数组,绘图等方面的知识,通过本程序的训练使学生能对C 语言有一个更深刻的了解。掌握利用 C 语言相关函数开发电子时钟的基本原理,为进一步开发出高质量的程序打下坚实的基础。程序缺点:程序各个模块之间的控制连接比较繁琐,容易出现错误。.六附程序清单#include<graphics.h>#include<stdio.h>#include<math.h>#include<dos.h>#define PI 3.1415926#define UP 0x4800#define DOWN0x5000#define Esc
9、 0x11b#define TAB 0xf09int keyhandle (int,int);int timeupchange (int);int timedownchange (int);int digithour (double);int digitmin (double);int digitsec (double);void digitclock (int,int,int);void drawcursor (int) ;void clearcursor (int) ;void clockhandle () ;double h,m,s ;double x,x1,x2,y,y1,y2;str
10、uct time t1 ;main()int driver,mode=0,i,j;driver =DETECT;initgraph (&driver,&mode,"c:tc");setlinestyle (0,0,3);setbkcolor(0);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(int x, int y,
11、int. stangle, int endangle, int radius)*/arc(82,62,90,180,12);.arc(558,62,0,90,12);setlinestyle (0,0,3);arc(82,418,180,279,12);setlinestyle (0,0,3);arc(558,418,270,360,12);setcolor(15);outtextxy(300,53,"CLOCK");setcolor(7);rectangle(342,72,560,360);setwritemode(0);setcolor(15);outtextxy(43
12、3,75,"CLOCK");setcolor(7);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) setlinestyle(0,0,3);circle(i,j,1);setcolor(15) ;line(424,315,424,325);for(i=0,m=0,h=0;i<=11;i+,h+) x=100*si
13、n( (h*60+m)/360*PI)+451 ;y=200-100*cos( (h*60+m)/360*PI) ;setlinestyle(0,0,3) ;circle(x,y,1) ;for(i=0,m=0 ;i<=59;m+,i+) x=100*sin (m/30*PI)+451;y=200-100*cos(m/30*PI ) ;setlinestyle(0,0,1 ) ;circle(x,y,1) ;setcolor(4) ;outtextxy(182,125, "HELP" ) ;setcolor(5) ;outtextxy(140,185, "T
14、AB :Cursor move ") ;.outtextxy(140,225, "UP : Time +") ;outtextxy(140,265, "DOWN : Time-") ;outtextxy(140,305, "Esc : Quit system! " ) ;outtextxy(140,345, "Version : 2.0") ;setcolor(12);outtextxy(150,400, "Nothing is more important than time !"
15、) ;clockhandle() ;closegraph() ;return(0);void clockhandle()int k=0,count ;setcolor(15) ;gettime(t) ;h=t0.ti_hour ;m=t0.ti_min ;x=50*sin(h*60+m)/360*PI)+451 ;y=200-50*cos(h*60+m) /360*PI) ;line(451,200,x,y);x1=80*sin(m/30*PI) +451 ;y1=200-80*cos(m/30*PI) ;line(451,200,x1,y1) ;digitclock(408,318,digi
16、thour(h);digitclock(446,318,digitmin(m);setwritemode(1) ;for(count=2;k!=Esc;) setcolor(12) ;sound(500);delay(700);sound(200);delay(300);nosound() ;s=t0.ti_sec ;m=t0.ti_min ;h=t0.ti_hour ;x2=98*sin(s/30*PI)+451 ;y2=200-98*cos(s/30*PI) ;line(451,200,x2,y2 ) ;.while(t0.ti_sec=s&&t0.ti_min=m&
17、;&t0.ti_hour=h) gettime(t);if(bioskey(1)!=0) k=bioskey(0);count=keyhandle(k,count) ;if(count=5)count=1 ;setcolor(15);digitclock (485,318,digitsec(s)+1) ;setcolor(12) ;x2=98*sin(s/30*PI)+451 ;y2=200-98*cos(s/30*PI ) ;line(451,200,x2,y2) ;if(t0.ti_min!=m ) setcolor(15) ;x1=80*sin(m/30*PI)+451 ;y1=
18、200-80*cos(m/30*PI ) ;line(451,200,x1,y1 ) ;m=t0.ti_min;digitclock(446,318,digitmin(m) ) ;x1=80*sin(m/30*PI)+451 ;y1=200-80*cos(m/30*PI) ;line(451,200,x1,y1 ) ;if(t0.ti_hour*60+t0.ti_min)!=(h*60+m) setcolor(15) ;x=50*sin(h*60+m)/360*PI)+451 ;y=200-50*cos(h*60+m)/360*PI);line(450,200,x,y );h=t0.ti_ho
19、ur ;digitclock(408,318,digithour (h) ) ;x=50*sin(h*60+m)/360*PI) ;line(451,200,x,y ) ;.int keyhandle(int key ,int count ) switch(key) case UP: timeupchange(count-1); break ;case DOWN :timedownchange (count-1) ;break ;caseTAB :setcolor (15) ;clearcursor(count) ;drawcursor(count) ;count+ ;break;return
20、 count ;int timeupchange(int count )if(count=1) t0.ti_hour+;if(t0.ti_hour=24)t0.ti_hour=0;settime(t) ;if (count=2) t0.ti_min+;if(t0.ti_min=60) t0.ti_min=0 ;settime(t) ;if(count=3) t0.ti_sec+;if(t0.ti_sec=60) t0.ti_sec=0 ;settime(t) ;int timedownchange(int count )if(count=1) t0.ti_hour- ;if(t0.ti_hour=0)t0.ti_hour=23 ;settime(t) ;if(count=2) .t0.ti_min-;if(t0.ti_min=0)t0.ti_min=59 ;settime(t) ;if(count=3) t0.ti_sec- ;if(t0.ti_sec=0) t0.ti_sec=59;settime (t) ;void digitcloc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 应急安全教育培训制度课件
- 应急安全培训师课件
- 2025山东省肥城市中考数学能力检测试卷及答案详解(考点梳理)
- 2024-2025学年度反射疗法师大赛理论通关题库附答案详解【基础题】
- 买房煤气合同(标准版)
- 传染病疑似病例早期识别与护理观察要点
- 中药面膜合同(标准版)
- 2025年乐山马边彝族自治县事业单位考核招聘18人笔试备考题库及答案详解一套
- 2024年自考专业(汉语言文学)题库及参考答案详解【基础题】
- 2025年新零售环境下实体书店数字化转型成功案例研究报告
- 爱牙日课件教学课件
- 公司各类补贴管理办法
- 2025年公安机关人民警察高级执法资格考试试卷(完整版)含答案
- 2025年铜化集团招聘笔试备考题库(带答案详解)
- 2025年国家基本药物目录培训
- 2025至2030中国桌面云行业发展趋势预判及市场前景预测报告
- 干眼基础试题及答案
- T/DZJN 118-2022废旧锂离子电池磷酸铁锂材料再生利用技术规范
- 艾灸治疗脾胃病的临床实践
- 资质代办合同协议书范本
- 2025年社区卫生服务岗位考试题及答案
评论
0/150
提交评论