第一次个人编程作业
GitHub个人仓库
psp表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 45 | 80 |
Estimate | 估计这个任务需要多少时间 | 900 | 1200 |
Developm | 开发 | 400 | 500 |
Analysis | 需求分析(包括学习新技术) | 100 | 300 |
Design Spec | 生成设计文档 | 30 | 30 |
Design Review | 设计复审 | 10 | 10 |
Coding Standard | 代码规范(为目前的开发制定合适的规范) | 10 | 10 |
Design | 具体设计 | 40 | 100 |
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 | 3010 |
接口的设计与实现
- 我是用c++文件来完成这个作业的,不得不说,c++语言才是万能的(滑稽)。
- 这次的任务,我使用了多文件编程的方法,我的文件有两个cpp文件完成,一个是solve.cpp文件,还有一个是main()的cpp文件。
- main()主文件里的函数有UToG()函数,这个函数的主要功能是将UTL8的编码文件转换成GBK的编码格式,这一步是开头最重要也是最关键的一部分。除了这个函数以外,整个项目因为涉及到很多对中文字符的处理,所以基本都和宽字符分不开关系,所以代码里会有大量宽字符的处理。
- 开头的部分处理完以后,在main()函数里第一步先进行名字和电话号码的处理,将名字和电话号码的宽字符串提取出来。
- 然后再在solve对处理过的地址信息进行省市县的匹配,并用一个ct[ ]宽字符串数组存储它们的信息。
- 最后再返回到main()函数里输出,注意此时的输出必须要经过特殊处理的输出文件方法转换成UTL8编码形式以json格式输出。但是后来发现要输入多组输入后,输出有了些问题,就是txt输出文件只能输出一组最后的结果,然后只能被迫把solve文件的方法转到main()函数里了,不过solve.cpp如果要用还是可以被调用的。
-
流程图
接口性能
- 这张图里可以看出我cpu占用资源比例最大的还是main函数,如果是用solve文件的话估计主体资源占比最大的应该是solve.cpp,改进的话,暂时没有特别的想法,但是如果可以的话我还是想去尝试实现用solve.cpp文件或其他的更多函数做更多事情。
单元测试
输入
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京台高速合肥市庐江县广寒桥街道"]}]
异常处理
- 要处理的部分主要是两个,一个是UToG()函数部分要去修改部分参数来转码成能用的GBK编码,因为UtoG()函数的模板来自网上,因此在一开始修改的时候改了好几次都没有办法输入正常的文字,在试了多次加上大佬帮助才改好函数。另外就是按json格式输出了,也是当时让我头疼的点,因为输入的问题,导致我重新把输出格式改了多次才对应上题目要求的多样例输入。
个人总结
- 通过这次实践,我发现了自己个人的种种不足,个人感觉这次作业对自己来说还是偏难的,一开始对java和c++这两者之间徘徊不前,对java一知半解的我最后还是不得不选择了c++,但是摆在面前的就是一道大坎,文件怎么从utf8输入到程序里操作,在经过宿舍大佬和网上查资料后才勉强解决。解决这一道坎后的编程相对会简单一点,但最后要完成输出时,才发现同时有多道数据输入,然后又是各种的修改,最后不得不对代码进行大规模的改动,废弃了solve.cpp。总的来说,虽说多少还是学到了点东西,但是,这个作业,规模还是有点大,时间也有点紧,要学的东西太多了,在那么赶的时间下去学,学习效果不是很好,多数还是只学到了一些皮毛。