当前位置:
文档之家› 面向对象程序设计课程设计报告《电子时钟》(C )
面向对象程序设计课程设计报告《电子时钟》(C )
2 需求分析
2.1 要求
设计类结构,模拟电子时钟的行走,在屏幕上显示一个活动时钟。
2.2 任务
(1)显示日期的格式:XXXX 年 XX 月 XX 日 (2)显示时间的格式:XX:XX:XX。 (3)添加显示星期的格式:星期 X
2.3 运行环境
(1)WINDOWS2000/XP 系统 (2)Visual C++ 6.0 编译环境或 DEV C++ 5.0 编译环境
视图类实现时钟的主要功能,在该类的 OnDraw 函数里面对时间日期进行显示输 出。向窗口输出信息时,为了保证高刷新率下绘图不闪烁,使用内存绘图的方法,在 内存中创建一个与屏幕绘图区域一致的对象,使得重绘视图时可以大大提高运行速 度。为了使计时能够达到几乎无误差,使用了一个获取系统两秒间隔作为计时间隔的 方法,使得计时间隔和系统时间间隔一致。每次重绘视图的时候都重新获取系统时间, 当该两次获得的秒不一致时,就对时间加一秒。通过一个计时器消息,使视图 50ms 刷新一次,以保证时间的准确性。
1
关的属性和方法即可完成模拟电子时钟的功能。 文档类定义时钟的相关属性,包括 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 型 的。
CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1;
}
5
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); ShowControlBar(&m_wndToolBar,FALSE,FALSE); //隐藏工具栏 return 0; } BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) )
1 前言
时钟在人们日常生活中必不可少,时钟的原理是怎么样的呢,本程序将模拟一个 电子时钟。为了使程序更加美观,本程序是使用 Visual C++编写一个可视化的模拟电 子时钟程序。电子时钟的关键在于延时,为了达到延时的准确性,不受程序执行时间 的影响,采用了系统两秒之间的间隔进行延时。该程序还加入了显示星期功能,在知 道 1901 年每月 1 号是星期几的情况下,再根据年、月、日即可算出星期几。
4
#endif
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR,
return FALSE; cs.style=WS_OVERLAPPED|WS_SYSMENU; //禁止调整窗口大小 cs.style=WS_OVERLAPPED|WS_SYSMENU|WS_MINIMIZEBOX; return TRUE; } #ifdef _DEBUG void CMainFrame::AssertValid() const { CFrameWnd::AssertValid(); } void CMainFrame::Dump(CDumpContext& dc) const { CFrameWnd::Dump(dc); } #endif //_DEBUG
图 3.2 OnDraw 函数流程图
3
4 具体代码实现
// MainFrm.h 文件,负责主窗口框架的显示 class CMainFrame : public CFrameWnd { protected: // create from serialization only
CMainFrame(); DECLARE_DYNCREATE(CMainFrame) public: virtual BOOL PreCreateWindow(CREATESTRUCT& cs); public: virtual ~CMainFrame(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif protected: // control bar embedded members CStatusBar m_wndStatusBar; CToolBar m_wndToolBar; protected: afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); DECLARE_MESSAGE_MAP() }; #endif // MainFrm.cpp 文件 #include "stdafx.h" #include "DateTime.h" #include "MainFrm.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__;
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD |
WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY |
在这个程序中,还使用了一个对话框类,使用对话框来对时间日期的设置。在菜 单栏里添加一个“设置时间”的选项和一个菜单消息,当点击这个选项就会弹出设置 时间日期的对话框,对话框中编辑控件设定了每个值的取值范围,从而对输入错误进 行排除。
2
3.2 主要类图
3.3 函数流程图
图 3.1 主要类图
OnDraw 函数流程图如图 3.2 所示:
2.4 开发工具
C++语言
3 分析和设计
+3.1 系统分析及设计思路
为了使程序的显示更加美观,该程序使用了 C++可视化程序设计方法进行设计。 在可视化程序设计中,建立了一个 MFC 单文档应用程序工程,该工程包括了视图类、 文档类对话框类和主框架类。在主框架类中修改窗口等属性,使整个时间的显示更加 协调。模拟电子时钟是一个显示和计时的小程序,因此只要在视图类和文档类添加相
目录
1 前言................................................................................................................ 1 2 需求分析........................................................................................................ 1
在视图类中需要添加几个方法:用于计算时间的方法 RunTime()、计算星期的方 法 Week()、int 型转 CString 型的方法 Change()、获取系统时间的方法 GetDateTime()、 重获系统时间方法 OnReset()和计时器消息。
在计算时间日期的时候,每达到 1 秒的时候对 second 进行加 1,然后判断是否达 到 60 秒,达到的话 minute 就加 1,同样的方法对 hour、day、month 和 year 进行计算, 在对 day 计数时,考虑到大小月和闰年,对 day 进行加 1 时,判断是哪一月和是否为 闰年。在确定年、月、日之后,使用函数 Week()进行对星期几的计算,根据 1901 年 每月 1 号是星期几可以得出现在是星期几。
2.1 要求....................................................................................................... 1 2.2 任务....................................................................................................... 1 2.3 运行环境............................................................................................... 1 2.4 开发工具............................................................................................... 1 3 分析和设计.................................................................................................... 1 3.1 系统分析及设计思路........................................................................... 1 3.2 主要类图............................................................................................... 3 3.3 函数流程图........................................................................................... 3 4 具体代码实现................................................................................................ 4 5 课程设计总结.............................................................................................. 26 5.1 程序运行结果或预期运行结果.........................................................26 5.2 设计结论............................................................................................. 27 参考文献.......................................................................................................... 27 致 谢.............................................................................................................. 27