第一次个人编程作业
GitHub链接
给出PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 60 | 30 |
| · Estimate | · 估计这个任务需要多少时间 | 1830 | 2150 |
| Development | 开发 | 180 | 300 |
| · Analysis | · 需求分析 (包括学习新技术) | 240 | 300 |
| · Design Spec | · 生成设计文档 | 60 | 60 |
| · Design Review | · 设计复审 | 60 | 30 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 20 |
| · Design | · 具体设计 | 60 | 90 |
| · Coding | · 具体编码 | 720 | 780 |
| · Code Review | · 代码复审 | 30 | 30 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 180 | 300 |
| Reporting | 报告 | 60 | 60 |
| · Test Repor | · 测试报告 | 60 | 60 |
| · Size Measurement | · 计算工作量 | 60 | 30 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 60 |
| · 合计 | 1830 | 2150 |
解题思路
- 解题思路描述
因为题目要求恢复文件中的数据,而文件由于损坏,手机号码混在了地址数据中,所以我们要做的是:①将手机号码提取分割,这块主要的实现方法是用正则表达式将以一开头的11位数字分割出来,因为题目有要求手机号码一定不会和地址中的数字相邻,所以不用担心出现手机号码出现超出11位的情况;②分割出手机号码之后,再来分割姓名,以“,”为分隔符来进行分割;③剩下的就剩地址数据了,解析数据是整道题目的重难点,因为给出的地址并不统一,有的省份缺失,有的省份并没有给出省这个字,也有一些缺失市级啊什么的情况,因此不能通过查找某一个字来正确的解析出地址,比较好的方法是匹配一个地图,然而我并不懂得怎样去实现;④输出的文件格式要求有“""”将姓名,手机等信息框进去,而在代码的实现时,输出又不能两个双引号放在一起,所以就要找其他的方法。⑤整体思路还算清晰,但是具体的实现真的很难。
找资料:最开始用C++写的时候,参考的是C++程序设计(第三版)中第13章输入输出流里对数据文件的操作与文件流部分,之后改用java,是在慕课里找了一些基本的视频观看,然后针对一些特定的函数和术语在百度上进行搜索和参考。
- 设计实现过程
最初我选择的编程语言是C++,因为java和python我都不熟悉,但是用C++做了一点之后发现不太好做,然后听说java的正则表达式比较好实现,所以改用java,但因为才开始学,很多java的函数都不熟悉,也不会用,所以需要查找很多的资料,还要能理解资料上讲述的内容,这就是一个非常耗时的工作,再加上我转用java之后,距离作业提交的截止时间已经很近了,这次作业又需要安装许多的软件,使用很多以前没有使用过的工具,所有的一切都不熟悉,所以费神费力或许还不讨好,弄得人手忙脚乱的,最后也没能完成一个完整的代码。我本来想的会至少有三个类来编写这次程序,一个类从文件里读取数据并且输出到另一个文件夹,一个类提取姓名和电话,一个类解析地址,但这些对我来说太难了,到最后也没能够实现。
- 计算模块接口部分的性能改进
因为代码没有完成,所以也说不上什么性能改进,也没有什么改进的思路,只不过在最初的时候文件的输入输出的路径有点问题,不过后来改了一下路径就好了。
- 计算模块部分单元测试展示
- 关键代码
- 提取手机号码的正则表达式
- 关键代码
(?😦(13[0-9]{1})|(15[0-9]{1})|(18[0,5-9]{1}))+\d{8})
- 解析地址的关键代码
String regex="(?
[省]+自治区|.*?省|.*?行政区|.*?市)(?<city>[市]+自治州|.?地区|.?行政单位|.+盟|市辖区|.?市|.?县)(? [县]+县|.+区|.+市|.+旗|.+海域|.+岛)?(?<town>[区]+区|.+镇)?(? .*)";
- 部分代码
public static List<Map<String, String>> addressResolution(String address) {
String regex = "(?[省]+自治区|.*?省|.*?行政区|.*?市)(?<city>[市]+自治州|.?地区|.?行政单位|.+盟|市辖区|.?市|.?县)(? [县]+县|.+区|.+市|.+旗|.+海域|.+岛)?(?<town>[区]+区|.+镇)?(? .*)";
Matcher m = Pattern.compile(regex).matcher(address);
String province = null, city = null, county = null, town = null, village = null;
List<Map<String, String>> table = new ArrayList<Map<String, String>>();
Map<String, String> row = null;
while (m.find()) {
row = new LinkedHashMap<String, String>();
province = m.group("province");
row.put("province", province == null ? "" : province.trim());
city = m.group("city");
row.put("city", city == null ? "" : city.trim());
county = m.group("county");
row.put("county", county == null ? "" : county.trim());
town = m.group("town");
row.put("town", town == null ? "" : town.trim());
village = m.group("village");
row.put("village", village == null ? "" : village.trim());
table.add(row);
}
return table;
}
- 计算模块部分异常处理说明
在输入文件这一模块这里,一开始没有设置好文件路径,导致读取失败,最后处理了一下相关路径就成功了。
- 结合在构建之法中学习到的相关内容与个人项目的实践经历,撰写解决项目的心路历程与收获。
心路历程:刚开始想的太简单,以为很容易,但从安装软件开始,就遇到各种各样的问题,很多软件都是全英文的环境,所以理解就很费力。之后又在用代码具体实现的过程中接连遇挫,心真的好累。因为我自己代码没有打完,所以关于测试和性能分析方面就没有发言权。
收获:对java编程语言进行了初步的学习,熟悉了vs 和eclipse 的编程环境,学会了怎样把表格用Markdown打开。
- 给自己的话
- 作业一定要尽早开始,给自己留充足的时间
- 学好一门编程语言很重要
- 要学会熟练运用工具
- 心好累

浙公网安备 33010602011771号