zoukankan      html  css  js  c++  java
  • 跟用户沟通,问题尽量分析清楚,以及解决问题

    分享一下上个星期,开发与跟用户沟通历程。

    前提,以前旧系统,人事资料是一笔笔人手录入。现在公司在减少人手,提高效率。因此Insus.NET需要修改旧系统,实现批量导入。

    下面一些截图来自邮件。

    经用户使用之后,还有一些特殊情况是在开发时是没有想到的。当遇上下面的资料时,用户反馈:


    原因是有旧系统内,存储雇员工号,只能存储整型。看到用户反馈的问题,我们会想到什么,怎样回用户的邮件?下面是Insus.NET的回复


    从用户提供的数据。我们需要知道第位字母由什么来替代?替代规则是什么。这都是需要跟用户了解清楚。下面用户回复:


    上图中,与用户了解到,打少了字,正确是“四五百人”。
    经分析,第一位和第三位,如果有出现字母是没有什么问题,Insus.NET觉得第二位,将会出现下面的问题,回复用户如下:


    从上面回复中,跟用户说明替换规则将有一些异常,得说清楚。看看用户怎样回复:



    问题弄清楚之后,我们就可以做事了。
    第二位将会有A~F,将替换为1~6。可以创建一个列表:

     
    某一天,用户需要再添加几个G,H,I...只是在J以前的,还可以在此列表添加。

    下面是替换方法:



     分别处理前三位字符,符合条件即替换之。看上去很复杂,维护起来看代码还得看上半天,产生另外一个版本:


    第二版本,稍微有些简化。方法是先把处理的字符串切割为两段,前三位字符串为一段,余下为一段,并存入阵列中。然后跟一种方案一样去判断与替换。

     切切拼拼,还是觉得复杂,是否有更好的方法? 下面分享Insus.NET第三次修改的,需要做的,是写一个方法,也就是产生一切相关的字符,然后用来匹配。此方法算得上是封装:

     我们再回过头去看用户提供的原资料,要么是两位,要么是三位字符。第一位与第三位算得上是固定了。关键在于第二位。因此Insus.NET再创建一个字符模版集。

    下面再来看看替换方法:



    上面的代码示例中,高亮部分的代码,是对Dictionary数据集时行倒排序,目的是先匹配三位,再匹配两位。经过这样重构与修改,我们还可以封装为另外一个方法:



    最后变成了:



    OK,完成了。


    下面内容于2014-06-30 10:55分补充:
    其实上面有一个方法:


    是需要手动每个字母,这样有可能会出错,下面是Insus.NET重新修改,防止出错的机率减少:


    这样只需传入最后的一个字母,也达到方法封装。

     
    下面内容于2014-08-13 13:45分补充:
    上面有个方法GetReplaceResult(string str),可以效率优化一下:


    它是有带有字符的才会跑这程序块,如果遇上全是数字的字符串,我们就不必跑了:



    还有一个方法replStr()效率也有问题,如下:

    其中有循环两次Letters(),意味着它需要产生两次这个函数。因此Insus.NET把它重构一下:

  • 相关阅读:
    Codevs 2296 仪仗队 2008年省队选拔赛山东
    Codevs 1535 封锁阳光大学
    Codevs 1069 关押罪犯 2010年NOIP全国联赛提高组
    Codevs 1218 疫情控制 2012年NOIP全国联赛提高组
    Codevs 1684 垃圾陷阱
    洛谷 P1108 低价购买
    Vijos P1325桐桐的糖果计划
    Codevs 3289 花匠 2013年NOIP全国联赛提高组
    Codevs 2611 观光旅游(floyed最小环)
    C语言基础之彩色版C语言(内含linux)
  • 原文地址:https://www.cnblogs.com/insus/p/3813185.html
Copyright © 2011-2022 走看看