(vb课程设计)多功能指针式时钟设计报告_第1页
(vb课程设计)多功能指针式时钟设计报告_第2页
(vb课程设计)多功能指针式时钟设计报告_第3页
(vb课程设计)多功能指针式时钟设计报告_第4页
(vb课程设计)多功能指针式时钟设计报告_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、多功能指针式时钟设计报告设计报告学院材料学院班级材料074学号072032姓名张艳桥成绩一、设计思路1 .要达到的目的1 .基本目的要求用VisualBasic对象的思想来完成程序的设计。按照图例设计出相应的界面。在设计程序的过程中,要求会使用按钮(commandbutton)、文本框(text)、标签(label)、形状(shape)等基本控件的属性、方法和相关事件。使用line方法画线模拟指针。要求在设计中使用系统提供的方法显示指针(时针、分针、秒针工程序运行中三个指针能够随时间的进度移动,三个指针相对位置正确,能够正确指示时间。成的程序界面要美观,除基本显示时间基本功能外,至少还应有定时

2、呼叫功能。2创新目在基本要求达到后,进行创新设计,如可以用鼠标直接拨动指针设置时间,显示日期等等。2 .关键问题的解根据题目要求,可以将问题解决分为以下几个方面:使用工具箱中的shape控件构造时钟的圆形表盘,表盘上的标志1-12用label完成。通过工具箱中的line控件构造表示时、分、秒的三个指针(应具有不同的颜色和长度)。通过timer控件得到系统时间,并且根据在不同的时间段指针所在的不同位置确定line控件的X2,Y2坐标,实现指针的移动与系统时间的同步经计算,指针(如分针)的x2坐标位置可表示为X=10*Sin(SEC*pi/30)Y=10*Cos(SEC*pi/30)即可完成指针显

3、示当前时间的全过程。二、模块之间的调用关系,或程序流程图三、部分程序关键源代码及注释OptionExplicitDimtHourAsLong,tMinAsLongConstcenterXY=1578Consthourlength=600Constminlength=900Constseclength=1100PublicSHourAsLong,SMsgAsString,SMinAsLong,waitingAsBooleanPrivateSubCommand1_Click()IfMsgBox("这样会更改您的计算机时间,确认将时间改为"&tHour&"

4、;:"&tMin&"吗?",vbCriticalOrvbYesNoOrvbDefaultButton2)=vbYesThenTime=TimeSerial(tHour,tMin,0)setModeFalseEndIfEndSubPrivateSubCommand2_Click()setModeFalseEndSubPrivateSubCommand3_Click()EndSubPrivateSubForm_Load()setModeFalse=Year(Now)&"年"&Month(Now)&"

5、月"&Day(Now)&"日"&vbNewLine&"星期"&IIf(Weekday(Now)=7,"日",Weekday(Now)=centerXY=centerXY=centerXY=centerXY=centerXY=centerXY=centerXY+hourlength*Sin(Hour(Time)+Minute(Time)/60)*2*/12)=centerXY-hourlength*Cos(Hour(Time)+Minute(Time)/60)*2*/12)=center

6、XY+minlength*Sin(Minute(Time)+Second(Time)/60)/60*2*=centerXY-minlength*Cos(Minute(Time)+Second(Time)/60)/60*2*=centerXY+seclength*Sin(Second(Time)/60*2*=centerXY-seclength*Cos(Second(Time)/60*2*EndSubPrivateSubForm_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)IfButton=2ThensetModeTrue

7、EndIfEndSubSubsetMode(vAsBoolean)'程序进入时间设置模式DimthetaAsDouble,kAsLong'=Notv'显示或隐藏控件=v'=v'=v'optSettime(0).Visible=v'optSettime(1).Visible=v'IfvThen'对optsettime()做设置WithpMinutetheta = Atn(.Y1 - .Y2) / (.X1 - .X2 + If .X2 > .X1 Then k = -1 Else k = 1 optSettime(0)

8、.Top = centerXY - k * optSettime(0).Left = centerXY - k *End WithWith pHourtheta = Atn(.Y1 - .Y2) / (.X1 - .X2 + If .X2 > .X1 Then k = -1 Else k = 1 optSettime(1).Top = centerXY - k * optSettime(1).Left = centerXY - k *End WithtMin = Minute(Time)tHour = Hour(Time)End IfEnd SubPrivate Sub Label1_C

9、lick()Unload Me'退出按钮End Sub/ 2 * Sin(theta) - optSettime(0).Height / 2/ 2 * Cos(theta) - optSettime(0).Width / 2)/ 2 * Sin(theta) - optSettime(0).Height / 2/ 2 * Cos(theta) - optSettime(0).Width / 2PrivateSubLabel2_DblClick(IndexAsInteger)Form_DblClickEndSubPrivateSubLabel2_MouseUp(IndexAsIntege

10、r,ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)Form_MouseUpButton,Shift,X,YEndSubSingle)PrivateSuboptSettime_MouseMove(IndexAsInteger,ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsDimthetaAsDouble,kAsLongOnErrorResumeNextIfButton=1ThenWithoptSettime(Index)theta=Atn(Y+.Top-.Height/2-centerXY)/(X+

11、.Left-.Width/2-centerXY+)IfX+.Left-.Width/2>centerXYThenk=-1Elsek=1optSettime(Index).Top=centerXY-k*/2*Sin(theta)-optSettime(Index).Height/2optSettime(Index).Left=centerXY-k*/2*Cos(theta)-optSettime(Index).Width/2EndWithEndIfEndSubPrivateSuboptSettime_MouseUp(IndexAsInteger,ButtonAsInteger,ShiftA

12、sInteger,XAsSingle,YAsSingle)DimthetaAsDouble,kAsLongIfButton=1ThenIfIndex=0ThenWithpMinutetheta=Atn(optSettime(Index).Top+optSettime(Index).Height/2-centerXY)/(optSettime(Index).Left+optSettime(Index).Width/2-centerXY+)IfoptSettime(Index).Left+optSettime(Index).Width/2>centerXYThenk=-1Elsek=1tMi

13、n=Int(theta*30/+IIf(k>0,45,15)'重算分=tHour&""&tMinDrawPntEndWithElseWithpHourtheta=Atn(optSettime(Index).Top+optSettime(Index).Height/2-centerXY)/(optSettime(Index).Left+optSettime(Index).Width/2-centerXY+)IfoptSettime(Index).Left+optSettime(Index).Width/2>centerXYThenk=-1E

14、lsek=1tHour=Int(theta*6/+IIf(k>0,9,3)'重新计算时tMin=Int(theta*6/-Int(theta*6/)*180/'重新计算分=tHour&""&tMinDrawPntEndWithEndIfEndIfEndSubSubDrawPnt(OptionalmachineAsBoolean=False)IfNotmachineThen=centerXY+minlength*Sin(tMin/60*2*'重画分针=centerXY-minlength*Cos(tMin/60*2*=center

15、XY+hourlength*Sin(tHour+tMin/60)*2*/12)'计算时针位置=centerXY-hourlength*Cos(tHour+tMin/60)*2*/12)Else=centerXY+hourlength*Sin(Hour(Time)+Minute(Time)/60)*2*/12)'计算时针位置=centerXY-hourlength*Cos(Hour(Time)+Minute(Time)/60)*2*/12)=centerXY+minlength*Sin(Minute(Time)+Second(Time)/60)/60*2*'计算分针位置=

16、centerXY-minlength*Cos(Minute(Time)+Second(Time)/60)/60*2*=centerXY+seclength*Sin(Second(Time)/60*2*'计算秒针位置=centerXY-seclength*Cos(Second(Time)/60*2*EndIfEndSubPrivateSubtmrTick_Timer()DrawPntTrueIfwaitingThen'若有提醒信息则判断是否到达提醒时间。IfHour(Time)=SHourAndMinute(Time)=SMinThenMsgBoxSMsg:waiting=FalseEndIfEndSub四、设计方案的完善及目前存在的问题1 设计方案要完善的地方加入定时呼叫功能:这个功能实现较为简单,只需增加一个新窗体设置时间,并实时判断是否到时加入鼠标设置系统时间功能:这个功能的是现实最难的,经仔细斟酌决定使用optionbutton单选框的圆圈来做拖动点。拖动开始后就追随鼠标指针作圆周运动。此外还需要自定义运算来实现圆形轨迹定位,时间和指针角度的转换等操作。完成后可以电击保存按钮进行设置。2 .目前存在的问题窗体不够美观,给人的感觉有点臃肿。程序语言过多,不够简洁不能用已学过的知识来解决一些问题,要借助一些课外书的参考五、本次设计的收获及心得体会这个课程是我懂得

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论