一、我的github仓库
二、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 60 | 80 |
· Estimate | · 估计这个任务需要多少时间 | 900 | 1300 |
Development | 开发 | 300 | 500 |
· Analysis | · 需求分析 (包括学习新技术) | 50 | 40 |
· Design Spec | · 生成设计文档 | 30 | 30 |
· Design Review | · 设计复审 | 20 | 10 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 70 | 60 |
· Design | · 具体设计 | 100 | 80 |
· Coding | · 具体编码 | 20 | 50 |
· Code Review | · 代码复审 | 10 | 30 |
· Test | · 测试(自我测试,修改代码,提交修改) | 250 | 300 |
Reporting | 报告 | 150 | 200 |
· Test Repor | · 测试报告 | 120 | 130 |
· Size Measurement | · 计算工作量 | 20 | 15 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 40 | 30 |
· 合计 | 2140 | 2855 |
三、计算模块接口的设计与实现过程:
- 思路:
- 一开始想单纯的想分离名字分离电话之后,就进行关于关键字的判断,从而的到多级地址。
- 但仔细审题之后发现,有些样例不存在关键字,想了很久,没想到怎么单纯从语法中解决这个问题,遂觉得应该引入地址信息文件。然后通过每一回的解析解决这个问题。
- 找资料:
- 开始想先引用百度的sdk来弄,后来发现自己不会弄,又想着调api,发现自己又不会用,而且不太确定,调用api是否能过评测,所以决定弄离线的包和依赖。然后就去搜索全国地址的列表,即打出省份可以获得其中的城市列表的方法。后来找到了一个工具类,能够比较快的输入省份或者城市,从而获得城市列表或区列表,然后 ,我再用列表的字符串和所需要分割地址进行匹配,从而逐步解决这个问题。
- 设计实现过程:
- 在开始写的时候,我没有想太多,想着一个类写多个方法就能解决问题。然后就在一个类中写了挺多的方法,其中包括:
函数名 | 作用 | 思路 |
---|---|---|
name_spilt(); | 分离名字 | 在逗号之前的就是名字和难度 |
number_spilt(); | 分离电话号码 | 连续十一位就是电话号码 |
provinces(); | 分离省份 | 得到 全国的省份,让省份去一一匹配 |
citys(); | 分离城市 | 得到全省的城市列表,让其一一匹配 |
qus(); | 分离区 | 得到全省的区列表,让其一一匹配 |
zhens() | 分离镇和乡 | 因为本地文件没有到镇,所以就利用关键字匹配 |
lus(); | 分离各种详细的路 | 利用关键字匹配 |
haos(); | 用于分离各级地址 | 利用关键字匹配 |
last(); | 最后留下来的详细地址 | 利用关键字匹配 |
printjson(); | 将字符串用json输出 | 遇到,【{产生不同的换行 |
- 以上的几个函数具有先后关系:
进行逐步分离之后,就能够得到一个分离之后的地址,再通过判定首位是1还是2,决定需要输出什么样子的字符串。
性能分析图:
- 关键代码
public void Provinces(){
//先将地址进行处理,得到前两位和前三位分别两个。如果第一个成立则不运行第二个,反之运行第二个。
String dizhi2,dizhi3;
boolean two=false;
dizhi2 = dizhi.substring(0,2);
dizhi3 = dizhi.substring(0, 3);
LocalUtil lu = LocalUtil.getInstance();
List<String> list = lu.getProvinces("中国");
for(int i=0; i<list.size(); i++){
if(dizhi2.equals(list.get(i))){
two = true;
provine=dizhi2;
break;
}
}
if(two == false){
provine = dizhi3;
}
if(two == true){
String k = dizhi.substring(2,3);
if(k.equals("省")){
dizhi = dizhi.substring(3);
}
else{
dizhi=dizhi.substring(2);
}
}else{
String k = dizhi.substring(3,4);
if(k.equals("省")){
dizhi = dizhi.substring(4);
}
else{
dizhi=dizhi.substring(3);
}
}
}
单元测试
-测试了一些比较案例
1!李四,福建鼓楼13756899511鼓西街道湖滨路110号湖滨大厦一层.
1!张三,福州市闽13599622362侯县上街镇福州大学10#111.
1!刘湖,吉林省白山市六道江镇西村药店18694520738.
1!王五,腾冲市满邑社区华园三小区47号18694520738.
1!咸陡隐,江苏省苏州市吴江13184142847区平望镇新业织造有限公司吴江区平望镇双浜村村民委员会.
2!王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院.
2!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.
2!王五,云南省昭通市水富18694520738县云川路1号.
2!王五,云南省迪庆藏族自治州18694520738香格里拉市.
2!王五,四川省眉山市仁寿18694520738县黑龙滩镇牌坊街.
2!王五,陕西省渭南市韩18694520738城市108国道附近.
输出:
计算模块部分异常处理说明:
出现的状况之一:出现有省无市的情况,所以直接进行对于全体市的遍历,最后的到了答案;
六、心路:
- 懂了分析问题,以及对工具和时间的分配。
- 代码初步完成的时间挺快的,但是后来bug改了好多,然后呢,对于自己这种全部放在一个类的做法深恶痛绝,下次做项目,一定要做好多个类,毕竟也要体现出封装的意义才行。
- 后来在一步一步完成的路上,还是学会了很多,学会了github怎么应用,学会了该怎么比较好的完成一个项目。不过对于gradle并没有非常的会,以及对于java的评测工具没有特别能够使用。
- 我会继续努力的,这个作业只是一个开始,不是结束。以后会继续加油,学习好使用更多的工具,不会像现在这样,学习使用工具的时间多于代码的时间,导致代码并没有非常的完善,还有挺多的bug
- 继续努力好吧。软工对我的提升是目前学习生涯中少有的。