自定义时钟程序(对问题的分割,抽象,循环处理)

前两天写一个小程序,需求是需要跟踪某个物流工具的物流状态。物流状态有六个,是固定的。且这个工具是可以循环使用的,所以物流状态系统要能自动的循环更新,思考后给出的解决办法是,对物流状态进行编码,从1开始编码,编码到6位置。然后用代码:

int nextState = currState%6+1;

通过这一行简单的代码就能得到下一个状态是什么。程序中,为了减少一些字符串转换过程,方便直接用SQL能读出最终的字符串文字,我把这些枚举变量存储到了一个数据库表中,好像有些比较大的财务软件也是这样处理这些枚举量的,还方便扩展。

解决这个问题后,我想起了一个面试题,如何再不使用任何系统获取时间相关API的情况下,实现时钟显示程序。当时我没有答出来,现在通过解决这个问题,再来重新思考这道题目,原来是如此之简单:

解决问题的思路:

1.     对日期的组成部分进行分割,由  年, 月, 日,  小时,  分钟, 秒 六部分组成。可以用一个枚举来描述组成部分。现在只考虑时间部分。小时,分钟,秒三个部分。

enum SegTypes{ Second, Minute, Hour };

2.      这些部分都有一个属性 Value来显示当前值。同时,有一个方法Increment是用来递增。

3.      Value是有一定的循环规则的,例如秒的进位规则是 60 进1,小时是 24 进1, 天的话有31,30,29,28  四种。

4.     再就是每当本部分达到一个循环的时候,需要通知更高级的时间段进位。例如秒钟走完 60 秒后,分钟需要加 1。在C#里面,可以通过事件来进行事件传播。

public event EventHandler JW;

5.     显示要求,不同的时间段有不同的显示需求,例如小时可以有两种显示方式,24小时制,还是12小时制。

6.     年不做为时间段来考虑。因为年没有进位规则,且需要返过来影响天的进位规则。不做为通用的段来处理。



  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值