APP下载

用Vb.net实现事务提醒

2015-10-22彭显锋韦仕丽李冬梅

科技创新导报 2015年24期
关键词:实现方法

彭显锋 韦仕丽 李冬梅

摘 要:对于大多数单位而言,每天需要完成的工作很多,时常会因漏办事务而对工作造成影响。已有的一些如闹钟、备忘录等工具,很难满足实际工作的需要。设计一个功能较为完善的事务提醒程序很有必要。该文以一个功能较为全面的事务提醒程序编制为例,从程序功能设计、实现的过程、具体编程方法等方面,详细介绍了用Vb.net实现事务提醒的思路和编程方法,对于相似类型的事务提醒程序的编制有一定的参考价值。

关键词:Vb.net 实现 事务提醒 方法

中图分类号:TP311 文献标识码:A 文章编号:1674-098X(2015)08(c)-0059-03

目前,对于大多数单位而言,每天需要完成的工作很多,时常会因漏办事务而对工作造成影响。由于事务类型繁多,提醒周期也不尽相同,已有的一些如闹钟、备忘录等工具,很难满足实际工作的需要。因此,设计一个功能较为完善的事务提醒程序很有必要。

该文以一个功能较为全面的事务提醒程序编制为例,介绍用Vb.net实现事务提醒的思路和编程方法。

1 程序功能概述

程序能对节假日(包括法定和自定义节假日)、24节气、自定义事务等进行提醒。对于自定义任务,还能按周期,如“仅一次、每天、每周、每月、每年”等进行重复提醒,并可设置再次提醒时间。程序运行主界面如“图1”所示。

2 提醒功能的实现

2.1 “万年历”的制作

万年历是实现节假日(包括法定公农历节假日、自定义节假日等)提醒的基础。

本程序建立了一个“公——农历转换”的类,以公历日期为参数,通过该类可计算出相对应的农历日期、星期、节假日日期、天干地支、星座等。主要实现方法如下。

2.1.1 公歷节假日的获取

(1)定义如下数组并进行初始化:

Dim sFtv() As Object={1,1,“元旦”,3,8,“妇女节”,3,23,“世界气象日”}

其中:每个节日为3个元素,分别表示月、日和节日名。按此规律可加入自定义的节假日。

(2)下面的代码可取得数组中定义的节假日月、日及节假日名称。

Private SolarHolidayInfo()As SolarHolidayStruct

Private Structure SolarHolidayStruct

Dim Month As Integer

Dim Day As Integer Dim HolidayName As String

End Structure

‘取得节假日月、日及名称

Dim b As Integer= UBound(sFtv) + 1

ReDim SolarHolidayInfo(b /3) ‘为数组重新分配存储空间

For i=0To(b/3)-1

SolarHolidayInfo(i).Month = sFtv(i*3)‘月数

SolarHolidayInfo(i).Day = sFtv(i * 3 + 1)‘日数

SolarHolidayInfo(i).HolidayName = sFtv(i * 3 + 2)‘节假日名称

Next

(3)用公历的月、日数分别与SolarHolidayInfo(i).Month、SolarHolidayInfo(i).Day对比,如果相同,SolarHolidayInfo(i).HolidayName即为相应日的公历的节假日名称。

2.1.2 农历节假日的获取

定义如下数组并进行初始化:

Dim lFtv() AsObject ={1,1,“春节”,1,15,“元宵”,5,5,“端午”,8,8, “苗族风情节”}

先将公历日期通过“公——农历转换”类,得到相应的农历日期。同前述“公历节假日的获取”方法,便可得到相应日的农历的节假日名称。

2.2 “24节气”日期的计算

我国的万年历以紫金山天文台发布的为标准,通过公式法计算出的24节气日期与标准日期有时会相差一天。为了与标准万年历一致,本软件先将标准万年历中的24节气日期存入数据库(图2),采用查表法得到24节气的日期。

2.3 本程序中与日期、时间运算相关的主要方法

2.3.1 日期、时间大小的比较

将需要比较的两个日期、时间值转化为24小时制的String类型,再用比较运算符直接比较。此方法可以比较任意精度的日期、时间。例如:如下代码能将当前日期转化为24小时制的String类型:

DateTime.Now.ToString(“yyyy-MM-dd HH:mm:ss”)

2.3.2 日期、时间加减

使用下面Date对象的方法可以实现日期、时间的加减运算:AddYears, AddMonths, AddDays, AddHours, AddMinutes, AddSeconds, AddMilliseconds。

例:DateTime.Now.AddDays(x)‘当前日期加x天(x可正可负,负时为减)

DateTime.Now.AddHours(-x) ‘当前日期减x小时

2.3.3 日期、时间差计算

DateDiff 函可以取得两个日期的间隔,并且可以用年、月、日等单位传回两个日期的差距,语法为: DateDiff(间隔参数, 日期一, 日期二)

间隔参数为: DateInterval.Year (年)DateInterval.Quarter (季)

DateInterval.Month(月)DateInterval.Day(日)

DateInterval.Week(周) DateInterval.Hour(时)

DateInterval.Minute (分) DateInterval.Second (秒)

2.4 “节假日、24节气”提醒功能的实现

2.4.1“节假日”提醒

日历中节假日较多,但并不是每个节假日均有提醒的必要。因此,可先将需要提醒的节假日存入一个表(图3)。

(1)以当前日期为初始参数,调用“公——农历转换”类,如果未返回节假日名称、或返回的节假日不在“需要提醒的节日”表中,则日期加一天,再调用“公——农历转换”类,直至返回最近的“需要提醒”的节假日名称。

(2)查询“节日再次提醒时间表”(图4),如果记录中的“节日名称”与返回的需要提醒的公、农历节假日名称均不相同,则删除相关记录,并直接进行提醒。否则,如果有与返回的节假日名称相同的记录,并且当前时间大于或等于“再次提醒时间”,则进行提醒。

(3)计算出最近的“需要提醒”的节假日与当前日相差天数,进行倒计时提醒,并允许设置“下次提醒时间”(图5)。

2.4.2“24节气”提醒

(1)从“24节气表”中读取“节气日期”大于或等于当前日期、并且小于或等于当前日期加18天(因两个节气的日期间隔不可能大于18天)的节气名称,即为当前需要提醒的节气名称。

(2)提醒方式以及“下次提醒时间”的设置与“节假日提醒”相同。

2.5 “自定义任务”提醒功能的实现

(1)任务登记:根据任务周期对需要提醒的任务进行登记,生成任务表(图6)。

(2)定时对任务表进行查询,按“提醒类型”对每条记录进行处理,以确定是否进行提醒。

(3)“仅一次”提醒的实现,①查询“任务表”,如果当前日期大于任务日期,则删除该條任务记录,不再提醒。②如果已经设置了“下次提醒时间”,则当当前时间大于或等于“下次提醒时间”,才进行提醒。否则,当当前日期大于或等于任务日期,就进行提醒。进行提醒时,可设置“下次提醒时间”。

(4)“每天”提醒的实现,查询任务表中相关任务是否在“下次提醒时间”中设置了“当日不再提醒”,如已设置,则不作任何操作,否则,如果当前时间大于或等于下次提醒时间,则进行提醒。

(5)“每周、每月、每年”提醒的实现,此类提醒功能的实现,与“每天”提醒的方法基本相同,主要是根据日期进行对比,确定是否需要提醒。但要注意的是:每个月的天数不完全相同。如果“每月或每年”提醒日期的号数大于相应月的总天数,运算时应予处理,否则会出现错误。当提醒日期的号数大于相应月总天数时,一般默认提醒日期为月末。

3 结语

该文介绍了事务提醒程序编制的一些思路和编程方法,对于相似类型的事务提醒程序的编制有一定的参考价值。由于作者思维和知识面的局限,定有欠妥和不足之处,望各位同行提出宝贵意见。

参考文献

[1] Bill Sheldon,Billy Hollis.NET 4.5与Visual Basic 2012高级编程[M].7版.北京:清华大学出版社,2014.

[2] 邵峰晶,于忠清,韩静海,等.VB.NET程序设计[M].北京:电子工业出版社,2011.

猜你喜欢

实现方法
可能是方法不对
办公室人员尚需制定个人发展规划
苏州信息学院教务管理系统的设计与实现
浅析铁路通信传输的构成及实现方法
用对方法才能瘦
四大方法 教你不再“坐以待病”!
捕鱼