计算机程序设计C语言课程设计报告.docx
《计算机程序设计C语言课程设计报告.docx》由会员分享,可在线阅读,更多相关《计算机程序设计C语言课程设计报告.docx(16页珍藏版)》请在冰豆网上搜索。
计算机程序设计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;
}
}
结束
如有侵权请联系告知删除,感谢你们的配合!