github地址

https://github.com/SunTingxin/031702619

psp表格

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

流程图

接口设计和实现

文件输入输出以utf8作为编码方式应该是用c++编写这次作业遇到的第一个接口问题了,为了使自己能基于常用编码方式编写程序,就需要对输入的数据进行编码转换。因此,我搜索到了以下的代码

wstring UToG(const char *src_str) {
int len = MultiByteToWideChar(CP_UTF8, 0, src_str, -1, NULL, 0);  
	wchar_t* wszGBK = new wchar_t[len + 1];  
	memset(wszGBK, 0, len * 2 + 2);  
	MultiByteToWideChar(CP_UTF8, 0, src_str, -1, wszGBK, len);  
	len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);  
	char* szGBK = new char[len + 1];  
	memset(szGBK, 0, len + 1);  
	WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, szGBK, len, NULL, NULL);  
	string str(szGBK);  
	if (wszGBK) delete[] wszGBK;  
	if (szGBK) delete[] szGBK;  
	size_t cnt = 0;  
	setlocale(LC_ALL, "chs");  
	const char* pts = str.c_str();  
	size_t ns = str.size() + 1;  
	wchar_t *ptd = new wchar_t[ns];  
	wmemset(ptd, 0, ns);  
	mbstowcs_s(&cnt, ptd, ns, pts, ns);  
	wstring res = ptd;  
	delete[] ptd;  
	setlocale(LC_ALL, "C");  
	return res; 
} 

通过这个自定义函数,使得从文件读入的数据完成编码方式的转化,从而顺利对读入的字符串进行操作

当编码问题解决之后,接下来就是对字符串的处理了。我建立了一个类,包含了各种级别的地址和名字电话号码,对于每一行输入数据都建立一个此类的对象,在对数据处理的过程中逐渐填充完毕对象的内容。最后输出成json格式

具体分割的思想是,对于省份,由于省份必不可少且只有两个是三字,再加一个直辖市的特殊性,通过匹配很好解决,对于市,需要引用所有市的名字在其中匹配来确定是否有市,余下级别通过关键字来进行判断。

接口性能与改进

所有模块里耗时最大的就是处理市的那一级函数了,main函数花了主要内存,希望经过以后得学习能有所改进。

单元测试

样例输入

2!李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.
1!张三,福建福州闽13599622362侯县上街镇福州大学10#111.
2!王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院.
1!小陈,广东省东莞市凤岗13965231525镇凤平路13号.
1!鲁胞,上海市长宁区周家桥街道长宁18951233466路999号春天花园.
1!臧街经,北京市东城区北新桥街道东直门内大街民安小区8号楼15679601503.
1!双韵,安13575634949徽黄山市歙县雄村镇006县道与G56杭瑞高速歙县雄村乡防保站.
1!苗朽蕾,13884441418湖北省孝感市云梦县方庙村村委会.
1!诸葛宁盛,河南焦作市山阳区定和街15613629652道塔南路287号新兴日化.
1!冯昔唉,安徽省合肥庐江县郭河镇G3京台高速合肥市庐江18835354291县广寒桥街道.

输出结果

{"姓名":"李四","手机":"13756899511","地址":["福建省","福州市","鼓楼区","鼓西街道","湖滨路","110号","湖滨大厦一层"]},{"姓名":"张三","手机":"13599622362","地址":["福建省","福州市","闽侯县","上街镇","福州大学10#111"]},{"姓名":"王五","手机":"18960221533","地址":["福建省","福州市","鼓楼区","","五一北路","123号","福州鼓楼医院"]},{"姓名":"小陈","手机":"13965231525","地址":["广东省","东莞市","","凤岗镇","凤平路13号"]},{"姓名":"鲁胞","手机":"18951233466","地址":["上海","上海市","长宁区","周家桥街道","长宁路999号春天花园"]},{"姓名":"臧街经","手机":"15679601503","地址":["北京","北京市","东城区","北新桥街道","东直门内大街民安小区8号楼"]},{"姓名":"双韵","手机":"13575634949","地址":["安徽省","黄山市","歙县","雄村","镇006县道与G56杭瑞高速歙县雄村乡防保站"]},{"姓名":"苗朽蕾","手机":"13884441418","地址":["湖北省","孝感市","云梦县","方庙村","村委会"]},{"姓名":"诸葛宁盛","手机":"15613629652","地址":["河南省","焦作市","山阳区","定和街道","塔南路287号新兴日化"]},{"姓名":"冯昔唉","手机":"18835354291","地址":["安徽省","合肥市","庐江县","郭河镇","G3京台高速合肥市庐江县广寒桥街道"]}]

覆盖率截图

异常处理

posted on 2019-09-27 22:33  Jiocold  阅读(153)  评论(1编辑  收藏  举报