第一次个人编程作业

一.仓库地址

二. PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 30
· Estimate · 估计这个任务需要多少时间 30 30
Development 开发 625 1005
· Analysis · 需求分析 (包括学习新技术) 120 530
· Design Spec · 生成设计文档 10 10
· Design Review · 生成设计文档 5 5
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 10 10
· Design · 具体设计 60 60
· Test · 测试(自我测试,修改代码,提交修改) 300 330
Reporting 报告 60 30
· Test Repor · 测试报告 10 20
· Size Measurement · 计算工作量 5 5
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 30 300
| 	· 合计 | | 710| 1110|

三.解题思路

想法主要是用正则表达式现把名字和电话号码还有匹配数字、‘省’、‘市’等关键字,然后把他们丢到json里面
1.先从逗号为分隔符,把名字提取出来
2.再用正则表达式把电话号码提取出来
3.每次匹配把‘省’,‘市’,‘区’等的内容提取出来
4.每次提取出来后把不需要的内容删除,剩下的就是详细的地址了

四、计算模块接口的设计与实现过程

表头 表头
get_phone(can) 获得电话号码
get_province(can) 获得省
get_city(can) 获得城市
get_qu(can) 获得区
get_zheng(can) 获得镇
get_lu(can) 获得路
get_hao(can) 获得号

流程图如下

  • 以下是我的代码部分:
province_zhixia = ['北京', '天津', '上海', '重庆']

def get_province(can):
    if(can[0:2] in province_zhixia):
        ret = can[0:2]
        return ret
    else:
        if(re.search(("(.*?省)|(.*?自治区)"), can) != None):
            ret = re.search(("(.*?省)|(.*?自治区)"), can)
        else:
            if(can[0:3] == "黑龙江"):
                return "黑龙江"
            else:
                return (can[0:2])
    return ret.group(0)
**功能实现代码:**
def get_phone(can):
    ret = re.search(r'\d{11}', can)
    if ret == None:
        return ""
    else:
        return ret.group(0)


def get_province(can):
    if(can[0:2] in province_zhixia):
        ret = can[0:2]
        return ret
    else:
        if(re.search(("(.*?省)|(.*?自治区)"), can) != None):
            ret = re.search(("(.*?省)|(.*?自治区)"), can)
        else:
            if(can[0:3] == "黑龙江"):
                return "黑龙江"
            else:
                return (can[0:2])
    return ret.group(0)


def get_city(can):
    if(re.search(".*?市", can) != None):
        return (re.search(".*?市", can)).group(0)
    else:
        return ''


def get_qu(can):
    if(re.search(("(.*?区)|(.*?县)|(.*?区)"), can) != None):
        return (re.search(("(.*?区)|(.*?县)|(.*?区)"), can)).group(0)
    else:
        return ''


def get_zheng(can):
    if(re.search(("(.*?街道)|(.*?镇)|(.*?乡)"), can) != None):
        return (re.search(("(.*?街道)|(.*?镇)|(.*?乡)"), can)).group(0)
    else:
        return ''


def get_lu(can):
    if(re.search(".*?路", can) != None):
        return (re.search(".*?路", can)).group(0)
    else:
        return ''


def get_hao(can):
    if(re.search(".*?号", can) != None):
        return (re.search(".*?号", can)).group(0)
    else:
        return ''

五.计算模块接口部分的性能改进

性能分析图:
存在一些问题,还在更进中

函数调用流程图

六.计算模块部分单元测试展示

  • 单元测试的主要内容是测试省份

测试覆盖率:

七.异常处理

还是有蛮多的bug,但是我想异常处理只有输入的问题了
例如:

  • !李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层(没有难度)
    2!李四,福建省福州13756899市鼓楼区鼓西街道湖滨路110号湖滨大厦一层(电话号码不全)
    2!李四福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层(格式不规范)
    2!,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层(没有名字)

八.总结

不该作业放在最后两天完成简直太难了,本来计划是用C++写的代码,但是写道一半发现实现不了,就开始转战python,一天学习,一天写代码,差点把自己给搞死,中间还有很多烦人的事实,说实话,软件工程,真的刺激。我太难了啊。。。。。。。。。

posted @ 2019-09-17 22:59  LJC01  阅读(176)  评论(3编辑  收藏  举报