一、github链接:
https://github.com/Tiny-666/031702115.git
二、PSP表格(初步估计):
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 40 | ? |
Estimate | · 估计这个任务需要多少时间 | 40 | ? |
Development | 开发(包含下面8个子任务) | 1635 | ? |
Analysis | · 需求分析(包括学习新技术) | 1200 | ? |
Design Spec | · 生成设计文档 | 0 | ? |
Design Review | · 设计复审 | 45 | ? |
Coding Standard | · 代码规范(为开发制定合适的规范) | 10 | ? |
Design | · 具体设计(用伪代码,流程图等方法来设计具体模块) | 0 | ? |
Coding | · 具体编码 | 300 | ? |
Code Review | · 代码复审 | 20 | ? |
Test | 测试(自我测试,修改,提交修改) | 60 | ? |
Reporting | 报告 | 100 | ? |
Test Report | · 测试报告 | 60 | ? |
Size Measurement | · 计算工作量 | 10 | ? |
Postmortem & Process Improvement Plan | · 事后总结并提出过程改进计划 | 30 | ? |
合计 | 1775 | ? |
三、计算模块接口的设计与实现过程
编码格式转换
①UTF-8转GBK,读取文件时使用
②GBK转UTF-8,写到输出文件时使用
提取电话号
找出一行中的连续11个数字
提取姓名
直接提出逗号之前的汉字
提取地址
先提取出省、市、县、镇四个级别,然后根据等级判断是否需要提取多级地址,最后统一输出剩下的字符串,并删去英文句号
提取细节地址
根据关键字“路”、“巷”、“街”提取第五级地址,根据关键字“号”提取第六级地址
四、计算模块接口部分的性能改进
每个模块执行的功能都十分简单,个人感觉没有什么可以改进的地方。
以下是测试了1150个样例的分析报告:
消耗最大的的函数就是输入函数getline(毕竟1150个样例)。。
五、计算模块部分单元测试展示
测试部分:完整的提取个人信息功能
测试数据:从所给的1150个样例中抽取10个
输入(10个样例):
1!双韵,安徽黄山市歙县雄村镇006县道与G56杭瑞高速歙县雄村乡防保站13575634949.
1!苗朽蕾,13884441418湖北省孝感市云梦县方庙村村委会.
1!百里屏闷,广西壮族自治区桂林市灵川县潭13315249688下镇004乡道灵川县潭下镇大义村民委员会.
1!通描哗,山西省临汾市安泽县冀氏镇北孔滩村13228042359村委会.
1!司马俐,河北石家庄市15304622285裕华区裕翔街道南位村村委会.
1!宣册,北京十三陵镇果庄2号院15839949988.
1!夹谷理丧,北京顺义区15856811916木林镇陈各庄7号楼.
2!郁蕾喘,海18807961204南省海口秀英区长流镇美李小学.
2!赫连琐妙,广西壮族自治区柳州市柳江区土博镇琴怀村林18998414441场.
3!蔺脚贺,湖南省娄底市冷水江市石槽村三尖镇15581828223人民政府.
输出(修正部分异常后):
[
{"level":1,"姓名": "双韵","手机": "13575634949","地址": ["安徽省","黄山市","歙县","雄村镇","006县道与G56杭瑞高速歙县雄村乡防保站"]},
{"level":1,"姓名": "苗朽蕾","手机": "13884441418","地址": ["湖北省","孝感市","云梦县","","方庙村村委会"]},
{"level":1,"姓名": "百里屏闷","手机": "13315249688","地址": ["广西壮族自治区","桂林市","灵川县","潭下镇","004乡道灵川县潭下镇大义村民委员会"]},
{"level":1,"姓名": "通描哗","手机": "13228042359","地址": ["山西省","临汾市","安泽县","冀氏镇","北孔滩村村委会"]},
{"level":1,"姓名": "司马俐","手机": "15304622285","地址": ["河北省","石家庄市","裕华区","裕翔街道","南位村村委会"]},
{"level":1,"姓名": "宣册","手机": "15839949988","地址": ["北京","北京市","","十三陵镇","果庄2号院"]},
{"level":1,"姓名": "夹谷理丧","手机": "15856811916","地址": ["北京","北京市","顺义区","木林镇","陈各庄7号楼"]},
{"level":2,"姓名": "郁蕾喘","手机": "18807961204","地址": ["海南省","海口市","秀英区","长流镇","","","美李小学"]},
{"level":2,"姓名": "赫连琐妙","手机": "18998414441","地址": ["广西壮族自治区","柳州市","柳江县","区土博镇","琴怀村","","林场"]},
{"level":3,"姓名": "蔺脚贺","手机": "15581828223","地址": ["湖南省","娄底市","冷水滩区","","江市石槽村","","三尖镇人民政府"]}]
测试覆盖率
90%
六、计算模块部分异常处理说明
异常样例:
1!司马俐,河北石家庄市15304622285裕华区裕翔街道南位村村委会.
1!宣册,北京十三陵镇果庄2号院15839949988.
3!解维牌,长宁区仙霞新村街道虹古路261号虹古小13345422905区4号楼.
异常类型:
①对前两个样例:乱码
-- 处理方式:修改匹配关键字部分的代码思路
②对于最后一个样例:地址不能补全
-- 处理方式:尚无
错误场景:
①原代码思路是令文本与我的省份表逐字节匹配,删除文本中与之相同的字节。样例中河北省的“省”字拼音的前两个字母为sh,而文本中“河北”的后一个字“石”拼音的前两个字母也为sh,第一字节编码一致导致误删,从而导致后面的文本都不能正常操作。第二个样例同理。
②三级难度下,缺省地址不能补全,原因是未能写出智能补全代码。
七、完整PSP表格:
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 40 | 30 |
Estimate | · 估计这个任务需要多少时间 | 40 | 30 |
Development | 开发(包含下面8个子任务) | 1635 | 1805 |
Analysis | · 需求分析(包括学习新技术) | 1200 | 1350 |
Design Spec | · 生成设计文档 | 0 | 0 |
Design Review | · 设计复审 | 45 | 45 |
Coding Standard | · 代码规范(为开发制定合适的规范) | 10 | 30 |
Design | · 具体设计(用伪代码,流程图等方法来设计具体模块) | 0 | 0 |
Coding | · 具体编码 | 300 | 300 |
Code Review | · 代码复审 | 20 | 20 |
Test | 测试(自我测试,修改,提交修改) | 60 | 60 |
Reporting | 报告 | 100 | 100 |
Test Report | · 测试报告 | 60 | 60 |
Size Measurement | · 计算工作量 | 10 | 10 |
Postmortem & Process Improvement Plan | · 事后总结并提出过程改进计划 | 30 | 30 |
合计 | 1775 | 1935 |