to top

寒假作业(2/2)

这个作业属于哪个课程
https://edu.cnblogs.com/campus/fzu/2020SpringW/
这个作业要求在哪里
https://edu.cnblogs.com/campus/fzu/2020SpringW/homework/10281
这个作业的目标
完成疫情统计的程序以及博客
作业正文
....
其他参考文献
....

1.GitHub仓库地址

仓库地址

2.PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 40 40
Estimate 估计这个任务需要多少时间 30 30
Development 开发 2000 2400
Analysis 需求分析 (包括学习新技术) 200 300
Design Spec 生成设计文档 60 80
Design Review 设计复审 30 45
Coding Standard 代码规范 (为目前的开发制定合适的规范) 60 45
Design 具体设计 240 200
Coding 具体编码 600 600
Code Review 代码复审 60 60
Test 测试(自我测试,修改代码,提交修改) 90 100
Reporting 报告 45 60
Test Report 测试报告 45 60
Size Measurement 计算工作量 30 30
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 45 45
合计 3575 4095

3.解题思路描述

看完需求之后,我想到要用提取命令行的args来解析出各个参数,然后根据log参数和date参数来读取相应txt文件的内容,type参数确定输出的语句,province参数选择需要输出的省份,最后输出到out参数指定的位置。其中读取txt文件内容还需要用正则表达式来匹配和提取“省份”和“感染患者”、“疑似患者”、“治愈”、“死亡”的人数,将其存放到一个内部类里,方便后续的输出。
至于查找资料的部分,因为对HashMap使用的不熟练,我还去找寻HashMap的原理和使用方法的资料,以及同学发的这次作业相关的博文,还有一些细节上的思路问题没法查找的,就去问同学。在这里也非常感谢帮助我的几位同学。

4.设计实现过程

[查看原图](https://images.cnblogs.com/cnblogs_com/hxd1017/1646187/o_200212110009%E6%A8%A1%E5%9D%97%E7%BB%93%E6%9E%84%E5%9B%BE.png) * 首先命令行的输入,把args提取到hashmap里存放,把参数和参数值以键值对形式存储,后面把输入的参数(值)和提供的参数(值)进行正则表达式匹配和提取,进入对应的行为中。 * 因为考虑到文档中的关键数据:省份、ip、sp、cure、dead人数会反复用到,所以将这些内容放入一个province类中存储,省份为String类型,其余四种为int型,province类中含有多种返回参数的方法和构造函数。 * 接下来是对命令参数的分析,-log和-date都是输入的,-province是对province类的数据选择输出的,-type是改变输出格式的,-out是选择输出文件的,故将date涵盖在log里,完成输入,province是中间过程,自为一体,type和out化为一体,控制输出的格式。 * -date是要求选择输入指定日期前的txt文件,把txt文件的日期部分提取出来(这部分应该用正则表达式匹配,当时没想到),转化为日期格式,与输入的-date参数值用isBefore方法比较先后,然后通过输入输出流提取文档中的关键字,将8种行为分别计算结果后,将结果存放回province类中,不同省份的类用ArrayList链接起来,至此完成了输入部分。 * -province比较简单,只需要选取name属性符合要求的province类即可,将选取后的ArrayList返回,这个参数的功能也就实现了。 * -type将选择类的指定属性以一定格式输出,从输入的命令中提取-type参数的键值,对比属性名,配对则输出属性加上格式。 * -out则是接-type,将字符串写到指定文件中。 **流程如下:** [查看原图](https://images.cnblogs.com/cnblogs_com/hxd1017/1646187/o_200212115636%E6%B5%81%E7%A8%8B%E5%9B%BE.jpg)

5.代码说明

将省份定义为类,省份的名称、患病人数设为属性,创建构造函数以及各属性的get、set方法。 用hashmap建立命令参数和参数值的对应关系,以“-”开头的字符串判断为命令存为key,到下一个“-”开头的字符串之前都判断为这个命令参数的参数值,以字符串数组的形式存储,这样就可以通过索引的方式获取到参数值。 这个函数是用来处理命令参数的对应情况的,log和date管理读取,province筛选,type和out输出。 优先判断date输入的参数值是否合理,isVaildDate方法判断是否为日期格式,将文件名中的时间部分转为时间格式和和date参数值对比前后,在date前的以行为单位读取文件,将结果传到list里,正则表达式匹配提取其中的关键字分类8种,每种分别计算省份各种人数的增减,然后将省份类加入arraylist,用sortProvince方法将list中的省份按name属性排序。 提取参数为province的参数值,与list中的类的name属性对比,成功则把该类加入新list中。 将type的参数值的数组按顺序与ip、sp、cure、dead对比,选择出要输出的属性及其格式,out指定输出的文件位置。 match函数将从文件中读取的行分为8种模式,正则匹配成功就执行对应的操作,最后再加上全国的数据,返回省份类数组。 readFile、txt2String、getFile方法组合起来对读入文件的文件名进行筛选,完成文件读入的功能。 ##6.单元测试截图和描述 例如测试sortProvince方法,先建一个province类的ArrayList,然后运行sortProvince方法后对表的类顺序检查是否和预期顺序相符。 这是测试isBefore方法的,先定义几个日期的字符串,然后检查isBefore的返回值是否正确,临界值(日期相等)、年不同、月不同、日不同的日期都进行了测试,返回值都如预期。 上面的是测试isListName方法,该方法要求输入的字符串在list中时返回true,不在时返回false,先简单建立一个list,可以看到,“福建”、“湖北”是在list中的,而“江苏”不在list,返回值也都正确。 **由于测试的类过多且相似度高,参考价值不大,故没有放上来。单元测试覆盖率见下一模块内容。**

7.单元测试覆盖率优化和性能测试

单元测试覆盖率:

由于测试的都是正确数据,所以没有覆盖到报错的代码部分。
暂未优化......
性能测试:

8.代码规范

代码规范的GitHub地址
点击进入

9.心路历程和收获

这次作业让我有了查缺补漏的机会,以前没好好学的内容,现在都需要补上,所以花费时间有些长,特别是正则表达式和哈希表,相当于重新学习了一遍。这次作业也顺便完成了学习计划中的Git的使用,还有其他的,如PSP表格,单元测试等对我来说的新概念的学习。因为基础较差,所以这次实践对我来说有一定难度,这也证明了学到的东西也非常多。读万卷书行万里路,在学习中实践,在实践中学习,让我对理论以及应用有了更深的理解(虽然理解还是不深刻)。
总的来说,这是一次痛并快乐着的学习过程。

10.技术路线图相关的5个仓库

  1. SpringAll

    • 链接: https://github.com/wuyouzhuguli/SpringAll
    • 简介: 循序渐进,学习Spring Boot、Spring Boot & Shiro、Spring Cloud、Spring Security & Spring Security OAuth2,博客Spring系列源码。
  2. spring-boot

  3. spring-boot-api-project-seed

    • 链接: https://github.com/lihengming/spring-boot-api-project-seed
    • 简介: Spring Boot API Project Seed 是一个基于Spring Boot & MyBatis的种子项目,用于快速构建中小型API、RESTful API项目,该种子项目已经有过多个真实项目的实践,稳定、简单、快速。
  4. vjtools

    • 链接: https://github.com/vipshop/vjtools
    • 简介: 唯品会Java开发手册,结合唯品会的内部经验,参考《阿里巴巴Java开发手册》《Clean Code》、《Effective Java》等重磅资料进行了大幅定制,包含核心基础类库VJKit ,问题排查工具VJMap 和 VJTop 三部分。
  5. Java

posted @ 2020-02-11 21:26  hhxd  阅读(299)  评论(3编辑  收藏  举报