第一次个人编程作业
Github地址
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 40 |
· Estimate | · 估计这个任务需要多少时间 | 30 | 40 |
Development | 开发 | 1150 | **1670 ** |
· Analysis | · 需求分析 (包括学习新技术) | 480 | 720 |
· Design Spec | · 生成设计文档 | 20 | 25 |
· Design Review | · 设计复审 | 20 | 15 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 45 |
· Design | · 具体设计 | 15 | 30 |
· Coding | · 具体编码 | 240 | 300 |
· Code Review | · 代码复审 | 100 | 240 |
· Test | · 测试(自我测试,修改代码,提交修改) | 200 | 300 |
Reporting | 报告 | 30 | **80 ** |
· Test Repor | · 测试报告 | 15 | 20 |
· Size Measurement | · 计算工作量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 50 |
· 合计 | 1210 | 1790 |
解题思路
- 1.将保存在address对象里message属性的错乱的地址提取出来,在‘,’前提取人名,删除人名和‘,’;
2.再从字符串中提取连续的11位数字,即电话号码。然后删除数字;
3.按省市县...分级提取删除 - 一开始的时候觉得只是简单的字符串的部分提取和删除的问题,后来......(后来我没办法理清整个思路就开始装扮自己的博客园emmmm)咳咳,后来我就用列表进行关键字提取和删除,同时创建新的列表,最后输出。后来发现输出格式如果空了省/市/县...输出也不会空着。有点迷茫...
- 通过各路神仙的指引,我就去看正则表达式,后来就把之前的代码删的差不多了...正则表达式大概是这样的
String regex="(?<province>[^省]+自治区|.*?省|.*?行政区)?(?<city>[^市]+自治州|.*?地区|.*?行政单位|.+盟|市辖区|.*?市)?(?<dist>[^县]+县|.+?区|.+市|.+旗|.+海域|.+岛)?(?<town>[^区]+镇|.+街道|.+乡|.+县)?(?<village>[^村]+路|.+街|.+巷|.+道|.+段|.+队|.+弄|.+胡同|.+村|.+委会|.+开发区)?(?<number>[^区号]+号)?(?<road>.*)";
计算模块接口的设计与实现过程
- 主要类
类名 | 作用 |
---|---|
Address | 将地址进行处理并保存在该类的属性中 |
Tools | 负责文件的读取和保存 |
- 主要函数
函数名 | 作用 |
---|---|
setMessage() | 将地址付给对象 |
setName() | 匹配出姓名并删除 |
setPhone() | 匹配出手机号并删除 |
setAddress() | 匹配出省市县...和其他 |
计算模块接口部分的性能改进
JP的测试性能图大概是这个样子
(其实我不是很理解这个的意思,是和百度一步步操作的,还有就是有人告诉我一下这个图为啥这么小吗?)
计算模块部分单元测试展示
这是用来测试正则表达式是否可以正确匹配出正确地址的代码:
public class Testt
{
@Test
public void test()
{
String regex="(?<province>[^省]+自治区|.*?省|.*?行政区)?(?<city>[^市]+自治州|.*?地区|.*?行政单位|.+盟|市辖区|.*?市)?(?<dist>[^县]+县|.+?区|.+市|.+旗|.+海域|.+岛)?(?<town>[^区]+镇|.+街道|.+乡|.+县)?(?<village>[^村]+路|.+街|.+巷|.+道|.+段|.+队|.+弄|.+胡同|.+村|.+委会|.+开发区)?(?<number>[^区号]+号)?(?<road>.*)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("福建省福州市");
if(matcher.find())
{
System.out.println(matcher.group("province"));
}
}
}
单元覆盖率如上
计算模块部分异常处理说明
测试数据缺少市会导致地址分配出错
Address [name=张三, phone=13599622362, address=[福建省, 闽侯市, 县, 上街镇, "", "", 福州大学10#111.]]
心得体会
- 讲道理,说实话,很难受,这作业对于我来说是很不容易的,因为编程能力我是真的差,很自闭,但是学到了挺多
- 我的代码经历了四次改造,但是我改完才发现Github是要一边更新一边提交的,可我之前的代码都已经被自己覆盖了/微笑脸
- 编程真的是很多都需要自己自学的,我也感觉到自己这方面的不足,还能怎么办呢,加油呗orz
- 我觉得这个编程作业高于我们平均水平的吧...太难了老师真的把我们想的太厉害了,我要怎么表达不容易呢QAQ