第一次个人编程作业
1.GitHub地址
https://github.com/cxxxyy/031702110
2.PSP(估计耗费时间)
||||||||||||||
|:--|:--|:--😐
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟)|
| Planning | 计划 | |
| · Estimate| · 估计这个任务需要多少时间 |1440 |
| Development | 开发 | |
|· Analysis | · 需求分析 (包括学习新技术) |90 |
|· Design Spec | · 生成设计文档 | 60 |
| · Design Review | · 设计复审 | 20 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 |
| · Design | · 具体设计 |200 |
| · Coding | · 具体编码 | 600|
| · Code Review | · 代码复审 | 100 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 90 |
| Reporting | 报告 | |
| · Test Repor | · 测试报告 | 30 |
| · Size Measurement | · 计算工作量 | 30 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 |
| |合计|2540|
3.计算模块接口的设计与实现过程
3.1 解题思路
由题目可得本题重点在于字符串的处理,而对于C++、python和Java这三种语言,我认为python对于字符的处理会比较简单,因此选择python编程。
1.设置person字典,姓名、手机、地址设为键。
2.用正则表达式提取出信息中的姓名和手机,并把除地址外的所有信息删去只剩下地址进行分级处理。
3.针对一级难度,创立函数将地址分为五级;对于二级难度则可以调用五级分址函数,再将剩下的部分地址分为所需的两级,从而构成七级地址;三级难度没有什么思路,听同学说需要连接高德地图的API,太难了太难了。
3.2 主要函数
||||||||||||||
|:--|:--|
|函数名|功能|
|getname|返回信息中的名字
|getph|返回信息中的手机
|divide|返回各级地址内容
|getaddress_1|调用divide返回各级地址内容将地址分为五级
|getaddress|先判断难度为几级,一级直接调用getaddress_1;否则调用getaddress_1后再将剩下的地址分为两级
|divide|返回各级地址内容
流程图
3.3代码关键及独到之处
讲自定义函数中要多次使用的代码段另外用个函数定义,使用函数嵌套。在地址分级的代码段,将所有难度所需分的五级地址分出,将进行判读是否需继续分级,这样就不会像首先判断那样需重复段代码的编写
4.计算模块接口部分的性能改进
5.计算模块部分单元测试展示
部分代码展示
#直辖市 自治区 省
if '北京' in address or'天津' in address or'上海' in address or'重庆' in address:
for i in ['北京','天津','上海','重庆']:
if i in address:
a=i
break
address=re.sub(a,'',address)
if address[0]=='市':
address=re.sub(address[0],'',address)
elif '自治区' in address:
a=divide('自治区',message)
address=re.sub(a,'',address)
elif '省' in address:
a=divide('省',address)
address=re.sub(a,'',address)
else:
a=address[0:2]+'省'
address=re.sub(address[0:2],'',address)
#市,地区,自治州,盟
city_1=['市','地区','自治区','盟']
b=''
for i in ['北京','天津','上海','重庆']:
if a==i:
b=i+'市'
if b=='':
for i in city_1:
if i in address:
b=divide(i,address)
address=re.sub(b,'',address)
break
if b=='':
for i in city_0:
if i in address:
address=re.sub(i,'',address)
b=i+'市'
break
if b=='':
b=address[0:2]+'市'
address=re.sub(address[0:2],'',address)
#市辖区、县级市、县、自治县、旗、自治旗、林区
county_1=['区','市','县','自治县','旗','自治旗','林区']
c=''
for i in county_1:
if i in address:
c=divide(i,address)
address=re.sub(c,'',address)
break
#街道、镇、乡、民族乡、苏木、民族苏木、县辖区
town_1=['街道','镇','乡','苏木','民族苏木']
d=''
for i in town_1:
if i in address:
d=divide(i,address)
address=re.sub(d,'',address)
break
return [a,b,c,d,address]
输入
1!小王,浙江省温18794091546州市龙湾区思阳镇上江路65号溢香厅国际宴会中心.
1!小张,河北衡水市桃城区永14752864795兴西路122号赵家庄居民1区.
2!小明,滨海15607679537新区市新城镇新城村东里5号新城中学.
1!小李,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.
2!小陈,广东省东莞市凤岗13965231525镇凤平路13号.
2!小万,福建福州闽13599622362侯县上街镇福州大学10#111.
2!小王,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院.
1!小美,北京市东15822153326城区交道口东大街1号理光大厦.
1!小七,吉林省四平市铁东区平东街道烟厂路65号中共15612181305城东乡纪律检查委员会.
2!小八,上海奉15655837201贤区海湾镇燎钦公路1393号燎原小区一村北村.
输出
覆盖率
6.计算模块部分异常处理说明
1.3!难度无法自动补全地址输出
输入:3!张三,福建福州闽13599622362侯县上街镇福州大学10#111.
输出:{"姓名": "张三", "手机": "13599622362", "地址": ["福建省", "福州市", "闽侯县", "上街镇", "", "", "大学10#111"]}
2.低级地址内若包含高级地址也会被删除
输入:2!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.
输出:{"姓名": "", "手机": "15822153326", "地址": ["北京", "北京市", "东城区", "", "交道口东大街", "1号", "人民法院"]}
7.PSP(实际耗费时间)
||||||||||||||
|:--|:--|:--😐
| PSP2.1 | Personal Software Process Stages |实际耗时(分钟)|
| Planning | 计划 | |
| · Estimate| · 估计这个任务需要多少时间 |1800 |
| Development | 开发 | |
|· Analysis | · 需求分析 (包括学习新技术) |120 |
|· Design Spec | · 生成设计文档 | 50 |
| · Design Review | · 设计复审 | 20 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 20 |
| · Design | · 具体设计 |100 |
| · Coding | · 具体编码 | 1000 |
| · Code Review | · 代码复审 | 60 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 60 |
| Reporting | 报告 | |
| · Test Repor | · 测试报告 | 30 |
| · Size Measurement | · 计算工作量 | 20 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 |
| |合计|3310

浙公网安备 33010602011771号