基于桌面的多功能万年历设计与开发

时间:2022-08-25 01:04:23

基于桌面的多功能万年历设计与开发

摘 要:描述了基于桌面多功能万年历的设计与开发过程,利用软件工程思想对软件进行分析与设计,除了实现多功能万年历的基本功能,同时也实现了时间的多种显示及日期的备忘录功能。在对系统进行分析时使用自上而下、逐层分析的方法,所实现的多功能万年历界面美观,使用方便。

关键词:多功能万年历;SA;SD;SP

中图分类号:TP319 文献标识码:A 文章编号:16727800(2013)002007202

0 引言

随着计算机技术的发展,万年历已成为一种使用非常广泛的工具。当前互联网上有很多万年历软件,但大多数基于桌面的万年历的功能都比较单一,用户的交互性差,不能很好地适应用户需求。因此,开发一款迎合广大用户需求、交互性能好、功能齐全的桌面万年历尤为必要。

1 技术路线

结构化分析方法简单,容易掌握,而且还能和设计阶段的结构化设计衔接,从而取得良好的设计结果。分解和抽象是系统开发中控制复杂性的基本手段,它先将系统“抽象”成一个模型,然后对模型进行逐层分解,直到能被理解、可以实现为止。因此,分析的策略是自顶向下、逐层分解、由抽象到具体的过程。

1.1 系统设计基本方法

本系统基于MFC的Dialog based对话框进行界面设计与编程,在对该软件进行系统分析和界面设计的基础上,利用Panel、COMBO、Edit等组件进行界面的开发。在程序中主要调用系统时间,利用系统时间来计算时钟显示时针、分针、秒针的位置。它具有以下特点:

(1)封装性: MFC类库是由MFC框架构成的。这些类有的封装了Win32应用程序编程接口,有的封装了应用程序的概念,还有的封装了OLE特性,或者封装了ODBC和DAO数据访问功能。

(2)继承性:MFC将众多类的共同特性抽象出来,设计出一些基类作为实现其它类的基础。其中,CObject和CCmdTarget是这些类中最重要的。

(3)虚拟函数和动态约束: MFC建立了消息映射机制,而消息映射机制使其用富有效率、便于使用的手段解决消息处理函数的动态约束问题。

1.2 系统总体结构

本系统通过结构化设计方法对软件进行设计。针对软件生存周期各个不同的阶段,它主要分为结构化分析(SA)、结构化设计(SD)和结构化程序设计(SP)等方法,它是利用图形表达用户需求。结构化分析的步骤如下:①分析当前的情况,做出反映当前物理模型的DFD;②推导出等价的逻辑模型DFD;③设计新的逻辑系统,生成数据字典和基元描述;④建立人机接口,提出可供选择的目标系统物理模型;⑤确定各种方案的成本和风险等级,据此对各种方案进行分析;⑥选择一种方案建立完整的需求规约。

本系统按照以上结构化设计方法对多功能万年历系统进行总体设计,其系统总体结构如图1所示。

1.3 系统类设计

根据结构化的设计方法,系统总体结构图完成了模块的划分,根据逐步求精的要求在已经划分模块的基础上进行模块的类设计。

在前台界面显示功能的模块有:日历显示模块、日期显示模块、时间显示模块。对于这些模块结合MFC的类框架来实现其功能,主要用到MFC类库中的按钮类(CButton)、列表框类(CListBox)、编辑框类(CEdit)、时间类(CTime)、对话框类(CDialog)及窗口类(CWnd)、应用程序类(CWinApp)。通过继承这些类来搭建系统的基本框架。然后根据这些类来定义一些事件处理函数来处理发生在控件上的事件。

后台处理类主要是为了响应控件类的事件而设计的辅助类,主要有时间处理类(mytime)、日历类(CCalendar)等。通过这些类之间的调用与协调,来完成多功能万年历的设计与实现。

2 系统详细设计

在进行日期显示时需要定义日期的数据结构,在实现该功能时,利用CComboBox控件来显示公元纪年法的年、月、日。如以下代码首先定义了CComboBox类型的变量,然后将该变量与界面中的CComboBox控件相关联,最后对控件进行初始化,这样用户可以通过界面来选择年、月、日及时间。在显示传统的干支纪年法时需要计算闰年以及阴历每月所对应的天数,还有每天所对应的节气,这些功能主要是通过函数来实现:

//判断iYear是不是闰年

static BOOL IsLeapYear(WORD iYear)

{return !(iYear%4)&&(iYear%100) || !(iYear%400);}

//计算iYear,iMonth,iDay对应是星期几 1年1月1日――65535年12月31日

static WORD WeekDay(WORD iYear, WORD iMonth, WORD iDay);

//返回iYear年iMonth月的天数 1年1月――65535年12月

static WORD MonthDays(WORD iYear, WORD iMonth);

//计算公历iYear年iMonth月iDay日对应的节气 0-24,0表不是节气

static WORD l_GetLunarHolDay(WORD iYear, WORD iMonth, WORD iDay);

……

在系统中进行时间显示,方便用户及时掌握时间,时间显示设计成表盘显示和数字显示两种,让用户以直观的方式来查看时间。在时间显示时由于要同时以两种方式进行显示,故需要设计一种数据结构对两种显示进行时间的存储。

class mytime

{

public:

上一篇:基于Epidata的专科门诊电子病历研究与开发 下一篇:基于分解的混合多目标进化算法在供水调度系统...