PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 60 | 60 |
Estimate | 估计这个任务需要多少时间 | 1370 | 1700 |
Development | 开发 | 300 | 480 |
Analysis | 需求分析 (包括学习新技术) | 60 | 60 |
Design Spec | 生成设计文档 | 30 | 30 |
Design Review | 设计复审 | 30 | 30 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 30 | 30 |
Design | 具体设计 | 30 | 30 |
Coding | 具体编码 | 600 | 720 |
Code Review | 代码复审 | 60 | 60 |
Test | 测试(自我测试,修改代码,提交修改) | 60 | 60 |
Reporting Standard | 报告 | 30 | 30 |
Test Repor | 测试报告 | 60 | 60 |
Size Measurement | 计算工作量 | 20 | 30 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 50 |
合计 | 1370 | 1700 |
解题思路
因为前两级的省和市会缺失,所以决定打下这两个级别的表进行预处理,拿到字符串之后先处理电话号码然后处理名字和标点。然后根据打的表处理省市,之后按关键字处理接下来的级别。实际操作起来发现比想象中的难很多。
设计实现过程
将代码写了一部分之后发现会出现编码的问题,于是网上找资料尝试转编码。完成这步之后发现后面的东西比想象中的还要复杂很多, 整理好省市的情况之后发现有些二级地区的名字后缀是很特殊的,于是对代码和数据进行了大范围的调整,这一部分花了不少时间。
类图
设计了两个类$People$和$Address$以及一个命名空间$Area$
类$People$:
函数 | 作用 |
---|---|
GetAns | 用来返回运算结果 |
GetNumber | 提取手机号码 |
GetName | 提取姓名 |
GetAddress | 调用$Address$类处理地址的具体信息 |
ClearPunctuation | 清除标点符号 |
doit | 串联这些函数统一进行操作 |
性能分析
从图上可以看出,大部分的时间都花费在了转换编码、文件流读入输出、字符串类型的运算以及地址的预处理上,但是这一部分的时间是不可或缺的。
消耗时间最多的函数:
单元测试
李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.
小陈,广东省东莞市凤岗13965231525镇凤平路13号社保厂. 王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院. 单元测试结果:
异常处理
处理了手机号码格式不正确、丢失姓名和地址格式错误的情况
张三,福建福州闽1359362侯县上街镇福州大学10#111.
,福建福州闽13599622362侯县上街镇福州大学10#111. 张三,13599622362福州大学10#111.
运行结果:
代码展示:
运用标记符号在匹配失败是标记在何种类型的匹配下会失败,然后返回异常的原因。