第一次个人编程作业

一、我的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
  • 继续努力好吧。软工对我的提升是目前学习生涯中少有的。
posted @ 2019-09-17 22:25  情缘似水流年  阅读(206)  评论(7编辑  收藏  举报