计算机程序设计C语言课程设计报告.docx

上传人:b****8 文档编号:11026556 上传时间:2023-02-24 格式:DOCX 页数:16 大小:40.80KB
下载 相关 举报
计算机程序设计C语言课程设计报告.docx_第1页
第1页 / 共16页
计算机程序设计C语言课程设计报告.docx_第2页
第2页 / 共16页
计算机程序设计C语言课程设计报告.docx_第3页
第3页 / 共16页
计算机程序设计C语言课程设计报告.docx_第4页
第4页 / 共16页
计算机程序设计C语言课程设计报告.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

计算机程序设计C语言课程设计报告.docx

《计算机程序设计C语言课程设计报告.docx》由会员分享,可在线阅读,更多相关《计算机程序设计C语言课程设计报告.docx(16页珍藏版)》请在冰豆网上搜索。

计算机程序设计C语言课程设计报告.docx

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

计算机程序设计(C语言)

课程设计报告

题目:

电子动画时钟

学院:

机电工程学院

专业:

班级:

090109班

学号:

姓名:

指导教师:

设计日期:

一、概述

选题背景:

随着社会的进步和科技的发展,电子钟表逐渐成为了人们生活中不可缺少的一部分。

设计思路:

(一)功能模块设计,1.电子时钟执行主流程2.电子时钟界面显示3.电子时钟按键控制模块4.时钟动画处理模块

(二)数据结构设计1.time结构体2.全局变量(三)函数功能描述1.keyhandle()2.timeupchange()3.timedownchange()4.digitclock()5.drawcursor()6.clearcursor()7.voidclockhandle()8.main()(四)程序实现(五)运行结果。

二、概要设计

2.1、数据结构

此程序中,使用了C语言的time结构体和几个全局变量,1.time结构体

structtime

{

unsignedcharti_min;/*分钟*/

unsignedcharti_hour;/*小时*/

unsignedcharti_hund;/*百分之一秒*/

unsignedcharti_sec;/*秒*/

};

time结构体定义在dos.h文件中,可用来保存系统的当前时间,其中各字段的值的含义如下。

1.unsignedcharti_min:

保存分钟值。

2.unsignedcharti_hour:

保存小时。

3.unsignedcharti_hund:

保存百分之一秒,例如,ti_hund=500,表示1/500秒。

4.unsignedcharti_sec:

保存秒数。

2.2、全局变量

下面对程序用到的全局变量及数组进行说明.

1.doubleh,m,s:

此3个全局变量分别用来保存小时,分钟,秒数。

2.doublex,x1,x2,y,y1,y2:

保存数字时钟中小时,分,秒在屏幕中显示的坐标值。

3.structtimet[1]:

定义一个time结构类型的数组,此数组只有t[0]一个元素。

2.3模块列表

1.时钟动画处理模块

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

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

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

2.时钟按键控制模块

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

3.

数字时钟处理模块

(1)调用digitclock(intx,inty,intclock)函数。

在数字时钟r指定位置显示时,分,秒,其中digithour(doubleh),intdigitour(doubleh)和digitsec(doubles)用于完成数值的double型向int型转换。

(2)调用drawcursor(intcount),clearcursor(intcount)函数来完成旧光标的擦除和新光标的绘制。

2.4、程序结构图(也就是模块之间的关系)

电子时钟

界面显示模块

 

按键控模块

时钟动画处理模块

数字时钟模块

 

三、详细设计

3.1程序预处理模块。

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

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

3.3时钟动画处理模块。

3.4时针按键控制模块。

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

流程图如下。

 

3.5数字时针处理模块。

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

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

四、调试程序

错误1:

错误现象:

Declarationsyntanerror

错误原因:

声明错误,缺分号。

修改方法:

在声明语句后添加分号。

错误2:

错误现象:

Twofewparametersincallto‘setlinestyle’infunctionmain

错误原因:

语句缺少参数。

修改方法:

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

错误3:

错误原因:

Functioncallmissing)infunctionclockhandle

错误原因:

在clockhandle函数调用的是后函数表达式缺少一个)。

修改方法:

找到错误语句添加缺少的表达式符号。

五、心得总结

程序优点:

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

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

程序缺点:

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

六.附程序清单

 

#include

#include

#include

#include

#definePI3.1415926

#defineUP0x4800

#defineDOWN0x5000

#defineEsc0x11b

#defineTAB0xf09

intkeyhandle(int,int);

inttimeupchange(int);

inttimedownchange(int);

intdigithour(double);

intdigitmin(double);

intdigitsec(double);

voiddigitclock(int,int,int);

voiddrawcursor(int);

voidclearcursor(int);

voidclockhandle();

doubleh,m,s;

doublex,x1,x2,y,y1,y2;

structtimet[1];

main()

{

intdriver,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(intx,inty,int.stangle,intendangle,intradius)*/

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:

Cursormove");

outtextxy(140,225,"UP:

Time++");

outtextxy(140,265,"DOWN:

Time--");

outtextxy(140,305,"Esc:

Quitsystem!

");

outtextxy(140,345,"Version:

2.0");

setcolor(12);

outtextxy(150,400,"Nothingismoreimportantthantime!

");

clockhandle();

closegraph();

return(0);

}

voidclockhandle()

{

intk=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);

}

}

}

intkeyhandle(intkey,intcount)

{switch(key)

{caseUP:

timeupchange(count-1);

break;

caseDOWN:

timedownchange(count-1);

break;

caseTAB:

setcolor(15);

clearcursor(count);

drawcursor(count);

count++;

break;

}

returncount;

}

inttimeupchange(intcount)

{

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);

}

}

inttimedownchange(intcount)

{

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);

}

}

voiddigitclock(intx,inty,intclock)

{charbuffer1[10];

setfillstyle(0,2);

bar(x,y,x+15,328);

if(clock==60)clock=0;

sprintf(buffer1,"%d",clock);

outtextxy(x,y,buffer1);

}

intdigithour(doubleh)

{inti;

for(i=0;i<=23;i++)

{if(h==i)returni;}

}

intdigitmin(doublem)

{inti;

for(i=0;i<=59;i++)

{if(m==i)returni;}

}

intdigitsec(doubles)

{inti;

for(i=0;i<=59;i++)

{if(s==i)returni;}

}

voiddrawcursor(intcount)

{switch(count)

{

case1:

line(424,315,424,325);break;

case2:

line(465,315,465,325);break;

case3:

line(505,315,505,325);break;

}

}

voidclearcursor(intcount)

{switch(count)

{

case2:

line(424,315,424,325);break;

case3:

line(465,315,465,325);break;

case1:

line(505,315,505,325);break;

}

}

 

结束

如有侵权请联系告知删除,感谢你们的配合!

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 药学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1