模拟时钟转动程序课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《高级语言》课程设计
课题名称模拟时钟转动程序
学院信息工程专业网络工程地点 D507 学生姓名钟都华学号 13046130 开课时间 2013 至 2014 学年第 2 学期
同组人李卓
成绩
一、课程设计的目的和要求
1.课程设计的目的
本程序旨在训练读者的基本编程能力,使读者熟悉C语言图形模式下的编程。本程序中涉及时间结构体、数组、绘图等方面的知识。通过本程序的训练,使读者能对C 语言有一个更深刻的了解,掌握利用C语言相关函数开发电子时钟的基本原理,为进一步开发出高质量的程序打下坚实的基础。
2.课程设计的要求
能模拟机械钟表行走;在屏幕上显示一个活动时钟;程序界面设计合理,色彩得体大方,显示正确;各指针运动规律正确;要准确的利用数字显示日期和时间并且可以根据用户的需求更改当前时间(指针式时钟与数字式时钟实现同步更改);数字式时钟的时间显示与指针式时钟显示一致;可以通过上下键改变当前的时、分、秒;改的时间是小时、分钟、还是秒数;通过Tab键切换按Esc时程序退出。
二、设计
如下图,此电子时钟主要由以下4个功能模块组成。
1.界面显示模块
电子时钟界面显示在调用时钟运行处理之前完成,在这里主要调用了C语言图形系统函数和自负屏幕处理函数画出时钟程序的主界面。主界面包括类似Windows自带的电子时钟的界面和帮助界面两部冯。电子时钟界面包括一个模拟时钟运转的钟表和一个显示时间的数字钟表。在帮助界面中,主要包括一些按键的操作说明。
2.按键控制模块
按键控制模块主要完成两大部分功能。第一,读取用户按键的键值。第二,通过对键盘按键值得判断,执行相应的操作,如光标移动、修改时间。
3.时钟动画处理模块
在时钟动画处理模块中,它通过对相关条件的判断和时钟坐标值的计算,完成时、分、秒指针的擦除和重绘,以达到模拟时钟运转的功能。
4.数字时钟处理模块
在数字时钟处理模块中,它主要实现了数字时钟的显示和数字时钟的修改。其中,
用户可先按Tab键定位需要修改内容的位置,然后通过按光标上移()或下移(
功能模块设计
1.电子时钟执行主流程
此电子时钟执行主流程如右图所示。首先,程序
调用initgraph()函数,使系统进入图形模式,然后
通过使用line()、arc()、outtextxy()、circle()等
函数来绘制主窗口及电子时钟界面,最后调用clock
Handle()函数来处理时钟的运转及数字时钟的显示。
在clockhandle()函数中,它使用了bioskey()函数
来获取用户的按键值,当用户按键为Esc时,程序会
从clockhandle()函数中返回,从而退出程序。
2.电子时钟界面显示
电子时钟界面的实现比较简单,在功能模块有详
细描述,值得一提的是,模拟时钟运转的动画时钟的
时间刻度是用大小不同的圆来表示的,三根长度不同
但有一端在相同坐标位置的直线分别表示时、分、秒
针。
3.按键控制模块
(1)按下Tab键,清除上一个位置的光标,然后在新位
置出绘制一个光标。
(2)按下光标上/下移键,增加/减少相应的时、分、秒
值。
(3)按下Esc键,程序结束时钟运行,从而退出系统。
4.动画处理模块
坐标点的计算
rsinα rcosα分别是这两条虚线的长度
弧度360°=2π
在电子时钟中,秒针转动60次每一次的弧度为2π/60 = π/30;上图对于∠K而言sin=边3/边1,在程序中已经知道∠α的弧度也就知道了∠K的度数;设分钟为m则∠K
开始
进入图形模式
绘制主窗体界面
绘制电子时钟界面
绘制帮助界面
调用clockhandle()
时钟处理程序
退出系统
结束
的度数为m*2π/60 = m*π/30,利用C函数sin(m*π/30)则可得到边3与边1的比,带入程序rsinα则可得到边3的长度;设秒针的长度为80像素即r = 80像素 rsinα=80*sin(m*π/30)可求得rsinα长度,则可以得到相对于圆心而言X轴的偏移位置即451+rsinα也就是K的X轴坐标。同理求的Y轴坐标,对∠K而言,cos∠K=边2/边1 则80*cos(m*π/30) 就可得到y轴的偏移位置
K坐标为(451+rsinα,200-rcosα)
5.数字时钟处理模块
它主要由光标上移或下移按键共同控制,当光标在时/分/秒位置且按下上移/下移按键,程序会将当前时间的时/分/秒增加/减少1,即增加/减少1小时/分钟/秒。
函数功能描述
1.keyhandle()
函数原型:int keyhandle(int key,int count)
Keyhandle()函数用于对用户的按键值key进行判断,然后调用timeupchange(count)或timedownchange(count)或直接处理Tab按键,其中count的值为1、2、3,1表示小时、2表示分钟、3表示秒钟。按Tab键后,count值加1.
2.timeupchange()
函数原型:int timeupchange(int count)
Timeupchange()函数用于增加时、分、秒数,然后将新的时间设置为系统当前时间。
3.timedownchange()
函数原型:int timedownchange(int count)
Timedownchange()函数用于减少时、分、秒数,然后将新的时间设置为系统当前时间。
4.digitclock()
函数原型:void digitclock(int x,int y,int clock)
Digitclock()函数用于在(x,y)位置显示clock值,clock值为时、分、秒值。
5.drawcursor()
函数原型:void drawcursor(int count)
Drawcursor()函数用于对count进行判断后,在相应位置绘制一条直线作为光标。
6.clearcursor()
函数原型:void clearcursor(int count)
clearcursor()函数用于对count进行判断后,在相应位置擦除原来的光标。
7.void clockhandle()
函数原型:void clockhandle()
void clockhandle()函数用于完成时钟转动和数字时钟的显示。
8.main()
函数原型:void main()
Main()为主函数。
分工:
钟都华:电子时钟主流程、界面显示模块、时钟动画处理模块、对程序的改进。
李卓:时钟按键控制模块、数字时钟处理模块、代码的输入。