logo资料库

用MFC编程模拟时钟转动实验报告.docx

第1页 / 共18页
第2页 / 共18页
第3页 / 共18页
第4页 / 共18页
第5页 / 共18页
第6页 / 共18页
第7页 / 共18页
第8页 / 共18页
资料共18页,剩余部分请下载后查看
青岛理工大学 C++面向对象课程设计报告 院(系): 计算机工程学院 专业: 网络工程 学生姓名: 赵建 班级: 网络 081 学号: 200807111 题目: 指针式时钟 起讫日期: 2011.7.5—2011.7.14 设计地点: 学院机房 101 指导老师: 吴 万 春 完成日期:2011 年 7 月 14 日
一、 课程设计目的 时钟几乎是每个人生活中必备的生活用品。时钟虽小确非常重要。一款良好的时钟可以 给人们带来极大的便利。当然,现在关于时钟的各种应用程序层出不求,我的目的是设计一 款界面简单、方便易用、功能相对丰富的指针式时钟程序。为了达到上述目标,以及课程设 计的要求,结合自己自身的情况,选择了 PC 平台、Windows 操作系统、Visual C++ 6.0 开 发平台、MFC 框架来实现自己的程序。而且希望能通过自己这款小应用程序的设计,来掌握 面向对象的程序设计方法,了解 C++面向对象的设计方法和技巧,有效地、深刻地理解课程 内容,体会理论、方法和设计原则;培养分析实际问题和解决问题的能力,具备使用面向对 象程序设计开发工具设计实际系统的能力。 二、 课程设计内容及要求 程序所实现的功能:运行界面是一指针式时钟,包括时分秒三个指针,有 12 个钟点的显示, 并通过指针的转动来实时更新时间。同时可以显示相应时间的数字钟形式。通过菜单可以实 现闹铃功能、表盘背景、指针颜色设置、倒计时等功能。同时为程序窗口增加了一张精美图 片作为背景 三、 系统分析与设计 1、 系统分析 为了使程序的显示更加美观,该程序使用了 C++可视化程序设计方法进行设计。在可视 化程序设计中,建立了一个 MFC 单文档应用程序工程,该工程包括了视图类、文档类对话 框类和主框架类。在主框架类中修改窗口等属性,使整个时间的显示更加协调。模拟电子时 钟是一个显示和计时的小程序,因此只要在视图类和文档类添加相关的属性和方法即可完成 模拟电子时钟的功能。 文档类定义时钟的相关属性,包括 int 类型的 year、month、day、hour、minute、second, 和包括 CString 类型的 str_year、str_month、str_day、str_hour、str_minute、str_second 等信 息。int 类型的时间日期属性用以计算,CSrting 类型的时间日期属性用以显示,通过 CString 类中的成员函数 Formart 可以把 int 型的数据转成 CString 型的。 视图类实现时钟的主要功能,在该类的 OnDraw 函数里面对时间日期进行显示输出。向 窗口输出信息时,为了保证高刷新率下绘图不闪烁,使用内存绘图的方法,在内存中创建一 个与屏幕绘图区域一致的对象,使得重绘视图时可以大大提高运行速度。为了使计时能够达 到几乎无误差,使用了一个获取系统两秒间隔作为计时间隔的方法,使得计时间隔和系统时 间间隔一致。每次重绘视图的时候都重新获取系统时间,当该两次获得的秒不一致时,就对 时间加一秒。通过一个计时器消息,使视图 50ms 刷新一次,以保证时间的准确性。 在视图类中需要添加几个方法:用于计算时间的方法 RunTime()、计算星期的方法 Week()、 int 型转 CString 型的方法 Change()、获取系统时间的方法 GetDateTime()、重获系统时间方法 OnReset()和计时器消息。 在计算时间日期的时候,每达到 1 秒的时候对 second 进行加 1,然后判断是否达到 60 秒,达到的话 minute 就加 1,同样的方法对 hour、day、month 和 year 进行计算,在对 day 计数时,考虑到大小月和闰年,对 day 进行加 1 时,判断是哪一月和是否为闰年。在确定年、 月、日之后,使用函数 Week()进行对星期几的计算,根据 1901 年每月 1 号是星期几可以得 出现在是星期几。 1
在这个程序中,还使用了一个对话框类,使用对话框来对时间日期的设置。在菜单栏里 添加一个“设置时间”的选项和一个菜单消息,当点击这个选项就会弹出设置时间日期的对 话框,对话框中编辑控件设定了每个值的取值范围,从而对输入错误进行排除。 2、 系统设计 2.1 模块设计 主要类图 时钟程序 时 间 查 看功能 时钟工 作状态 设置功 能 个 性 化 颜 色 设 置功能 开始工 暂停工 作 作 倒计时 功能 闹铃功 能 表盘颜 色设置 功能 时针颜 色设置 分钟颜 色设置 秒针颜 色设置 各模块关系图 2
画出主程序及其主要模块的流程图: 开始 用图片来填充 背景窗口 和系统时间同步 绘制表盘刻度 绘制时钟指针 制作数字时钟 时钟功能选择 关闭 结束 3
2.2 算法流程图 OnDraw 函数流程图 四、 系统测试与调试分析 1、系统测试 测 试 说 明 测 试 用 例 测试名称 指针式时钟 测试目的 验证软件的时间功能 测试技术 单元测试 测试方法 黑盒测试法 测试内容 显示时间和系统时间对比 测试步骤 运行程序 测试数据 预期结果 显示时间和系统时间一致 测试结果 与预期相符 4
测 试 说 明 测 试 用 例 测 试 说 明 测 试 用 例 测 试 说 明 测 试 用 例 正确输入闹钟时间 下一分钟的时间 时间到后闹钟报时 与预期相符 测试名称 指针式时钟 测试目的 验证闹钟功能 测试技术 单元测试 测试方法 黑盒测试法 测试内容 闹钟功能 时间 测试步骤 正确输入闹钟时间 测试数据 当前时间 预期结果 立即报时 测试结果 与预期相符 测试名称 指针式时钟 测试目的 验证倒计时功能 测试技术 单元测试 测试方法 黑盒测试法 测试内容 倒计时功能 测试步骤 正确时间 测试数据 随意输入时间 预期结果 从输入的时间开始倒计时 测试结果 与预期相符 测试名称 指针式时钟 测试目的 验证改换颜色 测试技术 单元测试 测试方法 黑盒测试法 测试内容 换指针颜色功能 测试步骤 选择换表盘颜色 选择换指针颜色 测试数据 红色 时针蓝色 分针黑色 秒针绿色 预期结果 表盘颜色变为红 时针蓝色 分针黑色 秒针绿色 测试结果 与预期相符 与预期相符 2 调试分析 程序的调试过程会发现很多设计程序过程中的漏洞,也会有很多 bug 出现,需要仔细的 不断调试才能尽量的把程序调试的完美,我的程序调试的过程中出现的问题较多,现列举几 个比较有代表性的,希望供其他人参考 1、 我最初想到的是设计出一个不依靠读取系统时间就能独立运行的时钟,但是,个人能力 实在有限,设计了一段时间还是没有头绪,只能投机取巧的读取系统时间代替了,这样 的话一些个性话的功能就不能够实现了,像把一分钟设置成 120 秒,每小时 30 分钟等 2、目前的程序虽然能正常运行,但是,对于一些错误是不能反映出来的,像输入闹钟时间, 如果输入的范围不对的话也不能给出提示 3、闹钟的时间输入因为没有秒的限制,如果是当前时间的话,目前的程序会直接报时,应 该可以改成当前时间不报时的 5
五、用户手册 1、windows 系统 vc++6.0 设计 2、本程序不需要安装使用,直接运行即可弹出时钟对话框 3、 图 1 时钟主界面 图 2 程序功能界面 进入程序后会弹出图 1 界面显示系统时间,点击设置按钮可以出现图 2 功能列表 图 3 闹钟时间设置界面 图 4 倒计时时间设置界面 打开功能列表可以选择各个功能,图 3 为选择闹钟功能弹出的对话框,图 4 为选择倒计时功 能弹出的对话框 6
选择设置表盘或者各指针颜色时都会弹出图 5,选择喜欢的颜色点击确定后即可改变颜色 图 5 表盘及指针颜色设置界面 六、程序清单 (1): //视图类的构造函数 CShejiView::CShejiView() { // TODO: add construction code here CBitmap bmp;//定义一个位图类型的变量。 bmp.LoadBitmap(IDB_BITMAP1); ///加载位图 m_brushBackground.CreatePatternBrush(&bmp); ///创建位图画刷。 CTime curtime = CTime::GetCurrentTime();//同步系统时间。 m_hour = curtime.GetHour(); m_minute = curtime.GetMinute(); m_second = curtime.GetSecond(); flag=0;//时钟正常工作状态 flag2=1;//倒计时无效; hour=-1; minute=-1; set=0; } (2)//ondraw()函数进行绘制 void CShejiView::OnDraw(CDC* pDC) { 7
分享到:
收藏