c#程序设计课程设计报告-应用GDI技术绘制一个走动的时钟.doc_第1页
c#程序设计课程设计报告-应用GDI技术绘制一个走动的时钟.doc_第2页
c#程序设计课程设计报告-应用GDI技术绘制一个走动的时钟.doc_第3页
c#程序设计课程设计报告-应用GDI技术绘制一个走动的时钟.doc_第4页
c#程序设计课程设计报告-应用GDI技术绘制一个走动的时钟.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

课程设计报告应用GDI+技术绘制一个走动的时钟课程名称: C#程序设计 小组成员:余博文指导老师:李悦乔完成日期 2014年12 月 17日指导老师评语1。 课程设计的主要特色与不足2。 对课程设计的评价(1)对题目的理解以及研究或设计方案、研究方法和技术路线的合理性、正确性:优秀 良好 中等 较差(2)综合运用基础理论和专业知识分析、解决问题的能力:优秀 良好 中等 较差(3)课程设计内容的正确性、创新性及结果的应用价值:优秀 良好 中等 较差(4)工作态度及科学作风、课程设计的工作量:优秀 良好 中等 较差(5)课程设计撰写水平、格式规范:优秀 良好 中等 较差(6)总体水平评价:优秀 良好 中等 及格 不及格指导老师评定成绩指导老师(签字) : 年 月 日小组成员简介及分工单位计算机学院班别13嵌入式A班电子照片姓名余博文学号2013031101050电话主要工作内容编写表盘,时针,分针,秒针的绘制方法,以及时区的选择操作。成绩指导老师(签字)单位计算机学院班别电子照片姓名学号电话email主要工作内容成绩指导老师(签字)单位计算机学院班别电子照片姓名学号电话email主要工作内容成绩指导老师(签字)单位计算机学院班别电子照片姓名学号电话email主要工作内容成绩指导老师(签字)目 录1 前言12 需求分析12.1要求12.2任务12.3运行环境12.4开发工具13 概要设计与详细设计13.1系统结构设计13.2详细设计24 编码与实现24.1 绘制表盘及指针方法的实现24.2 时区选择方法的实现35 课程设计总结31 前言基于我之前曾经应用Flash制作过类似的桌面时钟,我依据先前的制作经验在此次程序设计用C#语言,来编写运用GDI+技术绘制的走动时钟。先前的桌面时钟不但能实现时针,分针及秒针的走动,而且外观也不同于传统的应用程序,没有矩形窗口,背景也是半透明立体圆罩,同时附有标准的时间和日期显示文字,在桌面上可以用鼠标任意拖动其位置。不过由于C#本身并不是绘制图形的软件,想要在外观上达到先前那样的效果就不容易了。但是在此次程序设计中,我力求跟先前的桌面时钟制作的一样。不但可以实现时针,分针及秒针的走动,而且还额外应用C#中的ComboBox控件增加了原来没有的功能-即可以查看不同时区的时间。同时,表盘的时钟,分针,秒针也会相应的随所选时区变化而改变。2 需求分析21要求该程序的时钟能够走动,不仅界面绘制美观,而且时间显示正确。初次打开程序时会显示当前系统的时间。如果更改时区的选择,则时钟能够依据所选时区而改变时间。22任务在窗体下放置panel, timer, textbox,comboBox 控件,用于绘制时钟,更新时钟,显示当前时间,时区选择;编写绘制表盘、时针、分针和秒针的方法;为comboBox 添加提供时区的选项;实现方法。23运行环境系统用VS2010开发,运行在安装了SQL Server的计算机上。24开发工具Microsoft Visual Studio 20103 概要设计与详细设计31系统结构设计实现的方法包括(1)初始运行FormMain_Load、(2)瞬时处理timer1_Tick、(3)更新时间字符串内容updateTextsOfCurrentTime、(4)绘制表盘背景drawBackground、(5)绘制表盘数字drawClockFace、(6)绘制秒针drawHandOfSecond、(7)绘制分针drawHandOfMinute、(8)绘制时针drawHandOfHour。32详细设计(1)在初始化的时候,一些数据应该设置或添加,例如计时器timer1的时间间隔和启动,以及comboBox1中时区的数据添加。timer1.Interval = 250;timer1.Start();string timeZone = new string6北京时间,美国东部时间,巴黎,布鲁塞尔,莫斯科,圣彼得堡,汉城,伦敦;for (var i = 0; i 6; i+) comboBox1.Items.Add(timeZonei);comboBox1.SelectedIndex = 0;(2)确定当时刻更新(即事件被激发后)时,一些数据也要更新.主要操作包括: 获取当前时刻的时间数据(时、分、秒、毫秒),更新panel1及显示时间的字符串数据(包含标题及textBox1的Text值),获取Graphics 绘制表盘背景以及上面的数字,并依据所需的相应时间数据分别绘制时针、分针以及秒针。此外,这里用到了双缓冲技术,利用两个 Graphics 变量来绘制钟表,使表盘在更新时间时不会出现明显的闪屏,使表盘的显示效果达到理想状态。代码如下:var d = DateTime.Now, hour = d.Hour, minute = d.Minute, second = d.Second, ms = d.Millisecond;updateStatesOfPointers();updateTextsOfCurrentTime(d);var ghs = panel1.CreateGraphics(), img = new Bitmap(panel1.Width + panel1.Location.X, panel1.Height + panel1.Location.Y), tempG = Graphics.FromImage(img);drawBackground(tempG);drawClockFace(tempG);drawHandOfSecond(tempG, second, ms);drawHandOfMinute(tempG, minute, second, ms);drawHandOfHour(tempG, hour, minute, second, ms);ghs.DrawImage(img, 0, 0);if (comboBox1.SelectedItem = null) textBox1.Text = 系统时间: + string.Format(0:d2, hour) + : + string.Format(0:d2, minute) + : + string.Format(0:d2, second);else textBox1.Text = comboBox1.SelectedItem.ToString() + : +string.Format(0:d2, (hour - sub(comboBox1.SelectedItem.ToString()+24)%24)+:+string.Format(0:d2, minute) + : +string.Format(0:d2, second);(3) 在updateTextsOfCurrentTime方法中,对于时间要利用相应的格式,并且也要根据所选择时区的不同来进行调整。方法代码如下:4 编码与实现41 绘制指针方法的实现时针、分针、秒针在获得系统的时分秒后应根据该旋转的角度,然后依据半径及中心点坐标,再确定指针针尖的坐标,并绘制指针。秒针的绘制方法如下:var secPtr = new PointF(float)(centerX + radiusOfSecond * Math.Cos(6 * s + 0.006 * ms) * Math.PI / 180 - Math.PI / 2),(float)(centerY + radiusOfSecond * Math.Sin(6 * s + 0.006 * ms) * Math.PI / 180 - Math.PI / 2);为了使指针在不同时刻指向的方向更加精确,这里将时间精确到了毫秒,若分针的旋转方向在不严格情况下,ms变量可赋值为0。分针的绘制方法如下:var minPtr = new PointF(float)(centerX + radiusOfMinute * Math.Cos(6 * m + 0.1 * s + 0.0001 * ms) * Math.PI / 180 - Math.PI / 2),(float)(centerY + radiusOfMinute * Math.Sin(6 * m + 0.1 * s + 0.0001 * ms) * Math.PI / 180 - Math.PI / 2);同样的方法对时针也进行如下操作:var hourPtr = new PointF(float)(centerX + radiusOfHour * Math.Cos(30 * h + 0.5 * m + 0.5 / 60 * s + 0.5 / 60000 * ms) * Math.PI / 180 - Math.PI / 2),(float)(centerY + radiusOfHour * Math.Sin(30 * h + 0.5 * m + 0.5 / 60 * s + 0.5 / 60000 * ms) * Math.PI / 180 - Math.PI / 2);42 时区选择方法的实现时区的选择主要利用了comboBox控件。用户可以根据comboBox中提供的时区来方便查看不同地区的时间。此次实验添加了北京时间,美国东部时间,巴黎,布鲁塞尔,莫斯科,圣彼得堡,汉城,伦敦的时区。他们与系统所获得的时间差可以保存起来:int sub(string s)if (s = null | s = string.Empty) return 0;switch (s) case 美国东部时间: return 13; case 巴黎,布鲁塞尔: return 7; case 莫斯科,圣彼得堡: return 5; case 汉城: return -1; case 伦敦: return 8; case 北京时间: default: return 0;这样,就可以根据ComboBox中所选择的时区,对时间进行调整,且仅对小时(int h)改变数据即可。if

温馨提示

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

评论

0/150

提交评论