第一次个人编程作业

一、GitHub链接

https://github.com/0x06c0/031702119.git

二、PSP表格(初步估计)

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

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

编码转换

string GbkToUtf8(const char *src_str)
string Utf8ToGbk(const char *src_str)

提取一、二级地址

string FirstAdd(string a)
string SecondAdd(string a)

四、计算模块接口部分的性能改进

一开始我设计了四个函数分别获取前四级地址,为了补全缺失的后缀,我将第二、三级地址以前一级地址作为键,储存为Json格式,如第二级所有地址我以"xx省":["xx市","xx市"]的Json格式存在文档中,以上一级地址为索引条件能较快地找到下一级可能存在的所有地址。而寻找每一级的地址时我先从地址中取前两个字,当匹配成功时直接返回文档中存的字符串,因为文档中的值都是带后缀的,所以直接解决了后缀补全的问题。后发现第三、四级后缀不会缺失,所以放弃了第三、四级地址的获取函数改为直接在主函数中通过匹配后缀来获取。性能分析如下:


五、计算模块部分单元测试展示

测试部分:提取地址功能
测试数据:从测试样例中随机抽取10个
输入:
1!乔哥踢,山东省13761422352枣庄市薛城区南安阳村民委员会.
1!宓蔫久,山西省晋城市城13719021976区西街街道苗孟庄社区泰丰小区网格2号楼.
1!伍莫珍,广西壮族自治区钦州13175764582钦南区黄屋屯镇屯兴街1号黄屋屯中学.
1!涂晓蹂,吉林省长春市长春高新技术产业开发区高新开发区102国道以北规划富裕河14781957580以南长春恒大名都131号香得益彰麻辣居.
1!佴赴,浙江省舟山市岱山县高亭镇13943898664银厦路88号南峰海鲜面馆.
1!怀喷,甘肃省天水15618942866市清水县草川铺镇449县道腰林秦惠琴希望小学.
1!幸晴,贵州省黔东南苗族侗族自治州岑巩县思13377199751旸镇磨寨村磨寨小学.
2!满茧腌,湖北省鄂州市涂家垴镇发13387889865展路9号鄂州市涂家垴派出所.
2!夹谷抡枯,18795320124甘肃省兰州城关区皋兰路街道皋兰路210号郑家台小区.
3!孙旗乖,13366755810白城市洮北区长庆南街65号.
输出:
[{"姓名": "乔哥踢","手机": "13761422352","地址": ["山东省","枣庄市","薛城区","","南安阳村民委员会"]},
{"姓名": "宓蔫久","手机": "13719021976","地址": ["山西省","晋城市","城区","西街街道","苗孟庄社区泰丰小区网格2号楼"]},
{"姓名": "伍莫珍","手机": "13175764582","地址": ["广西壮族自治区","钦州市","钦南区","黄屋屯镇","屯兴街1号黄屋屯中学"]},
{"姓名": "涂晓蹂","手机": "14781957580","地址": ["吉林省","长春市","长春高新技术产业开发区","","高新开发区102国道以北规划富裕河以南长春恒大名都131号香得益彰麻辣居"]},
{"姓名": "佴赴","手机": "13943898664","地址": ["浙江省","舟山市","岱山县","高亭镇","银厦路88号南峰海鲜面馆"]},
{"姓名": "怀喷","手机": "15618942866","地址": ["甘肃省","天水市","清水县","草川铺镇","449县道腰林秦惠琴希望小学"]},
{"姓名": "幸晴","手机": "13377199751","地址": ["贵州省","黔东南苗族侗族自治州","岑巩县","思旸镇","磨寨村磨寨小学"]},
{"姓名": "满茧腌","手机": "13387889865","地址": ["湖北省","鄂州市","","涂家垴镇","发展路","9号","鄂州市涂家垴派出所"]},
{"姓名": "夹谷抡枯","手机": "18795320124","地址": ["甘肃省","兰州市","城关区","皋兰路街道","皋兰路","210号","郑家台小区"]},
{"姓名": "孙旗乖","手机": "13366755810","地址": ["","","市","","","洮北区长庆南街65号.庆南街65号.",""]}]
附上评测工具评测结果

六、算模块部分异常处理说明

异常样例
1!卓斧,贵州省贵阳清镇市红枫街164号青龙街道办事处13949510110.
异常类型
第三级名称为清镇市,获取第三级地址时误把清镇当作第三级地址导致出错。
解决方法
在匹配第三级后缀的关键字中加入“市”这个关键字,测试后问题解决。

七、完整PSP表格:

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 120 120
Estimate 估计这个任务需要多少时间 120 120
Development 开发 1800 2150
Analysis 需求分析 (包括学习新技术) 780 900
Design Spec 生成设计文档 0 0
Design Review 设计复审 60 90
Coding Standard 代码规范 (为目前的开发制定合适的规范) 60 90
Design 具体设计 60 120
Coding 具体编码 750 800
Code Review 代码复审 30 60
Test 测试(自我测试,修改代码,提交修改) 60 90
Reporting 报告 180 190
Test Repor 测试报告 60 60
Size Measurement 计算工作量 60 70
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 60 60
合计 2100 2460

总结

这次作业前期我花两到三天时间做准备,包括Json等的学习、搜索需要的数据和思考如何实现地址提取。在想明白所有理出来一条思路后开始编写代码,第一版写完后第一个问题暴露出来,那就是编码不同导致的乱码问题,在查了很久资料后发现了(三)中编码转换的函数,而后在课上和同学聊这道题时点醒我c++汉字用两个字符储存,顿时豁然开朗。
原文地址:https://www.cnblogs.com/0x06c0/p/11599351.html