c语言计算机程序设计,计算机程序设计(C语言)课程设计报告
《计算机程序设计(C语言)课程设计报告》由会员分享,可在线阅读,更多相关《计算机程序设计(C语言)课程设计报告(12页珍藏版)》请在人人文库网上搜索。
1、计算机程序设计(C语言)课程设计报告题目:电子动画时钟 学院: 机电工程学院专业: 班级:090109班学号: 姓名: 指导教师: 设计日期: 一、概述选题背景 :随着社会的进步和科技的发展,电子钟表逐渐成为了人们生活中不可缺少的一部分。设计思路:(一)功能模块设计,1.电子时钟执行主流程2.电子时钟界面显示3.电子时钟按键控制模块4.时钟动画处理模块(二)数据结构设计1.time结构体2.全局变量(三)函数功能描述1.keyhandle()2.timeupchange()3.timedownchange()4.digitclock()5.drawcursor()6.clearcursor()。
2、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.unsigned char ti_min:保存分钟值。2.un。
3、signed 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结构类型的数组,此数组只有t0一个元素。 2.3 模块列表1.时钟动画处理模块时钟动画处理模块主要。
4、由clockhandle()函数来实现,程序中旧时钟指针的擦除是借助setwritemode(mode)函数设置画线的方式来实现。如果mode=1,则表示画线时用现在特性的线所画之处原有的线性异或(XOR)操作,实际上画出的线是原有线与现在规定的线进行异或后的结果。因此,当线的特性不变时,进行两次画线操作相当于没有画线,即在当前位置处清除了原来的画线。2.时钟按键控制模块在电子时钟中,按键控制模块最主要的工作就是必须能读取用户按键,对按键值进行判断,并调用相应函数来执行相关操作。3.数字时钟处理模块(1)调用digitclock(int x,int y,int clock)函数。在数字时钟r指。
5、定位置显示时,分,秒,其中digithour(double h),int digitour(double h)和digitsec(doubles)用于完成数值的double型向int型转换。(2)调用drawcursor(int count),clearcursor(int count)函数来完成旧光标的擦除和新光标的绘制。2.4、程序结构图(也就是模块之间的关系)数字时钟模块按键控模块界面显示模块时钟动画处理模块电子时钟三 、详细设计3.1程序预处理模块。包括加载头文件,定义常量,变量,结构体数组和函数原型声明。 3.2主控模块main().main()函数主要实现了对电子时钟的初始化工作,。
6、及clockhandle()函数的调用。3.3时钟动画处理模块。3.4时针按键控制模块。在电子时钟中,按键控制模块最主要的工作就是必须能读取用户按键,对按键值进行判断,并调用相应函数来执行相关操作。流程图如下。3.5数字时针处理模块。在数字时钟处理模块中,主要实现数字时钟的显示和数字的时钟修改。其中,在数字时钟的修改中,用户可以按Tab键定位需要修改的内容的位置,然后通过按光标上移或下移键来修改时间。四、调试程序错误1:错误现象:Declaration syntan error错误原因:声明错误,缺分号。修改方法:在声明语句后添加分号。错误2:错误现象:Two few parameters i。
7、n call to setlinestyle in function main错误原因:语句缺少参数。修改方法:在main()函数中找到缺少参数的语句添加相应的参数。错误3:错误原因:Function call missing)in function clockhandle错误原因:在clockhandle函数调用的是后函数表达式缺少一个)。修改方法:找到错误语句添加缺少的表达式符号。五、心得总结程序优点:本程序旨在训练学生的基本编程能力,本程序中涉及时间结构体,数组,绘图等方面的知识,通过本程序的训练使学生能对C语言有一个更深刻的了解。掌握利用C语言相关函数开发电子时钟的基本原理,为进一步开。
8、发出高质量的程序打下坚实的基础。程序缺点:程序各个模块之间的控制连接比较繁琐,容易出现错误。六附程序清单#include#include#include#include#define PI 3.1415926#define UP 0x4800#define DOWN 0x5000#define Esc 0x11b#define TAB 0xf09int keyhandle (int,int);int timeupchange (int);int timedownchange (int);int digithour (double);int digitmin (double);int digit。
9、sec (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;struct 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(。
10、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, 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,1。
11、2);setcolor(15);outtextxy(300,53,CLOCK);setcolor(7);rectangle(342,72,560,360);setwritemode(0);setcolor(15);outtextxy(433,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) setlinestyl。
12、e(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=100sin( (h60+m)/360PI)+451 ;y=200-100cos( (h60+m)/360PI) ;setlinestyle(0,0,3) ;circle(x,y,1) ;for(i=0,m=0 ;i=59;m+,i+) x=100sin (m/30PI)+451;y=200-100cos(m/30PI ) ;setlinestyle(0,0,1 ) ;circle(x,y,1) ;。
13、setcolor(4) ;outtextxy(182,125, HELP ) ;setcolor(5) ;outtextxy(140,185, TAB :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 ti。
14、me ! ) ;clockhandle() ;closegraph() ;return(0);void clockhandle() int k=0,count ;setcolor(15) ;gettime(t) ;h=t0.ti_hour ;m=t0.ti_min ;x=50sin(h60+m)/360PI)+451 ;y=200-50cos(h60+m) /360PI) ;line(451,200,x,y);x1=80sin(m/30PI) +451 ;y1=200-80cos(m/30PI) ;line(451,200,x1,y1) ;digitclock(408,31。
15、8,digithour(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=98sin(s/30PI)+451 ;y2=200-98cos(s/30PI) ;line(451,200,x2,y2 ) ;while(t0.ti_sec=s&t0.ti_min=m&t0.ti_h。
16、our=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=98sin(s/30PI)+451 ;y2=200-98cos(s/30PI ) ;line(451,200,x2,y2) ;if(t0.ti_min!=m ) setcolor(15) ;x1=80sin(m/30PI)+451 ;y1=200-80*cos(。
17、m/30PI ) ;line(451,200,x1,y1 ) ;m=t0.ti_min ;digitclock(446,318,digitmin(m) ) ;x1=80sin(m/30PI)+451 ;y1=200-80cos(m/30PI) ;line(451,200,x1,y1 ) ;if(t0.ti_hour60+t0.ti_min)!=(h60+m) setcolor(15) ;x=50sin(h60+m)/360PI)+451 ;y=200-50cos(h60+m)/360*PI);line(450,200,x,y );h=t0.ti_hour ;digitc。
18、lock(408,318,digithour (h) ) ;x=50sin(h60+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 ;case TAB :setcolor (15) ;clearcursor(count) ;drawcursor(count) ;count+ ;break;return count ;int。
19、 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。
20、_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 digitclock(int x, int y, int clock)char buffer110;setfillstyle(0,2) ;bar (x,y,x+15,328) ;if (clock=60) clock=0 ;sprintf(buffer1,%d,clock) ;out。
21、textxy(x,y,buffer1) ;int digithour(double h) int i;for(i=0;i=23;i+) if(h=i) return i ;int digitmin(double m) int i ;for(i=0;i=59 ;i+) if(m=i) return i;int digitsec(double s) int i;for(i=0; i=59;i+)if(s=i) return i ;void drawcursor (int count)switch(count)case 1:line (424,315,424,325);break ;case 2:line(465,315,465,325) ; break;case 3:line(505,315,505,325) ; break ;void clearcursor (int count) switch(count)case 2: line (424,315,424,325) ; break ;case 3:line (465,315,465,325) ; break ;case 1: line (505,315,505,325) ; break ;结束。
