自定义时钟程序(对问题的分割,抽象,循环处理)
2015-08-25 13:59
267 查看
前两天写一个小程序,需求是需要跟踪某个物流工具的物流状态。物流状态有六个,是固定的。且这个工具是可以循环使用的,所以物流状态系统要能自动的循环更新,思考后给出的解决办法是,对物流状态进行编码,从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. 年不做为时间段来考虑。因为年没有进位规则,且需要返过来影响天的进位规则。不做为通用的段来处理。
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. 年不做为时间段来考虑。因为年没有进位规则,且需要返过来影响天的进位规则。不做为通用的段来处理。
相关文章推荐
- datagridview控件中使用comboBox控件(datagridviewcomboboxcolumn类)
- hibernate注解(annoation)使用id主键生成策略
- Ensemble methods(组合方法,集成方法)
- Gradle – Spring 4 MVC Hello World Example – Annotation
- 极光推送指南,直接加到项目里
- leetcode 之 Unique Paths
- 如何利用简道云实现专柜管理? | 数据管理
- Json 入门例子(form表单)【0】
- eclipse快捷键
- 操盘策略:六种方法理性应对跌市
- 使用yum 安装软件出现一下错误:” PYCURL ERROR 6
- WebLogic连接池错误: BEA-001153
- tomcat远程调试
- 制作Linux发行版U盘运行系统
- 不可征服
- android studio跨应用启动service
- ubuntu1404 开发环境配置
- 关于Session的机制,实现方式和安全、单点故障问题
- python并行化介绍及使用 Pool
- CentOS修改时区以及同步时间