当前位置:文档之家› 计算机程序设计(C语言)课程设计报告

计算机程序设计(C语言)课程设计报告

计算机程序设计(C语言) 课程设计报告题目:电子动画时钟学院:机电工程学院专业:班级:090109班学号::指导教师:设计日期:一、概述选题背景:随着社会的进步和科技的发展,电子钟表逐渐成为了人们生活中不可缺少的一部分。

设计思路:(一)功能模块设计,1.电子时钟执行主流程2.电子时钟界面显示3.电子时钟按键控制模块4.时钟动画处理模块(二)数据结构设计 1.time结构体 2.全局变量(三)函数功能描述1.keyhandle()2.timeupchange()3.timedownchange()4.digitclock()5.drawcursor()6. clearcursor()7.void clockhandle()8.main()(四)程序实现(五)运行结果。

二、概要设计2.1、数据结构此程序中,使用了C语言的time结构体和几个全局变量,1.time结构体struct time{unsigned char ti_min; /*分钟*/unsigned char ti_hour; /*小时*/unsigned char ti_hund; /*百分之一秒*/unsigned char ti_sec; /*秒*/};time结构体定义在dos.h文件中,可用来保存系统的当前时间,其中各字段的值的含义如下。

1.unsigned 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 t[1]:定义一个time结构类型的数组,此数组只有t[0]一个元素。

2.3 模块列表1.时钟动画处理模块时钟动画处理模块主要由clockhandle()函数来实现,程序中旧时钟指针的擦除是借助setwritemode(mode)函数设置画线的方式来实现。

如果mode=1,则表示画线时用现在特性的线所画之处原有的线性异或(XOR)操作,实际上画出的线是原有线与现在规定的线进行异或后的结果。

因此,当线的特性不变时,进行两次画线操作相当于没有画线,即在当前位置处清除了原来的画线。

2.时钟按键控制模块在电子时钟中,按键控制模块最主要的工作就是必须能读取用户按键,对按键值进行判断,并调用相应函数来执行相关操作。

3.数字时钟处理模块(1)调用digitclock(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程序预处理模块。

包括加载头文件,定义常量,变量,结构体数组和函数原型声明。

3.2主控模块main().main()函数主要实现了对电子时钟的初始化工作,及clockhandle()函数的调用。

3.3时钟动画处理模块。

3.4时针按键控制模块。

在电子时钟中,按键控制模块最主要的工作就是必须能读取用户按键,对按键值进行判断,并调用相应函数来执行相关操作。

流程图如下。

3.5数字时针处理模块。

在数字时钟处理模块中,主要实现数字时钟的显示和数字的时钟修改。

其中,在数字时钟的修改中,用户可以按Tab键定位需要修改的内容的位置,然后通过按光标上移或下移键来修改时间。

四、调试程序错误1:错误现象:Declaration syntan error错误原因:声明错误,缺分号。

修改方法:在声明语句后添加分号。

错误2:错误现象:Two few parameters in call to ‘setlinestyle’ in function main 错误原因:语句缺少参数。

修改方法:在main()函数中找到缺少参数的语句添加相应的参数。

错误3:错误原因:Function call missing)in function clockhandle错误原因:在clockhandle函数调用的是后函数表达式缺少一个)。

修改方法:找到错误语句添加缺少的表达式符号。

五、心得总结程序优点:本程序旨在训练学生的基本编程能力,本程序中涉及时间结构体,数组,绘图等方面的知识,通过本程序的训练使学生能对C语言有一个更深刻的了解。

掌握利用C语言相关函数开发电子时钟的基本原理,为进一步开发出高质量的程序打下坚实的基础。

程序缺点:程序各个模块之间的控制连接比较繁琐,容易出现错误。

六.附程序清单#include<graphics.h>#include<stdio.h>#include<math.h>#include<dos.h>#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 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;struct time t[1] ;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, 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(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) {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*sin( (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, "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 time !" ) ; clockhandle() ;closegraph() ;return(0);}void clockhandle(){int k=0,count ;setcolor(15) ;gettime(t) ;h=t[0].ti_hour ;m=t[0].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,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=t[0].ti_sec ;m=t[0].ti_min ;h=t[0].ti_hour ;x2=98*sin(s/30*PI)+451 ;y2=200-98*cos(s/30*PI) ;line(451,200,x2,y2 ) ;while(t[0].ti_sec==s&&t[0].ti_min==m&&t[0].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(t[0].ti_min!=m ) {setcolor(15) ;x1=80*sin(m/30*PI)+451 ;y1=200-80*cos(m/30*PI ) ;line(451,200,x1,y1 ) ;m=t[0].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((t[0].ti_hour*60+t[0].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=t[0].ti_hour ;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 ;case TAB :setcolor (15) ;clearcursor(count) ;drawcursor(count) ;count++ ;break;}return count ;}int timeupchange(int count ){if(count==1) {t[0].ti_hour++;if(t[0].ti_hour==24) t[0].ti_hour=0;settime(t) ;}if (count==2) {t[0].ti_min++;if(t[0].ti_min==60) t[0].ti_min=0 ;settime(t) ;}if(count==3) {t[0].ti_sec++;if(t[0].ti_sec==60) t[0].ti_sec=0 ;settime(t) ;}}int timedownchange(int count ){if(count==1) {t[0].ti_hour-- ;if(t[0].ti_hour==0) t[0].ti_hour=23 ;settime(t) ;}if(count==2) {t[0].ti_min--;if(t[0].ti_min==0) t[0].ti_min=59 ;settime(t) ;}if(count==3) {t[0].ti_sec-- ;if(t[0].ti_sec==0) t[0].ti_sec=59;settime (t) ;}}void digitclock(int x, int y, int clock) {char buffer1[10];setfillstyle(0,2) ;bar (x,y,x+15,328) ;if (clock==60) clock=0 ;sprintf(buffer1,"%d",clock) ; outtextxy(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 ; }}。

相关主题