沈阳航空航天大学课程设计任务书学院:航空宇航工程学院专业:飞行器制造班级:94030102学号:2009040301055 题目:模拟时钟一、课程设计时间2011年3月7日~11日(第1周),共计1周。
二、课程设计内容在窗体上演示一个正在工作的有时、分、秒指针的时钟,要求:可以对时钟的时间进行手工修正。
用户界面中的菜单(或命令按钮)至少应包括“运行时钟”、“修改时间”、“退出”3项。
三、课程设计要求程序质量:✧贯彻事件驱动的程序设计思想。
✧用户界面友好,功能明确,操作方便;可以增加其它功能或修饰。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:✧课设结束后,上交课程设计说明书和源程序。
课程设计说明书的内容参见提供的模板。
四、指导教师和学生签字指导教师:________ 学生签名:________五、成绩六、教师评语目录一、需求分析 (4)二、设计分析 (5)三、关键技术 (7)四、总结 (12)五、完整的源程序 (14)六、参考文献 (16)一、需求分析“模拟时钟”软件。
在窗体上演示一个正在工作的有时、分、秒指针的时钟,要求:可以对时钟的时间进行手工修正。
用户界面中的菜单(或命令按钮)至少应包括“运行时钟”、“修改时间”、“退出”3项。
①在VB窗体Form1中设计模拟时钟表盘,设计四个按钮:运行时钟、修改时间、应用、退出。
在窗体Form2中设计填输入时间的位置和两个按钮:重新输入、确定。
②用运行时钟按钮使时钟从零点开始运行。
③利用修改时间按钮在Form2中输入合理时间,单击确定后单击应用使模拟时钟按所需时间开始运行。
④Form2中重新输入按钮可以使所有Text控件清空,可以进行时间的重新输入。
⑤程序可以实现时钟指针的转动。
二、设计分析(1)基本原理:设计表盘,利用勾股定理实现时钟的转动,通过两个窗体的配合实现修改时间的功能,使模拟时钟能像正常时钟一样运行。
(2)总体设计:图1 总体设计(3)详细设计:图2 详细设计(4)表盘设计:图3 表格三、关键技术1实现指针的转动Private Sub Timer1_Timer()Static s!, m!, h!s = s + 1m = s / 60h = m / 60LineS.X2 = LineS.X1 + a * Sin(s * 6 * pai / 180)LineS.Y2 = LineS.Y1 - a * Cos(s * 6 * pai / 180)LineM.X2 = LineM.X1 + b * Sin(m * 6 * pai / 180) LineM.Y2 = LineM.Y1 - b * Cos(m * 6 * pai / 180)LineH.X2 = LineH.X1 + c * Sin(h * 30 * pai / 180)LineH.Y2 = LineH.Y1 - c * Cos(h * 30 * pai / 180)End Sub '使时钟从初始位置开始工作图42 Form1与Form2的连接(1)显示Form2Private Sub Command2_Click()Timer2.Interval = 0Timer1.Interval = 0Form2.Show '关闭定时器1、定时器2,对时间进行手工修改End Sub图5(2)Form2隐藏Private Sub Command1_Click()If Val(Text1.Text) > 24 Or Val(Text1.Text) < 0 Or Val(Text2.Text) > 60 Or Val(Text2.Text) < 0 Or Val(Text3.Text) > 60 Or Val(Text3.Text) < 0 Then MsgBox "请输入合理时间": Text1.Text = "": Text2.Text = "": Text3.Text = "" '数据不合理时弹出提示ElseForm1.ShowForm2.Hide '读取到修改后的时间数据并关闭窗体2 End IfEnd Sub注:输入的时间不合理会弹出提示,输入时间为空时也会弹出提示图6 图73.修改的时间数据的读取与运行Private Sub Command4_Click()If Form2.Text1.Text = "" Or Form2.Text2.Text = "" Or Form2.Text3.Text = "" ThenMsgBox "请输入准确时间": Form2.Show '提示用户输入准确时间ElseTimer2.Interval = 1000: s = Form2.Text3.Text - 1 '激活定时器2 End IfEnd SubPrivate Sub Timer2_Timer()s = s + 1m = Form2.Text2.Text + s / 60h = Form2.Text1.Text + m / 60LineS.X2 = LineS.X1 + a * Sin(s * 6 * pai / 180)LineS.Y2 = LineS.Y1 - a * Cos(s * 6 * pai / 180)LineM.X2 = LineM.X1 + b * Sin(m * 6 * pai / 180)LineM.Y2 = LineM.Y1 - b * Cos(m * 6 * pai / 180)LineH.X2 = LineH.X1 + c * Sin(h * 30 * pai / 180)LineH.Y2 = LineH.Y1 - c * Cos(h * 30 * pai / 180)End Sub '使时钟在修改时间后开始四、总结本次课程设计我的任务是运用VB设计一个模拟时钟,包含运行时钟、修改时间、应用、退出等功能。
程序需要两个窗体、两个Timer控件以及四个按钮控件:运行时钟、修改时间、应用、退出。
可实现与正常时钟相同的运行速度。
可以进行手动的修改、运行时钟。
还可以对用户输入的时间数据进行判断。
在此次课设过程中,设计界面使我了解到手工绘图方面的一些控件,现在可以进行熟练的运用。
Timer控件的运行方法让我用尽了心思,对于指针的初始位置的设置,我运用到了控件的尺寸,指针的长度设置我运用到了勾股定理,为了美观和人性化处理对各个功能之间的显示与切换我下个很大功夫。
VB的设计过程让我深刻认识到知识的有用之处,这是一个即动手又动脑的一次实习。
让我意识到VB的魅力所在,它使我们能形象的了解到生活中的一些具体事物,使我们锻炼了自己的动手能力,发挥了自己的智慧。
让我们发现自己的不足,认识到更多我们所没有触及的知识。
虽然这次设计出现很多困难的,但是在老师和学生的帮助下我终于做出来了,我感到很开心,毕竟是自己的劳动成果。
很高兴可以完成这次课设,它让我懂得只有努力才有收获。
五、完整的源程序Private Sub Command3_Click()End '结束程序End SubPrivate Sub Command4_Click()If Form2.Text1.Text = "" Or Form2.Text2.Text = "" Or Form2.Text3.Text = "" ThenMsgBox "请输入准确时间": Form2.Show '提示用户输入准确时间ElseTimer2.Interval = 1000: s = Form2.Text3.Text - 1 '激活定时器2 End IfEnd SubPrivate Sub Form_Load()LineS.X1 = Shape1.Left + Shape1.Width / 2LineS.Y1 = Shape1.Top + Shape1.Height / 2LineS.X2 = LineS.X1LineS.Y2 = Shape1.Top + 150 '设置秒针初始位置LineM.X1 = LineS.X1LineM.Y1 = LineS.Y1LineM.X2 = LineM.X1LineM.Y2 = Shape1.Top + 260 '设置分针初始位置LineH.X1 = LineS.X1LineH.Y1 = LineS.Y1LineH.X2 = LineH.X1LineH.Y2 = Shape1.Top + 500 '设置时针初始位置a = Sqr((LineS.X1 - LineS.X2) ^ 2 + (LineS.Y1 - LineS.Y2) ^ 2)b = Sqr((LineM.X1 - LineM.X2) ^ 2 + (LineM.Y1 - LineM.Y2) ^ 2)c = Sqr((LineH.X1 - LineH.X2) ^ 2 + (LineH.Y1 - LineH.Y2) ^ 2) '设置指针长度LineS.BorderColor = vbBlackLineS.BorderWidth = 1LineM.BorderColor = vbBlueLineM.BorderWidth = 2LineH.BorderColor = vbRedLineH.BorderWidth = 3 '设置指针的颜色和粗细End SubPrivate Sub Timer1_Timer()Static s!, m!, h!s = s + 1m = s / 60h = m / 60LineS.X2 = LineS.X1 + a * Sin(s * 6 * pai / 180)LineS.Y2 = LineS.Y1 - a * Cos(s * 6 * pai / 180)LineM.X2 = LineM.X1 + b * Sin(m * 6 * pai / 180)LineM.Y2 = LineM.Y1 - b * Cos(m * 6 * pai / 180)LineH.X2 = LineH.X1 + c * Sin(h * 30 * pai / 180)LineH.Y2 = LineH.Y1 - c * Cos(h * 30 * pai / 180)End Sub '使时钟从初始位置开始工作Private Sub Timer2_Timer()s = s + 1m = Form2.Text2.Text + s / 60h = Form2.Text1.Text + m / 60LineS.X2 = LineS.X1 + a * Sin(s * 6 * pai / 180)LineS.Y2 = LineS.Y1 - a * Cos(s * 6 * pai / 180)LineM.X2 = LineM.X1 + b * Sin(m * 6 * pai / 180)LineM.Y2 = LineM.Y1 - b * Cos(m * 6 * pai / 180)LineH.X2 = LineH.X1 + c * Sin(h * 30 * pai / 180)LineH.Y2 = LineH.Y1 - c * Cos(h * 30 * pai / 180)End Sub '使时钟在修改时间后开始工作六、参考文献[1] 刘瑞新.《Visual Basic程序设计教程》.北京:机械工业出版社,2003[2] 龚沛增.《Visual Basic程序设计教程》.清华大学出版社,2004[3]吴凤翔.《Visual Basic程序设计教程》.中国林业出版社,2002-11。